<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Schauderhaft &#187; Agil</title>
	<atom:link href="http://blog.schauderhaft.de/category/agil/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.schauderhaft.de</link>
	<description>Softwaredevelopment, Projectmanagement, Qualitymanagement and all things &#34;schauderhaft&#34;</description>
	<lastBuildDate>Sun, 05 Feb 2012 20:46:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Social Media and Agile</title>
		<link>http://blog.schauderhaft.de/2009/12/06/social-media-agile-to-the-rest-of-the-world/</link>
		<comments>http://blog.schauderhaft.de/2009/12/06/social-media-agile-to-the-rest-of-the-world/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 04:39:02 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Agil]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[social media]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/?p=326</guid>
		<description><![CDATA[For about a decade now everybody in IT talks about Agile, but hardly anybody else does. There is a somewhat similar concept of &#8216;Lean&#8217; in other industries, but hardly anybody in a &#8216;real&#8217; industry considers things like &#8216;release early&#8217; a viable strategy. And that&#8217;s a good thing. I don&#8217;t want a second iteration car. &#8220;Ooops [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_344" class="wp-caption alignleft" style="width: 310px"><a href="http://www.sxc.hu/browse.phtml?f=download&amp;id=1113387"><img class="size-medium wp-image-344" title="1113387_51567384" src="http://blog.schauderhaft.de/wp-content/uploads/2009/12/1113387_51567384-300x198.jpg" alt="Flip up Shades" width="300" height="198" /></a><p class="wp-caption-text">Flip up Shades</p></div>
<p>For about a decade now everybody in IT talks about Agile, but hardly anybody else does. There is a somewhat similar concept of &#8216;Lean&#8217; in other industries, but hardly anybody in a &#8216;real&#8217; industry considers things like &#8216;release early&#8217; a viable strategy. And that&#8217;s a good thing. I don&#8217;t want a second iteration car. &#8220;Ooops sorry, the story about braking is still in the backlog&#8221;. I am confident that if those kind of companies would learn agile from the books, they&#8217;d need quite some time until they realize the fine difference between &#8216;ship&#8217; and &#8216;shippable&#8217;.</p>
<p>But maybe these companies won&#8217;t learn it from the books, but from their tools. As <a href="/2009/11/15/social_web_tool_fool/">said before</a> companies will learn about social media, and to some extend it will invade  daily life and work at these companies. But if you start doing your documentation in a wiki, for everybody to see or spurt out your idea on a internal twitter account, then you are presenting stuff as potentially shippable. Not the car you will eventually build. But maybe the concept for a new feature.</p>
<p>Everybody will be able to judge the results, comment, provide feedback. And without realizing it big old companies will become just a little bit agile.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2009/12/06/social-media-agile-to-the-rest-of-the-world/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Interfaces for Databases</title>
		<link>http://blog.schauderhaft.de/2009/01/14/interfaces-for-databases/</link>
		<comments>http://blog.schauderhaft.de/2009/01/14/interfaces-for-databases/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 22:32:06 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Agil]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2009/01/14/interfaces-for-databases/</guid>
		<description><![CDATA[I wrote before about the maturity (or lack thereof) of the art of software development in the database realm. So did others. One thing I noted is that there is no discussion on how to break down a database into modules or packages. So today instead of mainly complaining, I&#8217;going to make a proposal on [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote before about the maturity (or lack thereof) of the art of <a href="http://blog.schauderhaft.de/2008/08/31/datenbankesign/">software development in the database realm</a>. <a href="http://martinfowler.com/bliki/DatabaseThaw.html">So did others</a>.<br />
One thing I noted is that there is no discussion on how to break down a database into modules or packages.</p>
<p>So today instead of mainly complaining, I&#8217;going to make a proposal on how to manage you database in a modular fashion.</p>
<p>One of the strengths of databases is the concept of foreign keys, a declarative way of enforcing relationships.<br />
But when it comes to modularity, foreign keys are the source of all evils. They link two tables with each other and there is no standard way to remove the dependency. In object oriented computing languages this would be done with interfaces.</p>
<p>Instead of Class A directly referencing Class B it would reference a nInterface IB and Class B would implement that interface. We now can replace Class B and Instances of Class A won&#8217;t notice. How can we achieve this with databases?</p>
<p>Probably the first idea that comes to mind is “views!”. Views are basically select statements with the name. They do hide dependencies to the underlying tables so that is a start, but they do not correspond to interfaces for two reasons.</p>
<p>First: The dependency between a table and a view is just the opposite way than the dependency between a class and an interface. This means we can&#8217;t reference views in our code and simply swap the underlying table.</p>
<p>Second: At least Oracle (and I guess this is true for most databases) can&#8217;t use a view a foreign key relationship.<br />
So views don&#8217;t help that much.</p>
<p>Let&#8217;s look once more at classes, interfaces. One thing to realize is that in the example above there is  a dependency between Instances of A and B but not between their classes. The dependency between the instances is created at runtime. How does that help with databases? Typically classes are identified with tables and instances with rows in tables and that works just fine for ORM tools.</p>
<p>But I want to propose a different mapping. How about considering the create script of the table “the class” and the actual table in a database a instance. If you choose this approach, everything falls into place. The interface becomes a create script that just creates the most essential columns of a table, possibly only the primary key. You now can have different implementing tables / scripts, which either add columns for your normal production version of the table or a more simple version with only a couple of fields. Or you create no additional fields at all.</p>
<p>Obviously this makes organizing the scripts more complex in the first step. What are the benefits? Actually this can help in many ways.</p>
<p>You can use it for testing. With database testing a common problem is the setup of test data. Since everything is connected with foreign keys you need to create tons of master data in order to just create a single row that you actually want to use in your test. Know you replace all tables referenced by the table you want to use in the test with dummy implementations, featuring just the primary key, so no further dependencies and the setup can happen easily, possibly automatically.</p>
<p>You can use it for a modular application. Imagine an application that references some kind of &#8216;Order&#8217;. One customer wants an extremely simple order with just one line item with a fixed quantity of 1. For another customer it is the average order with multiple line items, different units of quantities (string is sold by the meter, other stuff is sold by piece &#8230;). The third customer has extremely complex orders with rules governing what combinations of line items can go into a single order. You know this kind of order when you ever <a href="http://cc5.volkswagen.de/cc5/preselect.aspx?process=motorselect&amp;template=new_beetle_cabriolet_freestyle_freestyle&amp;context=default&amp;app=ICC-DE">configured a car online</a>. The forth customer has a different kind of order, but that doesn&#8217;t matter because it is a third party system and your application has just to maintain a reference.</p>
<p>Normally you need a table structure that combines all possible implementations, making it more complex than even the most complex implementation that you actually need. With the proposed approach you&#8217;ll have four different implementations and can choose the one you need for each deployment.</p>
<p>So how do we actually do this? Well that is the real challenge. Right now I don&#8217;t know of any tool supporting this. One could use Hibernate with a dynamically created <a href="http://www.hibernate.org/hib_docs/v3/api/org/hibernate/cfg/Configuration.html">Configuration</a>. But there are things in a database that you probably don&#8217;t want to control via hibernate (e.g. partitions and tablespaces). You could create your own little script assembly tool, store DDL scripts in a directory structure, that has branches for each implementation variant. A little configuration file would define what implementation variant to use for which object. In any case we would need to stop developing directly in a database. We should work on the file system and deploy into a database even in development instead.</p>
<p>I guess there is plenty of room for more ideas and of course tools. What do you think? Is this an approach that could pay off? Is this old stuff and I just reinvented the wheel? Or is all this completely stupid and should be handled differently?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2009/01/14/interfaces-for-databases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kunden von agilen Ansätzen überzeugen</title>
		<link>http://blog.schauderhaft.de/2008/11/13/kunden-von-agilen-ansatzen-uberzeugen/</link>
		<comments>http://blog.schauderhaft.de/2008/11/13/kunden-von-agilen-ansatzen-uberzeugen/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 15:58:45 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Agil]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/11/13/kunden-von-agilen-ansatzen-uberzeugen/</guid>
		<description><![CDATA[Als Mitarbeiter eines Softwaredienstleisters habe ich mit agilen Methoden immer wieder ein großes Problem: &#8220;Wie überzeuge ich den Kunden?&#8221; Es sollte in seinem Interesse sein, mit den Softwareentwicklern, die Anwendung in kleinen Häppchen zu spezifizieren, zu entwickeln und auszuprobieren. Aber der Kunde sieht die Sache anders. Er hat oft schlechte Erfahrungen gemacht. Anbieter haben nicht [...]]]></description>
			<content:encoded><![CDATA[<p>Als Mitarbeiter eines <a href="http://www.lineas.de">Softwaredienstleisters</a> habe ich mit agilen Methoden immer wieder ein großes Problem: &#8220;Wie überzeuge ich den Kunden?&#8221; Es sollte in seinem Interesse sein, mit den Softwareentwicklern, die Anwendung in kleinen Häppchen zu spezifizieren, zu entwickeln und auszuprobieren. Aber der Kunde sieht die Sache anders. Er hat oft schlechte Erfahrungen gemacht. Anbieter haben nicht gehalten, was sie versprochen haben, und Software wurde nicht, grotten schlecht, oder durch teure Change Requests extrem teuer, obwohl von anfan an ein Festpreis vereinbart war. Da kann man es verstehen, dass er versucht die Anforderungen so gut es geht von Anfang an in Beton zu gießen, damit da niemand mehr dran rumdeuteln kann. Allein es funktioniert nicht.</p>
<p><a href="http://martinfowler.com/bliki/ScopeLimbering.html">Martin Fowler hat eine Antwort</a>. Er beschreibt ein Projekt, dass auf genau diese Weise als Festpreis vereinbart wurde:</p>
<blockquote><p>Slowly but steadily the changes ate up the buffer. After about six months or so the changes had used up the buffer completely. We&#8217;d been quite open with Nebbiolo during this whole time, so they weren&#8217;t surprised when we told them that we couldn&#8217;t afford to eat the cost of the changes any more. During that time we&#8217;d collaborated closely with Nebbiolo and they&#8217;d grown to trust us. We had no problem finding more money, indeed it took another half million to cover the requirements changes that were needed before we delivered.</p>
<p>At the end of all this Nebbiolo agreed that the fixed scope approach was a mirage, and we would do future projects together using a more flexible charging scheme.</p></blockquote>
<p>Es gibt zwei Dinge die notwendig sind, damit das ganze funktioniert:</p>
<ol>
<li>Vertrauen. Das Team muss es schaffen das Vertrauen des Kunden zu gewinnen, zu verdienen. Und dies schafft ThoughtWorks durch <a href="/2008/11/04/wie-ehrlich-bist-du/">Offenheit</a> und entgegenkommen.<br />
<blockquote><p>We [.. ] didn&#8217;t charge the client for the change</p></blockquote>
<p>Aber damit das funktioniert braucht es etwas anderes:</li>
<li> Ein hochgradig fähiges Team, denn nur dadurch, konnte ThoughtWorks mit einem Preis antreten, der günstiger war als der, der Konkurenz und dennoch 50% Puffer enthielt:<br />
<blockquote><p>We charge much higher daily rates for our people, but since we have better and more productive people, we can actually do the job for less.</p></blockquote>
</li>
</ol>
<p>Also, ihr wollt agile entwickeln, aber eure Kunden wollen Festpreise? Die Lösung ist &#8220;einfach&#8221;, sucht euch ein Spitzenteam. Macht ein Festpreisprojekt mit großzügigem Puffer und spielt mit offenen Karten, damit der Kunde sieht wie zuverlässig ihr arbeitet, und wie wenig von seinen ursprünglichen Anforderungen wirklich übrigbleibt.</p>
<p>Und wer schon mal versucht hat Spitzenleute anzuheuern weiß, warum einfach oben in Anführungszeichen steht.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/11/13/kunden-von-agilen-ansatzen-uberzeugen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Methoden für Buchhaltung und Controlling</title>
		<link>http://blog.schauderhaft.de/2008/06/11/agile-methoden-fur-buchhaltung-und-controlling/</link>
		<comments>http://blog.schauderhaft.de/2008/06/11/agile-methoden-fur-buchhaltung-und-controlling/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 10:49:55 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Agil]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/06/11/agile-methoden-fur-buchhaltung-und-controlling/</guid>
		<description><![CDATA[Ich las gerade einen Artikel von Stephan Schwab über den Zusammenhang von Buchhaltung und Softwareentwicklung. Er kritisiert die Situation in vielen großen Unternehmen, in denen die Hard und Softwareausstattung der Entwickler katastrophal schlecht ist. Oft liegt das an unakzeptablen aber zwingend zu nutzenden internen Lieferanten: Hardware is usually already there or provided by a central [...]]]></description>
			<content:encoded><![CDATA[<p>Ich las gerade einen Artikel von <span>Stephan Schwab über den <a href="http://www.stephan-schwab.com/2008/04/05/1207419390256.html">Zusammenhang von Buchhaltung und Softwareentwicklung</a>. Er kritisiert die Situation in vielen großen Unternehmen, in denen die Hard und Softwareausstattung der Entwickler katastrophal schlecht ist. Oft liegt das an unakzeptablen aber zwingend zu nutzenden internen Lieferanten:</span></p>
<blockquote><p>Hardware is usually already there or provided by a central services department. And the services department usually charges an outragous amount.</p></blockquote>
<p>Hinzu kommt in meiner Erfahrung eine Rigide und unangemessene Budgetplanung. Das extremste Beispiel das ich bisher selbst erlebt habe stammt allerdings aus Uni Zeiten und nicht aus einer Firma, aber das scheint mir mehr Zufall als alles andere zu sein:</p>
<p>Während ich an meiner Diplomarbeit arbeitete war das Budget für Büromaterialien derartig knapp, dass alle in der Arbeitsgruppe ihr Büromaterial selbst mitbringen mussten. Das war nicht so tragisch, da wir nicht viel brauchten, außer Papier, Bleistift, Radiergummi und Anspitzer. Absurd wurde es nur, als just zu dieser Zeit eine neue Workstation angeschafft wurde, da im Hardware Budget noch so viel Geld war und wir das Budget aufbrauchen mussten um es auch im nächsten Jahr wieder zu bekommen. Zur Einordnung, zu der Zeit hatte ich mit einem 486DX2 mit 8MB Hauptspeicher einen ordentlichen nicht ganz billigen Rechner, und die Workstation wurde angekündigt mit: &#8220;Es gibt eine gute und eine schlechte Nachricht. Die gute: Wir bekommen eine neue Workstation. Die schlechte: Sie hat nur 168MB Hauptspeicher.&#8221; Und das war ernst gemeint.</p>
<p>Mir scheint, dies ist genau die Art von Situation die man mit agilen Methoden versucht zu vermeiden. Anstatt an einem Abkommen zu kleben, das längst veraltet ist, setzt man sich mit den Beteiligten zusammen und bestimmt was für die nächste Iteration, d.h. überschaubaren Zeitraum am wichtigsten ist. Und darum kümmert man sich. Bei einem solchen Vorgehen sollte es kein Problem sein ein paar hundert Euro vom Hardware Budget ins Büromaterialbudget zu verschieben.</p>
<p>Also schickt eure Verwaltungs- / Controlling- / Buchhaltungs- Abteilung doch mal zu einer SCRUM Schulung. Aber informiert schon mal den Notarzt, die sollen den Defibrillator bereithalten, falls Konzepte wie Kundenorientierung und Flexibilität auf die Teilnehmer zu bedrohlich wirken.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/06/11/agile-methoden-fur-buchhaltung-und-controlling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

