<?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>Matthias Bohlen &#187; Matthias Bohlen</title>
	<atom:link href="http://www.mbohlen.de/blog/author/mattes3/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mbohlen.de/blog</link>
	<description>Coach für produktive Software-Teams</description>
	<lastBuildDate>Thu, 08 Jul 2010 21:17:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SW-Projekte quantitativ managen</title>
		<link>http://www.mbohlen.de/blog/2010/07/08/sw-projekte-quantitativ-managen/</link>
		<comments>http://www.mbohlen.de/blog/2010/07/08/sw-projekte-quantitativ-managen/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 21:17:13 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1156</guid>
		<description><![CDATA[Im neuen OBJEKTspektrum-Heft finden Sie meinen aktuellen Artikel &#8220;Softwareprojekte quantitativ managen &#8211; ein Weg zum performanten Team&#8221;. Hier die Zusammenfassung:
In Softwareprojekte wird viel Geld investiert. Der Auftraggeber möchte, dass diese Investition Früchte trägt, zu neudeutsch: Er erwartet ein Return on Investment (ROI). Wie kann man mit Hilfe quantitativer Methoden diesen ROI tatsächlich erwirtschaften? Dieser Artikel [...]]]></description>
			<content:encoded><![CDATA[<p>Im neuen <a href="http://www.objektspektrum.de">OBJEKTspektrum</a>-Heft finden Sie meinen aktuellen Artikel &#8220;Softwareprojekte quantitativ managen &#8211; ein Weg zum performanten Team&#8221;. Hier die Zusammenfassung:</p>
<blockquote><p>In Softwareprojekte wird viel Geld investiert. Der Auftraggeber möchte, dass diese Investition Früchte trägt, zu neudeutsch: Er erwartet ein Return on Investment (ROI). Wie kann man mit Hilfe quantitativer Methoden diesen ROI tatsächlich erwirtschaften? Dieser Artikel führt zunächst grundsätzliche Messgrößen für Softwareprojekte ein. Danach wird gezeigt, wie man ein Softwareprojekt als wissensverarbeitendes System verstehen kann – dadurch wird das Managementwissen aus den Bereichen „Lean Production” und „Theory of Constraints” anwendbar. Schließlich erklärt der Artikel, wie dieses Wissen im Projektalltag angewendet wird.</p></blockquote>
<p><a title="Artikel im PDF-Format" href="http://www.sigs-datacom.de/fachzeitschriften/objektspektrum/archiv/artikelansicht.html?tx_mwjournals_pi1[pointer]=0&amp;tx_mwjournals_pi1[mode]=1&amp;tx_mwjournals_pi1[showUid]=6637">Lesen Sie den Artikel auch online.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/07/08/sw-projekte-quantitativ-managen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kanban-Missverständnisse, Teil 1</title>
		<link>http://www.mbohlen.de/blog/2010/05/14/kanban-missverstandnisse-teil-1/</link>
		<comments>http://www.mbohlen.de/blog/2010/05/14/kanban-missverstandnisse-teil-1/#comments</comments>
		<pubDate>Fri, 14 May 2010 17:10:41 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1140</guid>
		<description><![CDATA[In den letzten Tagen gab es auf Twitter einige interessante Fragen zu Kanban. Diese zeigen, dass es in der Community noch so manche Missverständnisse über die neue Methodik gibt.
Johannes Link stellte auf Twitter eine sehr interessante Frage:
Warum zeigen so viele Agilisten ihr neues Tool Kanban mit einer wasserfall-artigen Arbeitsaufteilung?
(Im Dialog mit Johannes, den Sie auf Twitter [...]]]></description>
			<content:encoded><![CDATA[<p>In den letzten Tagen gab es auf Twitter einige interessante Fragen zu Kanban. Diese zeigen, dass es in der Community noch so manche Missverständnisse über die neue Methodik gibt.</p>
<p>Johannes Link stellte auf Twitter <a href="http://twitter.com/johanneslink/status/13423538099">eine sehr interessante Frage</a>:</p>
<blockquote><p>Warum zeigen so viele Agilisten ihr neues Tool Kanban mit einer wasserfall-artigen Arbeitsaufteilung?</p></blockquote>
<p><em>(Im Dialog mit Johannes, den Sie auf Twitter nachlesen können, hatte ich Probleme, in 140 Zeichen darzustellen, was ich meine, deshalb hier dieser ausführliche Blog-Artikel.</em>)</p>
<p>Der Grund für das, was die Kanban-Fans tun, ist wohl dieser: In Kanban gibt es fünf Schritte oder Kern-Eigenschaften der Methode:</p>
<ol>
<li>Visualisiere den Workflow</li>
<li>Limitiere angefangene Arbeit (work in progress)</li>
<li>Messe und manage den Fluss</li>
<li>Mache Prozessrichtlinien explizit</li>
<li>Benutze Modelle (wie z.B. ToC), um Möglichkeiten zur Verbesserung zu erkennen</li>
</ol>
<p>Der erste Schritt &#8220;Visualisiere den Workflow&#8221; tut genau das: Auf einem Taskboard stellt man dar, wie der aktuelle Workflow des/der Teams gerade ist. Nicht mehr und nicht weniger. Manche Teams beginnen mit Spalten wie &#8220;backlog, in progress, done&#8221; wie in XP oder Scrum und machen gute Erfahrungen damit. Andere Teams fügen weitere Spalten hinzu, wenn sie glauben, dass es nötig ist.</p>
<h3>Beispiele für Workflow-Visualisierung</h3>
<p>Ein Beispiel: In einem Scrum-Team, das ich aktuell coache, erkannten wir in einer Retrospektive, dass die Entwickler die Features oft sehr zeitnah entwickelten, die Karten auf dem Taskboard aber trotzdem sehr lange Zeit in der Spalte &#8220;in progress&#8221; verbrachten.</p>
<table>
<tbody>
<tr>
<th>backlog</th>
<th>in progress</th>
<th>done</th>
</tr>
<tr>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
</tr>
</tbody>
</table>
<p>Der Grund war: Unsere Definition of Done schrieb vor, dass der Akzeptanztest durch den Product Owner Bestandteil des Begriffes &#8220;done&#8221; sein musste. Der Product Owner war jedoch in weiteren Projekten involviert und hatte fast nie sofort Zeit zu testen, sobald ein Feature fertig geworden war. Es bildete sich beim P.O. ein &#8220;Test-Stau&#8221; mit unangenehmem Ergebnis: Es gab öfters einmal ungetestete Karten, die dann eben nicht zum Sprint-Ergebnis gezählt werden konnten und sollten.</p>
<p>Dies wollten die Entwickler sichtbar machen und fügten dem Taskboard eine Spalte &#8220;acceptance test&#8221; hinzu. Nun konnte man erkennen, wie sich dort die Karten stapelten bis der Product Owner sie gegen Ende des Sprints abräumte &#8211; eine risikoreiche Vorgehensweise.</p>
<table>
<tbody>
<tr>
<th>backlog</th>
<th>in progress</th>
<th>acceptance test</th>
<th>done</th>
</tr>
<tr>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
</tr>
</tbody>
</table>
<p>Ein anderes Scrum-Team, das ich kenne, verwendet eine separate Spalte mit der Überschrift &#8220;GUI design&#8221;. Dort werden Karten aufgehängt, die fast fertig entwickelt und auch schon inspizierbar sind, jedoch noch ohne eine richtig schöne und ergonomische Oberfläche, die danach erst durch eine externe UI-Designagentur geschaffen wird. Erst wenn die UIs von dort zurückkommen, wird die Karte auf &#8220;acceptance test&#8221;, danach auf &#8220;done&#8221; geschoben.</p>
<table>
<tbody>
<tr>
<th>backlog</th>
<th>in progress</th>
<th>GUI design</th>
<th>acceptance test</th>
<th>done</th>
</tr>
<tr>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
</tr>
</tbody>
</table>
<h3>Vom Workflow zum Wasserfall</h3>
<p>Zurück zur Frage von Johannes: Warum zeigen die Kanban-Leute wasserfall-artige Taskboards? Antwort: Sie tun es nicht &#8211; sie zeigen lediglich Workflows. Was ist der Unterschied? Ein Workflow ist einfach eine Reihe von Arbeitsschritten, die hintereinander ausgeführt werden. Um daraus einen Wasserfall zu machen, muss man mindestens noch folgende negative Eigenschaften hinzufügen:</p>
<ol>
<li>Das &#8220;100% Losgröße&#8221;-Syndrom: Man führe jeden Workflow-Schritt mit 100% aller Anforderungen durch und gehe erst danach zum nächsten Schritt des Workflows. Auf keinen Fall das, was schon getan ist, schon mal in den nächsten Workflow-Schritt weiterreichen &#8211; das könnte ja unvollständig aussehen!</li>
<li>Das Isolations-Syndrom: Man lasse die Leute, die in einem Workflow-Schritt arbeiten, auf keinen Fall mit den Leuten aus einem anderen Workflow-Schritt zusammenarbeiten. Also darf ein Analyst niemals mit einem Architekten und dieser auch niemals mit einem Entwickler reden &#8211; alle dürfen nur über Dokumente miteinander kommunizieren, die durch ausführliche Reviews abgesichert und dann unterschrieben sind.</li>
</ol>
<h3>Kanban geht gegen den Wasserfall vor</h3>
<p>In Kanban ist beides nicht der Fall. Mit der Kanban-Methode versucht  man im Gegenteil die Durchlaufzeit eines Features durch den Workflow zu minimieren. Wer Littles Gesetz kennt, weiß, dass das mit 100% aller Anforderungen nicht geht, sondern je weniger &#8220;work in progress&#8221; (angefangene Arbeit) man hat, desto kürzer ist die Durchlaufzeit. Deshalb limitiert man in Kanban die Zahl der gleichzeitig in Arbeit befindlichen Features.</p>
<p>Jeder, der arbeitet, soll die Gelegenheit haben, sich zu konzentrieren &#8211; also limitiert man die Zahl der Features z.B. auf 4, wenn man 3 Entwickler hat. Die drei Entwickler sollten im wesentlichen immer an je einem  Feature arbeiten, es sei denn, dieses ist blockiert, weil man auf eine Antwort wartet oder weil eine Ressource fehlt, die man braucht. Dann darf man sich ausnahmsweise ein 4. Feature ziehen.</p>
<p>Je geringer die Menge gleichzeitig angefangener Arbeit, desto geringer ist auch die Zahl der Fehler, die man einbaut. Menschen arbeiten wesentlich korrekter, wenn sie konzentriert sind. Dies reduziert die Zahl der Überarbeitungen, die notwendig sind, um ein Vielfaches!</p>
<p>Auch die Isolation, die im Wasserfall typisch ist, gibt es in Kanban nicht. Da Kanban aus dem agilen Umfeld stammt, ist Kommunikation ein hohes Gut. Man sollte immer mit den Leuten reden, die am selben Feature gearbeitet haben oder arbeiten werden wie man selbst. Der Entwickler wird den Business Analysten oder den Architekten fragen, der Tester wird den Entwickler fragen, was hinter gewissen Zusammenhängen eigentlich steckt. Viel besser ist es natürlich, wenn Business Analyst und Entwickler zum selben cross-funktionalen Team (wie in Scrum) gehören und das Feature gemeinsam analysieren und realisieren.</p>
<h3>Die Kraft des Vakuums</h3>
<p>Oben habe ich das Beispiel mit dem überlasteten Product Owner erwähnt, bei dem sich ein Test-Stau bildete. In Scrum würde man dies jetzt auf die Impediment-Liste des Scrum-Masters schreiben und dieser würde gegen den Effekt zu kämpfen beginnen. In Kanban würde man das vermutlich folgendermaßen lösen: Man würde für die Spalte &#8220;acceptance test&#8221; ein WIP-Limit einführen und z.B. auf die Menge einschränken, die der Product Owner in einem Time-Slot, den er sich bei seinen vielen Projekten nimmt, bewältigen kann. Hat er ab und zu mal zwei Stunden Zeit und kann darin 3 Features sauber testen, so würde man das &#8220;work in progress&#8221;(WIP)-Limit auf 3 setzen. Was würde dann passieren?</p>
<p>Schließen Sie die Augen und überlegen Sie eine Minute, bevor Sie weiterlesen!</p>
<p>Die Entwickler würden jedesmal, wenn sie etwas fertig haben, eine Karte in die Spalte &#8220;acceptance test&#8221; schieben. Kommt der Product Owner nicht zum Testen und enthält die Spalte nun 3 Karten, würden die Entwickler einfach aufhören zu entwickeln. Sie würden stattdessen vielleicht refaktorisieren, Urlaub machen, Schulungen besuchen, Kaffee trinken oder andere sinnvolle Tätigkeiten durchführen. Beim morgendlichen Stand-Up würden sie diese Tatsache auch sofort bekanntgeben.</p>
<p>Das Risiko, den Sprint mit einer ungetesteten Featuremenge zu beenden, würde dadurch drastisch abnehmen. Das Team inklusive P.O. wäre plötzlich als Gesamtsystem erkennbar, das einfach nicht in der Lage ist, mehr zu leisten als der P.O. fertigbekommt. Der P.O. wäre ganz klar als Bottleneck erkennbar.</p>
<p>Was würde als nächstes passieren, wenn niemand interveniert? Denken Sie einen Moment nach&#8230;</p>
<h3>Das Vakuum greift um sich</h3>
<p>Wenn die Entwickler weniger tun, staut sich plötzlich alles im Backlog zurück. Nehmen Sie an, wir hätten mittels Kanban auch die Länge des Backlogs limitiert. Die Leute, die bisher dem Product Owner geholfen haben, Features zu beschreiben und ins Backlog zu bringen (nennen wir sie &#8220;fachliche Analysten&#8221;), wären dann plötzlich ebenfalls arbeitslos, weil sie nichts mehr in das bereits volle (weil limitierte) Backlog stellen dürfen.</p>
<p>Oh, hier haben wir Analysten, also fachlich geschulte Leute, die frei sind! Was tun wir mit denen? Wir machen sie zu Testern, die zunächst einmal den Stau von Akzeptanztests abbauen und dadurch den P.O. entlasten. Damit wird die Spalte &#8220;acceptance test&#8221; wieder frei, die Entwickler nehmen die Arbeit wieder auf und produzieren wieder. Im Backlog werden dadurch wieder Plätze frei, also können die Analysten ihre eigentliche Arbeit wieder aufnehmen und neue Backlog-Items produzieren. Der Propfen löst sich.</p>
<h3>Von der Taktik zur Strategie</h3>
<p>Das gerade geschilderte Verhalten ist sicherlich nicht optimal, doch hat es erst einmal geholfen. Das Management wird inzwischen von der Aktion gehört haben und sich entscheiden, mehr Tester einzustellen, die dem Product Owner helfen. Die Tester kommen langsam auf Touren und der Propfen wird sich dann nicht mehr bilden müssen.</p>
<h3>Die Antwort auf die Frage nach dem Wasserfall</h3>
<p>Johannes Frage von oben könnte man nun anders formulieren:</p>
<blockquote><p>Warum zeigen so viele Agilisten ihr neues Tool Kanban mit einer so ausführlichen Arbeitsaufteilung (so viele Spalten auf dem Taskboard)?</p></blockquote>
<p>Weil sie zeigen wollen, was wirklich passiert. Das dreispaltige Scrum-Taskboard zeigt eben nicht, dass in der Sprint-Mitte typischerweise viel WIP entsteht, besonders bei unreifen Scrum-Teams, die noch nicht lange dabei sind. Führt man mehr Spalten ein, bildet man die Realität im Team u.U. besser ab und kann auf Effekte aufmerksam machen, die man vorher übersehen hat.</p>
<p><em>D&#8217;accord, Johannes?</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/05/14/kanban-missverstandnisse-teil-1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Die Auferstehung eines Acer Aspire One</title>
		<link>http://www.mbohlen.de/blog/2010/05/09/die-auferstehung-eines-acer-aspire-one/</link>
		<comments>http://www.mbohlen.de/blog/2010/05/09/die-auferstehung-eines-acer-aspire-one/#comments</comments>
		<pubDate>Sun, 09 May 2010 08:30:17 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1136</guid>
		<description><![CDATA[Manchmal überkommt mich ein Bastelzwang, wenn ich wieder zu lange zu ernsthaft gearbeitet habe. Das war heute auch wieder so.
Ich hatte mich entschieden, auf meinem Acer Aspire One Netbook eine neue Linux-Version (Ubuntu 10.04) zu installieren. Klappte auch wunderbar. Ubuntu heruntergeladen und auf einen USB-Stick geschrieben, mit dem Stick den Rechner gebootet und Ubuntu ganz einfach [...]]]></description>
			<content:encoded><![CDATA[<p>Manchmal überkommt mich ein Bastelzwang, wenn ich wieder zu lange zu ernsthaft gearbeitet habe. Das war heute auch wieder so.</p>
<p>Ich hatte mich entschieden, auf meinem Acer Aspire One Netbook eine neue Linux-Version (Ubuntu 10.04) zu installieren. Klappte auch wunderbar. Ubuntu <a href="http://www.ubuntu.com/getubuntu/download-netbook">heruntergeladen</a> und <a href="http://www.pendrivelinux.com/create-a-ubuntu-9-10-live-usb-in-windows/">auf einen USB-Stick geschrieben</a>, mit dem Stick den Rechner gebootet und Ubuntu ganz einfach parallel zu Windows auf der Festplatte installiert. Rechner neu gebootet, und ich konnte mit Ubuntu oder Windows arbeiten, je nachdem, wie ich Lust hatte.</p>
<p>Doch leider: Beim einem der nächsten Restarts der Maschine kam es zu einem <strong>Black Screen Of Death</strong>, einem in der Acer-Community offenbar wohlbekannten Problem mit einem nicht mehr startbaren BIOS: Schwarzer Bildschirm nach dem Einschalten, keine Bootmeldungen, voller Stopp!</p>
<p>Gott sei Dank war das Problem relativ leicht zu beheben:</p>
<ul>
<li>Neues BIOS von der <a href="http://support.acer-euro.com/drivers/notebook/as_one_150.html">Acer-Supportseite</a> laden.</li>
<li>Auf einen frisch formatierten USB-Stick schreiben.</li>
<li>Diesen <a href="http://gborn.blogger.de/stories/1218795/">magischen Anweisungen folgen</a> und derweil beschwörende Sprüche murmeln.</li>
</ul>
<p>Der Aspire One war danach wieder einsatzbereit. Manchmal hat man doch wirklich Glück, obwohl man es herausfordert. <img src='http://www.mbohlen.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/05/09/die-auferstehung-eines-acer-aspire-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kanban, hoch über Köln</title>
		<link>http://www.mbohlen.de/blog/2010/05/07/kanban-hoch-uber-koln/</link>
		<comments>http://www.mbohlen.de/blog/2010/05/07/kanban-hoch-uber-koln/#comments</comments>
		<pubDate>Fri, 07 May 2010 17:08:00 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1129</guid>
		<description><![CDATA[Kommen Sie im September zu meinem Vortrag Kanban kompakt, der am 13.9. hoch über den Dächern von Köln in Zusammenarbeit mit der Firma itemis stattfindet! Innerhalb von vier Stunden lernen Sie, worum es bei Kanban im Grundsatz geht.
]]></description>
			<content:encoded><![CDATA[<p>Kommen Sie im September zu meinem Vortrag <a href="http://www.itemis.de/itemis-ag/veranstaltungen/2010/language=de/taps=646/29692/kanban-kompakt-mit-matthias-bohlen">Kanban kompakt</a>, der am 13.9. <a href="http://www.toc-koeln.de/">hoch über den Dächern von Köln</a> in Zusammenarbeit mit der Firma itemis stattfindet! Innerhalb von vier Stunden lernen Sie, worum es bei Kanban im Grundsatz geht.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/05/07/kanban-hoch-uber-koln/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Softwarearchitekten &#8211; die machtlosen Anführer</title>
		<link>http://www.mbohlen.de/blog/2010/05/07/softwarearchitekten-die-machtlosen-anfuhrer-2/</link>
		<comments>http://www.mbohlen.de/blog/2010/05/07/softwarearchitekten-die-machtlosen-anfuhrer-2/#comments</comments>
		<pubDate>Fri, 07 May 2010 17:02:31 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1125</guid>
		<description><![CDATA[Die neue Ausgabe der Fachzeitschrift OBJEKTspektrum ist seit kurzem auf dem Markt, diesmal mit dem Schwerpunktthema &#8220;Architektur und Teams&#8221;. Darin finden Sie auch einen Artikel von mir: Emergente Architektur: Der machtlose Architekt. Hier die Zusammenfassung:
Die Softwarearchitektur ist ein wichtiges Artefakt der Softwareentwicklung. Softwarearchitekten müssen kommunikationsstark sein, für die Durchsetzung der Architektur in den Projekten sorgen [...]]]></description>
			<content:encoded><![CDATA[<p>Die neue Ausgabe der Fachzeitschrift <a href="http://www.objektspektrum.de">OBJEKTspektrum</a> ist seit kurzem auf dem Markt, diesmal mit dem Schwerpunktthema &#8220;Architektur und Teams&#8221;. Darin finden Sie auch einen Artikel von mir: <a href="http://www.sigs-datacom.de/fachzeitschriften/objektspektrum/archiv/artikelansicht.html?tx_mwjournals_pi1[pointer]=0&amp;tx_mwjournals_pi1[mode]=1&amp;tx_mwjournals_pi1[showUid]=6588">Emergente Architektur: Der machtlose Architekt</a>. Hier die Zusammenfassung:</p>
<blockquote><p>Die Softwarearchitektur ist ein wichtiges Artefakt der Softwareentwicklung. Softwarearchitekten müssen kommunikationsstark sein, für die Durchsetzung der Architektur in den Projekten sorgen usw. Das ist die öffentliche Meinung. In der Projektrealität sieht es meist anders aus: Architekturdokumente werden mühsam erstellt, doch im Alltag nicht gelesen. Architekten versuchen, durch Predigen die Einhaltung der Architektur zu erreichen. Teams entwickeln, auch ohne auf die Architektur zu achten. Was wäre, wenn man Architektur emergieren lassen würde, quasi als &#8220;Ergebnis des Schwarms&#8221;, anstatt sie mit viel Kraft in Einzelleistung zu erstellen? Die folgende Geschichte ist ein Kondensat meiner Erfahrung aus vielen Projekten. Lesen Sie, warum Architektur letztlich nicht von Einzelnen gemacht werden kann, und erfahren Sie, was nötig ist, damit Emergenz möglich wird.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/05/07/softwarearchitekten-die-machtlosen-anfuhrer-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Builden mit Buildr</title>
		<link>http://www.mbohlen.de/blog/2010/04/14/builden-mit-buildr/</link>
		<comments>http://www.mbohlen.de/blog/2010/04/14/builden-mit-buildr/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 15:04:17 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1115</guid>
		<description><![CDATA[Nachdem ich mich ein paar Jahre lang mit Ant, dann mit Maven herumgeplagt habe, ist mir nun ein Build-Tool begegnet, dessen Marketing-Slogan wirklich stimmt: Buildr &#8211; The build system that doesn&#8217;t suck. Es funktioniert einfach so wie man es erwarten würde. Ein ganzes Java-Projekt übersetzen, Unit-testen und als jar-Datei packen gefällig? Geht einfach so:

define "myproject" do
 [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich mich ein paar Jahre lang mit Ant, dann mit Maven herumgeplagt habe, ist mir nun ein Build-Tool begegnet, dessen Marketing-Slogan wirklich stimmt: <a href="http://buildr.apache.org/">Buildr &#8211; The build system that doesn&#8217;t suck</a>. Es funktioniert einfach so wie man es erwarten würde. Ein ganzes Java-Projekt übersetzen, Unit-testen und als jar-Datei packen gefällig? Geht einfach so:<br />
<code><br />
define "myproject" do<br />
  compile.with project('subproject'), CAMEL, HELPERS, SPRING, XMLLIBS<br />
  compile.using(:target => "1.5")<br />
  resources<br />
  test.compile.with # Add classpath dependencies here<br />
  test.resources<br />
  package(:jar)<br />
end<br />
</code><br />
Noch irgendwelche Fragen? So sollten Build-Tools funktionieren!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/04/14/builden-mit-buildr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Premierminister, werde agil!</title>
		<link>http://www.mbohlen.de/blog/2010/03/03/premierminister-werde-agil/</link>
		<comments>http://www.mbohlen.de/blog/2010/03/03/premierminister-werde-agil/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 22:34:18 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Gefunden]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1075</guid>
		<description><![CDATA[Es gibt eine britische Website, auf der man online eine Petition an den Premierminister schreiben und unterzeichnen kann. Auf dieser Site findet sich eine neue Petition, die der Regierung empfiehlt, die Art und Weise, wie öffentliche Projekte eingekauft und abgewickelt werden, zu überdenken &#8211; in Richtung von inkrementellen und agilen Vorgehensweisen. Der Petitionstext (Übersetzung von [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt eine britische Website, auf der man online eine Petition an den Premierminister schreiben und unterzeichnen kann. Auf dieser Site findet sich <a href="http://petitions.number10.gov.uk/ITProcessReview">eine neue Petition</a>, die der Regierung empfiehlt, die Art und Weise, wie öffentliche Projekte eingekauft und abgewickelt werden, zu überdenken &#8211; in Richtung von inkrementellen und agilen Vorgehensweisen. Der Petitionstext (Übersetzung von mir):</p>
<blockquote><p>Wir, die Unterzeichner, haben keine Lust mehr, zu hören, wie viel von unserem Geld für fehlgeschlagene IT-Projekte der Regierung verpulvert wird.</p>
<p>Wir glauben, dass dies im Wesentlichen an der Art und Weise liegt, mit der diese Projekte ausgeschrieben und geliefert werden &#8211; nämlich, alle Anforderungen eines enormen Projektes im Vorhinein zu verlangen und sich darauf zu verpflichten. Das verurteilt Projekte dazu, fehlzuschlagen noch ehe sie begonnen haben.</p>
<p>Im privaten Sektor hat man sich bereits weitgehend von diesem falschen Modell zu einem inkrementellen Ansatz bewegt, der Änderungen im Verständnis und den Anforderungen erlaubt und die Wahrscheinlichkeit für einen Misserfolg enorm reduziert. Es ist an der Zeit, dass unsere Regierung das auch tut.</p>
<p>Wir bitten den Premierminister, den aktuellen Ansatz auf den Prüfstand zu stellen und für IT-Projekte der Regierung einen mehr inkrementellen und agilen Ansatz in Betracht zu ziehen.</p></blockquote>
<p>Wow, das sollte hier in Deutschland auch gelten! Wo kann man hier eine ebensolche Petition abgeben? Ich wäre sofort dabei!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/03/03/premierminister-werde-agil/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Projektverträge: Schlanke Regelungen ersparen Tauziehen</title>
		<link>http://www.mbohlen.de/blog/2010/02/26/projektvertrage-schlanke-regelungen-ersparen-tauziehen/</link>
		<comments>http://www.mbohlen.de/blog/2010/02/26/projektvertrage-schlanke-regelungen-ersparen-tauziehen/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 07:20:53 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Lesenswert]]></category>
		<category><![CDATA[Produktivität]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1072</guid>
		<description><![CDATA[Heute erscheint die neue Ausgabe der Fachzeitschrift OBJEKTspektrum, diesmal mit dem Schwerpunktthema &#8220;Lean Development und Kanban&#8221;. Darin finden Sie auch einen Artikel von mir über agile Projektverträge. Hier die Zusammenfassung:
Umfragen unter Benutzern von IT-Systemen ergeben: Nur zwanzig Prozent der Funktionen eines IT-Systems werden &#8220;immer&#8221; oder &#8220;oft&#8221; benutzt, fast zwei Drittel hingegen &#8220;selten&#8221; oder &#8220;nie&#8221;. Diese Zahlen haben [...]]]></description>
			<content:encoded><![CDATA[<p>Heute erscheint die neue Ausgabe der Fachzeitschrift <a href="http://www.objektspektrum.de">OBJEKTspektrum</a>, diesmal mit dem Schwerpunktthema &#8220;Lean Development und Kanban&#8221;. Darin finden Sie auch einen Artikel von mir über agile Projektverträge. Hier die Zusammenfassung:</p>
<blockquote><p>Umfragen unter Benutzern von IT-Systemen ergeben: Nur zwanzig Prozent der Funktionen eines IT-Systems werden &#8220;immer&#8221; oder &#8220;oft&#8221; benutzt, fast zwei Drittel hingegen &#8220;selten&#8221; oder &#8220;nie&#8221;. Diese Zahlen haben den Umgang mit Anforderungen in IT-Projekten verändert: Lernen im Projekt ist ausdrücklich erlaubt, Änderungen sind willkommen. Diese Situation stellt neue &#8220;Anforderungen an die Anforderungen&#8221;. Der Artikel zeigt, wie Anforderungen heute aussehen können, damit man mit ihnen sehr schlanke Projektverträge gestalten kann. &#8220;Money for nothing, changes for free&#8221; sind hier die zunächst unglaublich klingenden Stichworte. Auftrag geber und Entwicklungsorganisation ziehen am selben Strang, Änderungsanforderungen kosten ab jetzt kein zusätzliches Geld mehr und brauchen deshalb nicht mehr verhandelt zu werden.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/02/26/projektvertrage-schlanke-regelungen-ersparen-tauziehen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Softwarearchitekten &#8211; die machtlosen Anführer</title>
		<link>http://www.mbohlen.de/blog/2010/01/25/softwarearchitekten-die-machtlosen-anfuhrer/</link>
		<comments>http://www.mbohlen.de/blog/2010/01/25/softwarearchitekten-die-machtlosen-anfuhrer/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 17:12:21 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Produktivität]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1066</guid>
		<description><![CDATA[&#8220;Softwarearchitekten müssen kommunikationsstark und durchsetzungsfähig sein&#8221; &#8211; ist das wahr? Lässt sich Architektur &#8220;durchsetzen&#8221;? Nein, gute SW-Architekten wirken durch Machtlosigkeit! Mein Vortrag auf der Jax 2010 zeigt, wie Architekten und Entwicklungsteams so zusammenarbeiten, dass sich SW-Architektur durch Selbstorganisation geordnet entwickelt und entfaltet. Das spart Energie und macht Teams produktiv!
]]></description>
			<content:encoded><![CDATA[<p>&#8220;Softwarearchitekten müssen kommunikationsstark und durchsetzungsfähig sein&#8221; &#8211; ist das wahr? Lässt sich Architektur &#8220;durchsetzen&#8221;? Nein, gute SW-Architekten wirken durch Machtlosigkeit! Mein Vortrag auf der Jax 2010 zeigt, wie Architekten und Entwicklungsteams so zusammenarbeiten, dass sich SW-Architektur durch Selbstorganisation geordnet entwickelt und entfaltet. Das spart Energie und macht Teams produktiv!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/01/25/softwarearchitekten-die-machtlosen-anfuhrer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Im Flow arbeiten! Der Kunde wird es danken!</title>
		<link>http://www.mbohlen.de/blog/2010/01/23/im-flow-arbeiten-der-kunde-wird-es-danken/</link>
		<comments>http://www.mbohlen.de/blog/2010/01/23/im-flow-arbeiten-der-kunde-wird-es-danken/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 09:00:54 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Produktivität]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1022</guid>
		<description><![CDATA[Das folgende kleine Flash-Video habe ich erstellt, um Ihnen zu zeigen, wie es sich auswirkt, wenn Ihr Team traditionell im Stapel arbeitet (z.B. 5 Sachen spezifiziert, dann 5 Sachen entwickelt) oder wenn es im Flow arbeitet und nur 1 Sache spezifiziert, dann 1 Sache entwickelt, usw.
Der rund eine Minute lange Film zeigt anschaulich, wodurch der [...]]]></description>
			<content:encoded><![CDATA[<p>Das folgende kleine Flash-Video habe ich erstellt, um Ihnen zu zeigen, wie es sich auswirkt, wenn Ihr Team traditionell im Stapel arbeitet (z.B. 5 Sachen spezifiziert, dann 5 Sachen entwickelt) oder wenn es im Flow arbeitet und nur 1 Sache spezifiziert, dann 1 Sache entwickelt, usw.</p>
<p>Der rund eine Minute lange Film zeigt anschaulich, wodurch der Unterschied für den Kunden zu Stande kommt. Mehr über Flow gibt es <a href="/blog/kanban/flow/">hier</a>.</p>
<div style="text-align: left;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="399" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="file=http://www.mbohlen.de/blog/wp-content/uploads/2010/01/BatchVersusFlow.mp4&amp;autostart=false" /><param name="src" value="/mediaplayer/player.swf" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="500" height="399" src="/mediaplayer/player.swf" allowfullscreen="true" flashvars="file=http://www.mbohlen.de/blog/wp-content/uploads/2010/01/BatchVersusFlow.mp4&amp;autostart=false"></embed></object></div>
<div style="text-align: left;"></div>
<div style="text-align: left;"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/01/23/im-flow-arbeiten-der-kunde-wird-es-danken/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Aus welcher Mischung entsteht Software? [OOP 2010]</title>
		<link>http://www.mbohlen.de/blog/2010/01/17/aus-welcher-mischung-entsteht-software-oop-2010/</link>
		<comments>http://www.mbohlen.de/blog/2010/01/17/aus-welcher-mischung-entsteht-software-oop-2010/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 10:19:32 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=920</guid>
		<description><![CDATA[In Italien ist jeder ein Experte für Espresso &#8211; alle wissen: &#8220;Per un buon caffè, ci vogliono cinque &#8216;M&#8217;: miscela, macinatura, macchina, mano e mente.&#8221; (Für einen guten Espresso braucht man die fünf &#8216;M&#8217;: Mischung, Mahlung, Maschine, Hand und Geist).
Ist das in der Software-Entwicklung genauso? Die OOP hat sich ja in diesem Jahr auch so [...]]]></description>
			<content:encoded><![CDATA[<p style="clear: both;">In Italien ist jeder ein Experte für Espresso &#8211; alle wissen: &#8220;<strong>Per un buon caffè, ci vogliono cinque &#8216;M&#8217;: miscela, macinatura, macchina, mano e mente.</strong>&#8221; (Für einen guten Espresso braucht man die fünf &#8216;M&#8217;: Mischung, Mahlung, Maschine, Hand und Geist).</p>
<p style="clear: both;">Ist das in der Software-Entwicklung genauso? Die OOP hat sich ja in diesem Jahr auch so ein Motto auf die Fahne geschrieben: people, process, technology. Prüfen wir doch mal: people = mano e mente, process = macinatura, technology = macchina &#8211; nanu, wo bleibt <em>miscela</em>, die Mischung, der Rohstoff, aus dem die Software entstehen kann?</p>
<p style="clear: both;"><img class="alignleft" style="text-align: center; display: block; margin-top: 0px; margin-bottom: 10px; margin-left: 0px; margin-right: 5px;" src="http://www.mbohlen.de/blog/wp-content/uploads/2010/01/miscela1-thumb.jpg" alt="" width="210" height="175" /><img class="alignleft" style="display: inline; margin-top: 0px; margin-bottom: 10px; margin-left: 0px; margin-right: 5px;" src="http://www.mbohlen.de/blog/wp-content/uploads/2010/01/macchina1-thumb.jpg" alt="" width="210" height="175" align="left" /><img class="alignleft" style="display: inline; margin-top: 0px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px;" src="http://www.mbohlen.de/blog/wp-content/uploads/2010/01/mano1-thumb.jpg" alt="" width="210" height="175" align="left" /></p>
<p style="clear: both;">Alistair Cockburn hat diese Frage 2006 in <a title="What engineering has in common with manufacturing" href="http://alistair.cockburn.us/What+engineering+has+in+common+with+manufacturing+and+why+it+matters" target="_blank">einem Artikel</a> beantwortet: &#8220;Software engineering &#8230; is remarkably like manufacturing, once we shift to view the <em>unvalidated decision</em> as the unit of internal inventory.&#8221; Die Mischung besteht also aus den bisher unvalidierten Entscheidungen, die in der Mühle und der Maschine immer weiter verarbeitet werden, bis der Benutzer seine neue Software in Händen hält.</p>
<p>Beispiele für solche unvalidierten Entscheidungen sind:</p>
<ul>
<li>Jede <strong>Anforderung</strong> ist eine Entscheidung, die auf einem bestimmten Geschäftsklima basiert. Wenn sich das Klima ändert, könnte die Entscheidung falsch werden.</li>
<li>Eine <strong>Architektur</strong> ist eine Entscheidung, die auf Technologie und Business basiert. Wenn sich die Technologie verändert bevor die Software genügend Wert für das Business eingespielt hat, ist die Entscheidung verschwendet.</li>
<li>Jede Zeile <strong>Code</strong> ist eine Entscheidung, basierend auf Anforderungen, Technologie und Ästhetik. Sollte eines davon obsolet werden bevor die Software genügend Geld für die Firma verdient hat, dann war auch das Verschwendung.</li>
</ul>
<p>Halten wir also am besten die Zyklen <a href="schulungen/kanban-training/">kurz und schlank</a> und erzeugen nur so wenig unvalidierte Entscheidungen wie möglich. Über Anforderungen rasch entscheiden, Entwurf und Programmierung zeitnah durchführen, dem Benutzer lauffähige Systeme in die Hand geben, die er sofort validieren kann. So bleibt der Kaffee frisch, weil die Bohnen nicht lange liegen.</p>
<p>Ich lade Sie ein, mit mir auf der OOP einen Kaffee zu trinken!</p>
<p><br class="final-break" style="clear: both;" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/01/17/aus-welcher-mischung-entsteht-software-oop-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Features priorisieren in der Gruppe [OOP 2010]</title>
		<link>http://www.mbohlen.de/blog/2010/01/15/features-priorisieren-in-der-gruppe-oop-2010/</link>
		<comments>http://www.mbohlen.de/blog/2010/01/15/features-priorisieren-in-der-gruppe-oop-2010/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 13:54:15 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Produktivität]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=852</guid>
		<description><![CDATA[Mein aktueller Kunde hat ein Stakeholder-Gremium, das sich regelmäßig trifft, um neue Anforderungen zu priorisieren, die das Entwicklungsteam baldmöglichst umsetzen soll. Es besteht aus Vertretern der relevanten Geschäftsbereiche, die jeweils mit einem Teil der Anforderungen im selben lauffähigen System zu unterschiedlichen Zeitpunkten &#8220;live&#8221; gehen wollen. Die Stakeholder müssen sich also (trotz unterschiedlicher Interessen) auf einheitliche [...]]]></description>
			<content:encoded><![CDATA[<p style="clear: both;">Mein aktueller Kunde hat ein Stakeholder-Gremium, das sich regelmäßig trifft, um neue Anforderungen zu priorisieren, die das Entwicklungsteam baldmöglichst umsetzen soll. Es besteht aus Vertretern der relevanten Geschäftsbereiche, die jeweils mit einem Teil der Anforderungen im selben lauffähigen System zu unterschiedlichen Zeitpunkten &#8220;live&#8221; gehen wollen. Die Stakeholder müssen sich also (trotz unterschiedlicher Interessen) auf einheitliche Priorität einigen, die der Product Owner dann dem Entwicklungsteam gegenüber vertritt.</p>
<h3>Ausgangssituation: Priorität gemeinsam festlegen</h3>
<p>Sich zu einigen ist nicht ganz einfach. Man muss dabei folgende Fragen gleichzeitig beantworten:</p>
<ul style="clear: both;">
<li>Wie viel geschäftlichen Vorteil bringt mir ein bestimmtes Feature?</li>
<li>Bin ich bereit, den geschätzten Entwicklungsaufwand zu genehmigen?</li>
<li>Was meinen die anderen Stakeholder dazu?</li>
<li>Kriegen wir einen Konsens hin, so dass wir besser zwei ganze anstelle von vier halben Features beauftragen können?</li>
</ul>
<p style="clear: both;">Gestern war ich beim ersten Treffen dieses Gremiums, eingeladen als Coach für agile Methoden und Produktivität. Um möglichst einfach auf einen Konsens über die Prioritäten zu kommen, spielten wir das Innovationsspiel <a title="Innovation Games" href="http://innovationgames.com/the-games/Buy+a+Feature" target="_blank">Buy a feature</a>. (Danke an <a title="Michaels Website" href="http://www.michaelmahlberg.de/" target="_blank">Michael Mahlberg</a>, der die Idee hatte, dieses Spiel zu nehmen!)</p>
<p style="clear: both;">Der Product Owner stellte die Stories (Features) aus dem Product Backlog mit Hilfe von User Story Karten vor. Die Entwickler hatten den Aufwand für diese Stories vorher in Story Points abgeschätzt, der Product Owner hatte den Aufwand auf den Karten vermerkt.</p>
<h3>Spielregeln</h3>
<p>Die Spielregeln für &#8220;Buy a feature&#8221; sind sehr einfach und wirkungsvoll:</p>
<ul style="clear: both;">
<li>Jeder Stakeholder bekommt eine bestimmte Anzahl Münzen.</li>
<li>Jedes Feature hat einen &#8220;Preis&#8221;, der durch den Entwicklungsaufwand bestimmt wird.</li>
<li>Stakeholder &#8220;kaufen&#8221; nun die Features, die sie für wichtig halten, indem sie die Münzen auf die Story-Karten legen. Da sie nicht alles kaufen können, müssen sie priorisieren.</li>
<li>Wenn eine Karte so viele Münzen bekommen hat wie ihr Preis angibt, gilt sie als gekauft und kommt ans obere Ende des Product Backlogs.</li>
</ul>
<p style="clear: both;"><img class="alignleft" style="display: inline; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px;" src="http://www.mbohlen.de/blog/wp-content/uploads/2010/01/flohspiel3-thumb1.jpg" alt="" width="146" height="121" align="left" />Als Münzen eignen sich <strong>farbige Plättchen</strong>, wie sie im <a title="Wikipedia" href="http://de.wikipedia.org/wiki/Flohspiel" target="_blank">Flohspiel</a> verwendet werden. Die gibt es im Spielzeuggeschäft auch einzeln zu kaufen, ca. 5 Cent pro Stück. Eine separate Farbe pro Geschäftsbereich ist günstig, dann können Spieler ihre Münzen auch wiederfinden und auf andere Features legen, um z.B. einen Konsens zu bekommen.</p>
<p style="clear: both;">Die Randbedingungen hatte ich wie folgt gesetzt:</p>
<ul style="clear: both;">
<li>Ich gab nur so viele Münzen aus wie Story-Points in den ersten Sprint passen, orientiert an der Velocity des Teams.</li>
<li>Der Product Owner stellte ungefähr doppelt so viele Features vor wie in den Sprint passen, damit die Stakeholder genügend Auswahl hatten.</li>
<li>Die Stakeholder aus einem Geschäftsbereich bekamen mehr Münzen als die anderen, weil der erste &#8220;Launch&#8221; des neuen Systems im Wesentlichen die Belange dieses Geschäftsbereiches abdecken wird.</li>
</ul>
<h3>Der Ablauf des Spiels</h3>
<p style="clear: both;">Der Product Owner stellte die Features vor, jeweils als kurze Zusammenfassung der darin enthaltenen Funktionalität. Die Stakeholder stellten Fragen nach dem Inhalt, den Abhängigkeiten und der Abgrenzung der Features.</p>
<p style="clear: both;">Danach bildeten die Geschäftsbereiche kleine Gruppen und diskutierten, welche Features für ihren Bereich Priorität bekommen sollten. Es bildete sich schnell eine diskutierende Traube von Leuten um die Karten, die auf dem Tisch lagen.</p>
<p style="clear: both;">Nach ca. 10-15 Minuten begann der Sprecher des einen Geschäftsbereichs, seine Münzen auf die Features zu platzieren und argumentierte, warum er sich so entschieden hatte. Die anderen schlossen sich an und platzierten ebenfalls ihre Münzen. Da der Preis für manche Features zu hoch war, um durch einen einzelnen Bereich bezahlt zu werden, bildeten sich Allianzen um die Features, die als teuer und trotzdem wichtig erachtet wurden.</p>
<p style="clear: both;">Eines der Features war besonders teuer, es handelte sich um die Entwicklung eines Grundkonzeptes, das für fast alle weiteren Sprints wichtig sein würde. Der Product Owner warb dafür, es trotz des hohen Preises zu kaufen. Einige Stakeholder argumentierten dagegen, mit der Begründung, je länger sie die lauffähigen Features testen könnten, die im ersten Sprint entstehen, umso besser. Ein Geschäftsbereich, dessen Launch-Datum noch weit in der Zukunft lag, sagte dann: &#8220;Für uns wäre dieses Feature extrem wichtig, doch ob das Konzept nun jetzt oder erst im nächsten Sprint kommt, ist uns egal. Wir stellen unser Geld deshalb den anderen zur Verfügung.&#8221; Wer hätte das für möglich gehalten?</p>
<p style="clear: both;"><a class="image-link" href="http://www.mbohlen.de/blog/wp-content/uploads/2010/01/stories_mit_geld1-full.jpg"><img class="linked-to-original" style="display: inline; margin-top: 0px; margin-right: 30px; margin-bottom: 10px; margin-left: 0px;" src="http://www.mbohlen.de/blog/wp-content/uploads/2010/01/stories_mit_geld1-thumb2.jpg" alt="" width="222" height="566" align="left" /></a>Zum Schluss blieben einige nur teilweise finanzierte Features übrig. Die Gruppe verteilte deren Münzen so, dass ganze Features gekauft werden konnten. Alle Münzen waren ausgegeben, zehn Features für den ersten Sprint standen damit fest.</p>
<p>Ich fragte noch nach der Priorität dieser Features untereinander, da das Spiel ja nur eine reine Ja/Nein-Aussage liefert. Diese Reihenfolge ergab sich sehr schnell aus den Feature-Abhängigkeiten und aus der Frage: &#8220;Wenn die Entwickler in Stress kommen sollten, welches Feature darf dann am ehesten aus dem Sprint fallen?&#8221;. Wir sortierten die Karten nach dieser Reihenfolge, das Ergebnis sah aus wie auf dem <strong>Foto links</strong>.</p>
<h3>Feedback vor und nach dem Spiel</h3>
<p>Für die Gruppe der Stakeholder war es neu, Entscheidungen in wichtigen Dingen mittels spielerischer Verfahren zu finden. Zwei meldeten vor Beginn des Spiels Bedenken an: &#8220;Sonst haben wir solche Entscheidungen immer durch Diskussion gefunden. Ich glaube nicht, dass wir so ein Spiel brauchen.&#8221; Der Product Owner schlug vor, es erst einmal zu versuchen und falls es sich nicht bewährt, es wieder bleiben zu lassen. Ich erklärte, dass Diskussionen explizit erwünscht seien und niemand sofort kaufen müsse.</p>
<p>Nach dem Spiel fragte ich die Beteiligten nach ihrem Feedback. Es war einhellig positiv:</p>
<ul>
<li>&#8220;Die Visualisierung der Entscheidungen ist sehr gut.&#8221;</li>
<li>&#8220;Man kommt sehr schnell zu einer Einigung.&#8221;</li>
<li>&#8220;Es lockert diese Meetings auf und macht Spaß.&#8221;</li>
</ul>
<p>Tja, da bleibt mir nur ein &#8220;Danke&#8221; an die <a title="Luke Hohmann" href="http://innovationgames.com/about/The+Book" target="_blank">Erfinder dieses Spiels</a>. Ich kann es wirklich empfehlen!</p>
<p><br class="final-break" style="clear: both;" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/01/15/features-priorisieren-in-der-gruppe-oop-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wann sollte man nicht agil arbeiten? [OOP 2010]</title>
		<link>http://www.mbohlen.de/blog/2010/01/09/wann-sollte-man-nicht-agil-arbeiten-oop-2010/</link>
		<comments>http://www.mbohlen.de/blog/2010/01/09/wann-sollte-man-nicht-agil-arbeiten-oop-2010/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 15:09:21 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=842</guid>
		<description><![CDATA[Gestern war ich in einem Gebäude mit Erdgeschoss und 8 anderen Stockwerken. Der Aufzug brachte mich in den 7. Stock, dann konnte ich mir aussuchen, auf einer Treppe oder mit einem anderen(!) Aufzug in den 8. Stock zu kommen, wo ich den Besprechungsraum, mein eigentliches Ziel, finden würde.
Einer der Teilnehmer am Workshop in diesem Raum [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern war ich in einem Gebäude mit Erdgeschoss und 8 anderen Stockwerken. Der Aufzug brachte mich in den 7. Stock, dann konnte ich mir aussuchen, auf einer Treppe oder mit einem anderen(!) Aufzug in den 8. Stock zu kommen, wo ich den Besprechungsraum, mein eigentliches Ziel, finden würde.</p>
<p>Einer der Teilnehmer am Workshop in diesem Raum sagte: &#8220;Vielleicht ist das Gebäude agil entwickelt worden, die Anforderung für den 8. Stock kam erst später. Oder vielleicht wurden die Tests eingespart?&#8221;</p>
<p>Allgemeines Gelächter in der Gruppe.</p>
<p>Das bringt mich auf die Frage: Wann ist es eigentlich sinnvoll, agil zu entwickeln und bei unvollständigen Informationen trotzdem weiterzumachen? Eigentlich ganz einfach: <strong>Agil zu entwickeln ist angebracht, wenn die Kosten für nachträgliche Änderungen geringer sind als die Verschwendung (waste, muda), die durch das Streben nach initialer Perfektion der Anforderungen ausgelöst werden würde.</strong></p>
<p>Wann gilt diese Bedingung? Wahrscheinlich für fast alle &#8220;normalen&#8221; Softwareprojekte &#8211; für nur ganz wenige gilt sie nicht. In diesen Fällen sollte man dann besser nicht agil entwickeln.</p>
<p>Was meinen Sie &#8211; wann sollte man besser zuerst perfekt planen, dann umsetzen?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/01/09/wann-sollte-man-nicht-agil-arbeiten-oop-2010/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Prozess-Schutzmechanismen und Skipisten</title>
		<link>http://www.mbohlen.de/blog/2010/01/09/prozess-schutzmechanismen-und-skipisten/</link>
		<comments>http://www.mbohlen.de/blog/2010/01/09/prozess-schutzmechanismen-und-skipisten/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 10:51:20 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Produktivität]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=840</guid>
		<description><![CDATA[Karl Scotland hat einen sehr interessanten Blog-Post über Sicherheitsmechanismen in Prozessen geschrieben. Seine wesentliche These: Prozesse hängen stark vom Können der Ausführenden ab &#8211; so wie es unterschiedlich schwierige Skipisten (schwarze, blaue, &#8230;) gibt, so gibt es unterschiedlich stark geschützte Prozesse. Je stärker die im Prozess eingebauen Schutzmechanismen, desto geringer sind unter Umständen Produktivität und [...]]]></description>
			<content:encoded><![CDATA[<p>Karl Scotland hat einen <a href="http://availagility.co.uk/2010/01/08/process-safeguards-and-ski-slopes/">sehr interessanten Blog-Post </a>über Sicherheitsmechanismen in Prozessen geschrieben. Seine wesentliche These: Prozesse hängen stark vom Können der Ausführenden ab &#8211; so wie es unterschiedlich schwierige Skipisten (schwarze, blaue, &#8230;) gibt, so gibt es unterschiedlich stark geschützte Prozesse. Je stärker die im Prozess eingebauen Schutzmechanismen, desto geringer sind unter Umständen Produktivität und die Reaktionsbereitschaft (Agilität). Mehr Risiko ermöglicht höhere Belohnung, bei entsprechendem Können der Skifahrer.</p>
<p>Lesenswert!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/01/09/prozess-schutzmechanismen-und-skipisten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Führung, Motivation, Produktivität [OOP 2010]</title>
		<link>http://www.mbohlen.de/blog/2010/01/02/fuhrung-motivation-produktivitat-oop-2010/</link>
		<comments>http://www.mbohlen.de/blog/2010/01/02/fuhrung-motivation-produktivitat-oop-2010/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 15:14:39 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Produktivität]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=834</guid>
		<description><![CDATA[Thesen zum Einstieg
These 1: Menschen leisten am meisten, wenn sie motiviert sind. Zumindest, wenn das Rennen über eine längere Strecke gehen wird. Kurze Strecken hoher Leistung sind auch rein aus Anstrengung machbar, bei längeren Strecken kommt die Energie am besten aus der Begeisterung. Softwareentwicklung gehört zu den längeren Rennen.
These 2: Softwareentwicklung ist ein Spezialfall von [...]]]></description>
			<content:encoded><![CDATA[<h3>Thesen zum Einstieg</h3>
<p>These 1: <strong>Menschen leisten am meisten, wenn sie motiviert sind.</strong> Zumindest, wenn das Rennen über eine längere Strecke gehen wird. Kurze Strecken hoher Leistung sind auch rein aus Anstrengung machbar, bei längeren Strecken kommt die Energie am besten aus der Begeisterung. Softwareentwicklung gehört zu den längeren Rennen.</p>
<p>These 2: <strong>Softwareentwicklung ist ein Spezialfall von Arbeit mit Wissen</strong>, und zwar mit einem Wissen, das nicht von Anfang an komplett vorhanden ist, sondern eines, das wie ein stetiger Strom während der gesamten Projektlaufzeit ins Team fließt.</p>
<p>These 3: <strong>Wissensarbeit ist wie ein kooperatives Spiel</strong> &#8211; es gibt dabei keinen, der vernünftigerweise allein bestimmen könnte, was als Nächstes der beste Spielzug ist. Das gilt insbesondere sogar für den Projektleiter &#8211; er muss die Entscheidung über den besten nächsten Zug seinen Mitarbeitern überlassen.</p>
<h3>Formen der Führung</h3>
<p>Je nach der Komplexität der Arbeit, die die Teams leisten, muss der Führungsstil angepasst werden, damit die Sache ein Erfolg wird. Sehr einfache Arbeit kann man mittels <strong>Kommando und Kontrolle</strong> managen. Für etwas komplexere Aufgaben sind <strong>Zielvorgaben und Belohnung</strong> bei Zielerreichung das Richtige. Noch komplexere managt man durch <strong>charismatische Führung</strong>. Für höchst komplexe Tätigkeiten wie die Softwareentwicklung erreicht man die besten Ergebnisse, wenn man <strong>Selbstorganisation</strong> zum Prinzip macht. Niemand anderes als das Team weiß am besten, was in der aktuellen Situation zu tun ist. Als Manager nutzt man dieses Wissen und stellt dem Team lediglich eine Dienstleistung namens Führung zur Verfügung.</p>
<p>Robert K. Greenleaf hat vor einigen Jahrzehnten schon Essays dazu verfasst, das gemeinsame Thema hieß <em>Servant Leadership</em>, im Prinzip &#8220;Führung als Dienstleistung&#8221;. James A. Autry hat Greenleafs Erkenntnisse weiter konkretisiert, in seinem Buch von 2001: <em>The Servant Leader: How to Build a Creative Team, Develop Great Morale, and Improve Bottom-Line Performance</em>. Darin finden sich einige interessante Kernaussagen:</p>
<ol>
<li>Bei Führung geht es nicht um das Steuern von Leuten; es geht darum, für Leute zu sorgen und eine nützliche Ressource für die Leute zu sein.</li>
<li>Führung bedeutet nicht, der Boss zu sein; es geht darum, für Leute präsent zu sein und eine Gemeinschaft am Arbeitsplatz aufzubauen.</li>
<li>Bei Führung geht es nicht um die Verteidigung von Territorium; es geht darum, Ihr Ego loszulassen, Ihren Geist mit zur Arbeit zu bringen und Ihr bestes und möglichst authentisches Selbst zu sein.</li>
<li>Führung befasst sich nicht so sehr damit, Anfeuerungsreden zu halten, sondern damit, wie man einen Platz schafft, an dem Leute gute Arbeit machen können, darin einen Sinn finden und ihren Geist zur Arbeit mitbringen.</li>
<li>Führung ist, wie das Leben, größtenteils eine Frage der Aufmerksamkeit.</li>
<li>Führung erfordert Liebe.</li>
</ol>
<h3>Motivation und Produktivität</h3>
<p>Wenn ich die obigen Kernaussagen von Autry lese, denke ich &#8220;Wow, so möchte ich als Teammitglied geführt werden!&#8221; Ein Manager ist in der Lage, eine Umgebung für Motivation und gute Arbeit zu schaffen, wenn er diese Sätze tief verinnerlicht und danach handelt. Nebenbei: Dann wird ihm sein Job auch richtig Spaß machen, weil er mit dem, was sein Team braucht, in Resonanz kommt.</p>
<p>Produktivität stellt sich dann durch Selbstorganisation des Teams ein, bei der der Manager lediglich Unterstützung leistet. Soziale Systeme entwickeln Verhalten, sie organisieren sich selbt aufgrund von Regeln, Feedback und Diskurs. Es beginnt mit einfachen Regeln, z.B. &#8220;Wir wollen nur Code einchecken, der den Build übersteht und fehlerfrei durch alle Unit-Tests geht.&#8221; Wenn jemand eine solche, gemeinsam anerkannte Regel verletzt, indem er schlechten Code eincheckt, bekommt er von den Teamkollegen (und vom CI-Server) Feedback. Er wird sich vermutlich wundern, mit seinen Kollegen ins Gespräch kommen. Zuletzt wird er die Ursache herausfinden und beheben, indem er vor dem Einchecken zunächst seine Arbeitsumgebung aktualisiert, alle Unit-Tests laufenlässt und Fehler lokal behebt, bevor er nochmals eincheckt. Das ist eine Verhaltensveränderung, Selbstorganisation durch Feedback und Diskurs. Die Produktivität des Teams wird ansteigen, weil wieder einer weniger &#8220;im Weg steht&#8221;.</p>
<h3>Der Manager als Mentor</h3>
<p>Als Manager oder Coach kann ich diesen Prozess der Selbstorganisation fördern, indem ich genug Quellen für Feedback schaffe, Menschen ermutige, Feedback zu geben und in den Diskurs zu gehen. Ich kann das Team fragen, welche anerkannten Regeln für das gemeinsame Handeln gelten müssen und die Verabschiedung dieser Regeln fördern. Ich kann Regeln auch hinterfragen (lassen), wenn mehrfach gegen sie verstoßen wird oder wenn das Team so reif wird, dass sie weniger Regeln brauchen.</p>
<p>Das alles ist, wie das Leben, größtenteils eine Frage der Aufmerksamkeit. <img src='http://www.mbohlen.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/01/02/fuhrung-motivation-produktivitat-oop-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Schlanke Zeiten [OOP 2010]</title>
		<link>http://www.mbohlen.de/blog/2009/12/29/schlanke-zeiten-oop-2010/</link>
		<comments>http://www.mbohlen.de/blog/2009/12/29/schlanke-zeiten-oop-2010/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 13:54:59 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=748</guid>
		<description><![CDATA[Ein paar Gedanken zum Zeitbegriff in agilen Verfahren.
In allen agilen Methoden versucht das Entwicklungsteam, dem Kunden ein gewünschtes Feature möglichst schnell zur Verfügung zu stellen. Das ist ein wichtiger Bestandteil des Entwicklungsprozesses: zeitnahe Lieferung löst zeitnahes Feedback aus und hilft, das Projekt auf der Spur zu halten.
Die agilen Methoden können dabei von den jahrzehntelangen Erfahrungen [...]]]></description>
			<content:encoded><![CDATA[<p><em>Ein paar Gedanken zum Zeitbegriff in agilen Verfahren.</em></p>
<p>In allen agilen Methoden versucht das Entwicklungsteam, dem Kunden ein gewünschtes Feature möglichst schnell zur Verfügung zu stellen. Das ist ein wichtiger Bestandteil des Entwicklungsprozesses: zeitnahe Lieferung löst zeitnahes Feedback aus und hilft, das Projekt auf der Spur zu halten.</p>
<p>Die agilen Methoden können dabei von den jahrzehntelangen Erfahrungen aus der Lean Production profitieren. Kanban tut das explizit, XP und Scrum tun das implizit. Die Frage ist nur : Was heißt eigentlich &#8220;schnell&#8221; oder &#8220;zeitnah&#8221;? Über welche Zeit reden wir da eigentlich?</p>
<h3>Lead time</h3>
<p>Die für den Kunden interessante Zeit ist eigentlich diese: &#8220;Wenn ich heute ein Feature in die Entwicklung gebe, wann kann ich es in der lauffähigen Software erkennen und testen?&#8221;. Diese Zeit nennt man in der Lean-Welt <strong>lead time</strong>. Ihre Einheit ist tatsächliche, abgelaufene Zeit (elapsed time). Sie enthält sowohl die Zeit für den Fertigungs-Workflow (also Analyse, Design, Unit-Test, Implementierung, Integration, etc.) als auch eventuelle Wartezeiten vor der Fertigung, weil das Team gerade noch andere Features zu entwickeln hatte.</p>
<h3>Cycle time</h3>
<p>Eine andere Zeit, die weniger für den Kunden und mehr für die Entwickler und deren Manager interessant ist, nennt man in der Lean-Welt <strong>cycle time</strong>. Ihre Einheit ist nicht tatsächlich abgelaufene Zeit (elapsed time), sondern der Rhythmus (engl. <em>cadence</em>), wie oft der Entwicklungsprozess ein Feature fertigstellt. Um den Unterschied zu verstehen, ein <strong>Beispiel</strong>: Ein GUI-Designer wird beauftragt, eine größere Anzahl bereits fertig entwickelter HTML-Seiten (z.B. 100 Stück) graphisch schön aufzubereiten. Sagen wir, er liefert jede Woche (5 Arbeitstage) 20 Stück, dann beträgt die cycle time pro HTML-Seite 2 Stunden (5 Tage mal 8 Stunden = 40 Stunden, dividiert durch 20 Stück, also 2 Stunden pro Stück).</p>
<h3>Littles Gesetz und Work in Process</h3>
<p>Wie stehen nun diese beiden Zeiten in Beziehung? Das fand <strong>John D.C. Little</strong> schon 1961 heraus. Damals formulierte er es so: In einem stabilen Wartesystem (Beispiel: Supermarkt) ist die durchschnittliche Anzahl von Kunden gleich dem Produkt aus Ankunftsrate und der durchschnittlichen Verweildauer im System.</p>
<p>Was heißt das, übertragen auf <em>lead time</em> und <em>cycle time</em>? Nun, die Ankunftsrate ist der Kehrwert der cycle time, die Verweildauer ist gleich der lead time und die durchschnittliche Kundenanzahl entspricht der Anzahl der Features, an denen das Team im Durchschnitt gleichzeitig arbeitet. In der Lean-Welt nennt man das <strong>work in process</strong>.</p>
<p>Also können wir Littles Gesetz so umstellen: <strong>lead time = work in process * cycle time</strong>.</p>
<p>Wenn der oben erwähnte GUI-Designer zu viele Aufträge hat, weil er für zu viele Kunden gleichzeitig arbeitet, ist seine <em>work in process</em> sehr hoch, z.B. befinden sich 100 HTML-Seiten bei ihm in Arbeit. Wenn ein Kunde nun eine neue Seite zum &#8220;Schönmachen&#8221; beauftragt, bekommt er sie erst nach einer <em>lead time</em> von durchschnittlich 5 Wochen zurück (100 Seiten x 2 Stunden/Seite, geteilt durch 40 Stunden pro Woche). Der Kunde wird unzufrieden sein, und der GUI-Designer sollte sich überlegen, ob er nicht mehr Aufträge ablehnen oder seinen Kollegen weitergeben sollte.</p>
<h3>Handlungempfehlung</h3>
<p>Was lernen wir daraus, wenn wir zu einem Software-Entwicklungsteam gehören oder ein solches managen? Um den Kunden zufrieden zu machen, sollte das Team die <em>lead time</em> optimieren. Das Einfachste ist, die <em>work in process</em> zu reduzieren, also einfach nicht an so vielen Sachen gleichzeitig zu arbeiten. Das Schwierigere ist, die <em>cycle time</em> zu reduzieren, also effizienter zu arbeiten. Dazu braucht es Methode. Wenn Sie Lust haben, zeige ich Ihnen , wie auch das geht. Rufen Sie mich an.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/12/29/schlanke-zeiten-oop-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kanban-Training im Februar 2010</title>
		<link>http://www.mbohlen.de/blog/2009/12/21/kanban-training-im-februar-2010/</link>
		<comments>http://www.mbohlen.de/blog/2009/12/21/kanban-training-im-februar-2010/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 23:12:22 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Aktuelle Aktivitäten]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=648</guid>
		<description><![CDATA[Im Februar gebe ich ein zweitägiges Kanban-Training in deutscher Sprache. Kanban ist ein leichtgewichtiges Prozess-Framework für die Entwicklung von Software. Es überträgt die Kanban-Prinzipien, die ursprünglich im Umfeld von Lean Production entstanden sind, auf die Softwareentwicklung.
Anmeldung und Organisation übernimmt SIGS-DATACOM, auf deren Website Sie weitere Informationen über dieses Training finden können.
Ich freue mich, Sie in [...]]]></description>
			<content:encoded><![CDATA[<p>Im Februar gebe ich ein zweitägiges Kanban-Training in deutscher Sprache. <a href="http://de.wikipedia.org/wiki/Kanban_in_der_IT">Kanban</a> ist ein leichtgewichtiges Prozess-Framework für die Entwicklung von Software. Es überträgt die Kanban-Prinzipien, die <a href="http://de.wikipedia.org/wiki/Kanban">ursprünglich im Umfeld von Lean Production</a> entstanden sind, auf die Softwareentwicklung.</p>
<p>Anmeldung und Organisation übernimmt SIGS-DATACOM, auf deren Website Sie <a href="http://www.sigs-datacom.de/nc/seminare/seminardetails.html?tx_mwworkshops_pi1%5BshowUid%5D=1442&amp;tx_mwworkshops_pi1%5BdateID%5D=394">weitere Informationen</a> über dieses Training finden können.</p>
<p>Ich freue mich, Sie in Köln zu sehen &#8211; das Training wird sehr spannend werden!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/12/21/kanban-training-im-februar-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This blog is now iPhone-ready!</title>
		<link>http://www.mbohlen.de/blog/2009/12/20/this-blog-is-now-iphone-ready/</link>
		<comments>http://www.mbohlen.de/blog/2009/12/20/this-blog-is-now-iphone-ready/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 15:03:15 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=646</guid>
		<description><![CDATA[Today, I upgraded to Wordpress 2.9 and the WPtouch plugin. Now, the users of Apple&#8217;s iPhone and other mobile clients can browse this blog more easily. Have fun!
]]></description>
			<content:encoded><![CDATA[<p>Today, I upgraded to Wordpress 2.9 and the <a href="http://www.bravenewcode.com/wptouch/">WPtouch</a> plugin. Now, the users of Apple&#8217;s iPhone and other mobile clients can browse this blog more easily. Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/12/20/this-blog-is-now-iphone-ready/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welcome back, Uncle Bob!  [OOP 2010]</title>
		<link>http://www.mbohlen.de/blog/2009/11/09/welcome-back-uncle-bob-oop-2010/</link>
		<comments>http://www.mbohlen.de/blog/2009/11/09/welcome-back-uncle-bob-oop-2010/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 20:32:21 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=639</guid>
		<description><![CDATA[At the OOP 2010 conference, Robert C. Martin will give a keynote about polyglot programming, called &#8220;The Polyglot Craftsman&#8221;.
Hey, Uncle Bob is back at OOP,! For me this is very special because it was him who brought me to object oriented design/programming and to my first OOP conference, ever. And this was back in 1992 [...]]]></description>
			<content:encoded><![CDATA[<p>At the <a href="http://www.oopconference.com">OOP 2010</a> conference, <a href="http://en.wikipedia.org/wiki/Robert_Cecil_Martin">Robert C. Martin</a> will give a keynote about polyglot programming, called &#8220;The Polyglot Craftsman&#8221;.</p>
<p>Hey, Uncle Bob is back at OOP,! For me this is very special because it was him who brought me to object oriented design/programming and to my first OOP conference, ever. And this was back in 1992 when I was a enthusiastic software developer, coding in C. Java did not exist in those days, design patterns were not published, there was no TDD &#8211; well, it was just the old days of poorly maintainable code!</p>
<p>Bob, when I came into your workshop about object oriented design at OOP, you started with a very simple example in C++ (at least, I thought it was): a car with an engine. You said something like this:</p>
<p>Bob: &#8220;OK, guys, lets define an accelerate() method on the car &#8211; what would be inside the body of this method?&#8221;. And my head started thinking. Somebody else: &#8220;The car should tell the carburator to increase the fuel to air ratio. And it should also tell the automatic transmission to shift one gear up!&#8221;</p>
<p>Bob: &#8220;OK, so Car::accelerate() calls Carburator::increaseFuelToAirRatio(), followed by Transmission::shiftUp(). Question to all of you: Is this a good design or a bad design?&#8221;</p>
<p>And poor me, inexperienced in OOD, could say neither yes nor no: &#8220;In fact, I don&#8217;t know!&#8221;.</p>
<p>Bob, you suddenly shouted &#8220;Of course, it is a BAD design, very bad design!&#8221;</p>
<p>Me: &#8220;Oh, why this?&#8221;</p>
<p>Bob: &#8220;What if you have a Diesel engine, without carburator? And: What if your car has an electric engine, without transmission?&#8221;</p>
<p>Me: &#8220;Hmmm&#8230; well, I guess, I would have to change the design significantly. Something like Thyristor::increaseElectricCurrent().&#8221;</p>
<p>Bob: &#8220;Exactly! So, how about introducing a neutral abstraction above all this? How about Engine::increasePower()? And with an intelligent Engine class that knows how to increase the power purely by itself? With nobody telling it how to do that?&#8221;</p>
<p>Me: &#8220;Aha!&#8221;</p>
<p>And so 1992 was the year when I became enthusiastic about object oriented design. Thanks a lot, Bob &#8211; I am really looking forward to see you again at this OOP. I guess, you won&#8217;t remember me but this is not a problem. <img src='http://www.mbohlen.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/11/09/welcome-back-uncle-bob-oop-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Grails support for the Semantic Web</title>
		<link>http://www.mbohlen.de/blog/2009/10/04/grails-support-for-the-semantic-web/</link>
		<comments>http://www.mbohlen.de/blog/2009/10/04/grails-support-for-the-semantic-web/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 20:01:36 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=637</guid>
		<description><![CDATA[The Semantic Web is gaining attention these days. No wonder that the Grails web framework will offer support for the resource description format RDF, or RDFa to be more precise. A new plugin can generate this format for you. A quote from the developers:
The RDFa plug-in allows you to expose relevant parts of the structure [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://semanticweb.org">Semantic Web</a> is gaining attention these days. No wonder that the Grails web framework will offer support for the resource description format <a href="http://www.w3.org/RDF/">RDF</a>, or <a href="http://www.w3.org/TR/xhtml-rdfa-primer/">RDFa</a> to be more precise. A new plugin can generate this format for you. A quote from the developers:</p>
<blockquote><p>The RDFa plug-in allows you to expose relevant parts of the structure of your application as <a href="http://www.w3.org/TR/xhtml-rdfa-primer/">RDFa</a> annotations in your views. Both domain model (non-information resources) and controller actions (information resources) can be described.</p></blockquote>
<p>The plugin is still in its early stages, check out its interesting features which are described on <a href="http://grails.org/plugin/rdfa">the plugin page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/10/04/grails-support-for-the-semantic-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrum-Jobs wachsen stark</title>
		<link>http://www.mbohlen.de/blog/2009/09/26/scrum-jobs-wachsen-stark/</link>
		<comments>http://www.mbohlen.de/blog/2009/09/26/scrum-jobs-wachsen-stark/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 10:45:14 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=633</guid>
		<description><![CDATA[Job-Portale verfolgen Job Trends, also den Anstieg der Anfragen in bestimmten Aufgabengebieten, z.B. Projektmanagement mit Scrum, Agile und PMI. In den letzten drei Jahren zeigt sich ein eindeutiger Trend zu Scrum und anderen Agilen Methoden.
Ein Beispiel des Portals Indeed.com:
 




SCRUM and project management, AGILE and project management, PMI and project management Job Trends
SCRUM and project [...]]]></description>
			<content:encoded><![CDATA[<p>Job-Portale verfolgen Job Trends, also den Anstieg der Anfragen in bestimmten Aufgabengebieten, z.B. Projektmanagement mit Scrum, Agile und PMI. In den letzten drei Jahren zeigt sich ein eindeutiger Trend zu Scrum und anderen Agilen Methoden.</p>
<p>Ein Beispiel des Portals Indeed.com:</p>
<div style="width: 540px;"><a title="SCRUM and project management, AGILE and project management, PMI and project management Job Trends" href="http://www.indeed.com/jobtrends?q=SCRUM+and+project+management%2C+AGILE+and+project+management%2C+PMI+and+project+management"> <img src="http://www.indeed.com/trendgraph/jobgraph.png?q=SCRUM+and+project+management%2C+AGILE+and+project+management%2C+PMI+and+project+management" border="0" alt="SCRUM and project management, AGILE and project management, PMI and project management Job Trends graph" width="540" height="300" /><br />
</a></p>
<table style="font-size:80%" border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td><a href="http://www.indeed.com/jobtrends?q=SCRUM+and+project+management%2C+AGILE+and+project+management%2C+PMI+and+project+management">SCRUM and project management, AGILE and project management, PMI and project management Job Trends</a></td>
<td align="right"><a href="http://www.indeed.com/q-SCRUM-and-project-management-jobs.html">SCRUM and project management jobs</a> &#8211; <a href="http://www.indeed.com/q-AGILE-and-project-management-jobs.html">AGILE and project management jobs</a> &#8211; <a href="http://www.indeed.com/q-PMI-and-project-management-jobs.html">PMI and project management jobs</a></td>
</tr>
</tbody>
</table>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/09/26/scrum-jobs-wachsen-stark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taxonomies for Grails domain classes</title>
		<link>http://www.mbohlen.de/blog/2009/09/25/taxonomies-for-grails-domain-classes/</link>
		<comments>http://www.mbohlen.de/blog/2009/09/25/taxonomies-for-grails-domain-classes/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 19:08:32 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=628</guid>
		<description><![CDATA[Did you ever want to put the instances of your domain classes into user-defined categories? Something like tags but more structured and maybe hierarchical?
Good news today: Grails has a plug-in for this purpose &#8211; it is called the taxonomy plug-in. The developers of this plug-in say that it allows you to apply arbitrary hierarchical categorisation (Taxons) [...]]]></description>
			<content:encoded><![CDATA[<p>Did you ever want to put the instances of your domain classes into user-defined categories? Something like tags but more structured and maybe hierarchical?</p>
<p>Good news today: Grails has a plug-in for this purpose &#8211; it is called <a href="http://grails.org/plugin/taxonomy">the taxonomy plug-in</a>. The developers of this plug-in say that it allows you to apply arbitrary hierarchical categorisation (Taxons) to domain objects. Here is an example of the basic usage:</p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">def</span> book <span style="color: #66cc66;">=</span> <span style="color: #aaaadd; font-weight: bold;">Book</span>.<span style="color: #663399;">get</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">// Add the book to the Non-fiction &gt; Autobiography category</span>
book.<span style="color: #006600;">addToTaxonomy</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'Non-fiction'</span>, <span style="color: #ff0000;">'Autobiography'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">def</span> autobiographies <span style="color: #66cc66;">=</span> <span style="color: #aaaadd; font-weight: bold;">Book</span>.<span style="color: #006600;">findAllByTaxonomyFamily</span><span style="color: #66cc66;">&#40;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'Non-fiction'</span>, <span style="color: #ff0000;">'Autobiography'</span><span style="color: #66cc66;">&#93;</span>
<span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>There is support for arbitrary nesting of Taxons (categories) within unlimited taxonomies, and taxonomies are domain class independent.</p>
<p>So the category &#8220;Local&#8221; on Author can also be used on Book.</p>
<p>However, you can have different taxonomy graphs aside from the default one, so you might have a taxonomy graph &#8220;Location&#8221; storing the names of states and cities, and another taxonomy graph &#8220;Company type&#8221; &#8211; and objects having categories in both graphs.</p>
<p>Release 0.1 of the taxonomy plug-in is &#8220;alpha&#8221; grade. It does not support polymorphism. So querying objects by taxonomy requires you to query the specific class type. This will be resolved in the next release. Also, it does not do caching so it isn&#8217;t going to be blazingly fast. Developers say that this will come soon.</p>
<p>Have fun and visit <a href="http://grails.org/plugin/taxonomy">the plug-in page on grails.org</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/09/25/taxonomies-for-grails-domain-classes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Test data for Grails integration tests</title>
		<link>http://www.mbohlen.de/blog/2009/09/22/test-data-for-grails-integration-tests/</link>
		<comments>http://www.mbohlen.de/blog/2009/09/22/test-data-for-grails-integration-tests/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 16:25:42 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=621</guid>
		<description><![CDATA[When you write an integration test for a Grails app, you will likely want to have a clean situation with reproducible test data in your database before the test actually starts. Enter the Fixtures Plugin for Grails.
This plugin helps you to define a fixture, that is a defined set of data used for testing. The [...]]]></description>
			<content:encoded><![CDATA[<p>When you write an integration test for a Grails app, you will likely want to have a clean situation with reproducible test data in your database before the test actually starts. Enter the <a href="http://grails.org/plugin/fixtures">Fixtures Plugin</a> for Grails.</p>
<p>This plugin helps you to define a fixture, that is a defined set of data used for testing. The plugin defines a DSL in which you can express your need for data. Example:</p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;">fixture <span style="color: #66cc66;">&#123;</span>
    guillaume<span style="color: #66cc66;">&#40;</span>Author<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        name <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;Guillaume Laforge&quot;</span>
    <span style="color: #66cc66;">&#125;</span>
    dierk<span style="color: #66cc66;">&#40;</span>Author<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        name <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;Dierk Koenig&quot;</span>
    <span style="color: #66cc66;">&#125;</span>
    gina<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">Book</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        title <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;Groovy In Action&quot;</span>
        authors <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span>guillaume, dierk<span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Or a little shorter:</p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;">fixture <span style="color: #66cc66;">&#123;</span>
    guillaume<span style="color: #66cc66;">&#40;</span>Author, name: <span style="color: #ff0000;">&quot;Guillaume Laforge&quot;</span><span style="color: #66cc66;">&#41;</span>
    dierk<span style="color: #66cc66;">&#40;</span>Author, name: <span style="color: #ff0000;">&quot;Dierk Koenig&quot;</span><span style="color: #66cc66;">&#41;</span>
    gina<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">Book</span>, title: <span style="color: #ff0000;">&quot;Groovy In Action&quot;</span>, authors: <span style="color: #66cc66;">&#91;</span>guillaume, dierk<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Then, in your test case, you will want to load that fixture, like this:</p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> GinaTests <span style="color: #000000; font-weight: bold;">extends</span> GroovyTestCase <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">def</span> fixtureLoader
&nbsp;
    <span style="color: #993333;">void</span> testFinderMethod<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        fixtureLoader.<span style="color: #006600;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;gina&quot;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #000000; font-weight: bold;">def</span> gina <span style="color: #66cc66;">=</span> <span style="color: #aaaadd; font-weight: bold;">Book</span>.<span style="color: #006600;">findByTitle</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Groovy In Action&quot;</span><span style="color: #66cc66;">&#41;</span>
        assertNotNull<span style="color: #66cc66;">&#40;</span>gina<span style="color: #66cc66;">&#41;</span>
        assertEquals<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span>, gina.<span style="color: #006600;">authors</span>.<span style="color: #663399;">size</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Pretty simple, isn&#8217;t it? Find out more about how to install and use the Fixtures plugin on<a href="http://grails.org/plugin/fixtures"> its plugin page at grails.org</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/09/22/test-data-for-grails-integration-tests/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Monsters in Grails?</title>
		<link>http://www.mbohlen.de/blog/2009/09/19/monsters-in-grails/</link>
		<comments>http://www.mbohlen.de/blog/2009/09/19/monsters-in-grails/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 09:19:12 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=614</guid>
		<description><![CDATA[The monsters enter the Grails web framework! Jonas Nordstrand has written a plugin that opens the door to them. This is what he says about it:
A grails implementation of MonsterID: a method to generate a unique monster image based upon a certain identifier (user id, email address, whatever). It can be used to automatically provide [...]]]></description>
			<content:encoded><![CDATA[<p>The monsters enter the Grails web framework! Jonas Nordstrand has written a plugin that opens the door to them. This is what he says about it:</p>
<blockquote><p>A grails implementation of MonsterID: a method to generate a unique monster image based upon a certain identifier (user id, email address, whatever). It can be used to automatically provide personal avatar images in blog comments or other community services.</p></blockquote>
<p>You can find this plugin (as usual) <a href="http://grails.org/plugin/monster">on grails.org</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/09/19/monsters-in-grails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bean Fields for Grails renders form fields easily</title>
		<link>http://www.mbohlen.de/blog/2009/09/18/608/</link>
		<comments>http://www.mbohlen.de/blog/2009/09/18/608/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 13:14:30 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=608</guid>
		<description><![CDATA[Bean Fields, a new plugin for Grails, provides a suite of tags for rendering form fields for domain and command objects. As the developers claim, it takes the pain, boredom and scope for error away.
Out of the box it:

renders a field using a UI element appropriate for the property type. Constraints are used to set [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://grails.org/plugin/bean-fields">Bean Fields</a>, a new plugin for Grails, provides a suite of tags for rendering form fields for domain and command objects. As the developers claim, it takes the pain, boredom and scope for error away.</p>
<p>Out of the box it:</p>
<ul>
<li>renders a field using a UI element appropriate for the property type. Constraints are used to set maximum lengths etc.</li>
<li>automatically renders <label> tags for fields, from i18n message bundles</label></li>
<li>renders &#8220;required&#8221; indicators if the field is nullable:false and/or blank:false</li>
<li>renders errors adjacent to the field that had the error</li>
<li>renders the current value as appropriate</li>
</ul>
<p><label> This is all done by building on top of Grails existing tags, so all the regular tag attributes are supported where possible.<br />
</label></p>
<p>Here&#8217;s an example of how you can render all this for a bunch of bean properties:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean:withBean</span> <span style="color: #000066;">beanName</span>=<span style="color: #ff0000;">&quot;form&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean:field</span> <span style="color: #000066;">property</span>=<span style="color: #ff0000;">&quot;firstName&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean:field</span> <span style="color: #000066;">property</span>=<span style="color: #ff0000;">&quot;lastName&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean:field</span> <span style="color: #000066;">property</span>=<span style="color: #ff0000;">&quot;company&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean:field</span> <span style="color: #000066;">property</span>=<span style="color: #ff0000;">&quot;email&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean:withBean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>You can find more elaborate examples as well as instructions for use on <a href="http://grails.org/plugin/bean-fields">the plugin page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/09/18/608/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paypal plugin 0.5 for Grails released today</title>
		<link>http://www.mbohlen.de/blog/2009/09/13/paypal-plugin-0-5-for-grails-released-today/</link>
		<comments>http://www.mbohlen.de/blog/2009/09/13/paypal-plugin-0-5-for-grails-released-today/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 20:32:53 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=604</guid>
		<description><![CDATA[David Russell notified me about a bug in the Paypal plugin. Thank you, David!
Bug description: When a user makes a payment, Paypal notifies the site with a so-called instant payment notification. The code in PaypalController.notify() was wrong so that an error code 404 was returned to Paypal. Paypal retried the notification several times and finally [...]]]></description>
			<content:encoded><![CDATA[<p>David Russell notified me about a bug in the Paypal plugin. Thank you, David!</p>
<p><strong>Bug description: </strong>When a user makes a payment, Paypal notifies the site with a so-called instant payment notification. The code in PaypalController.notify() was wrong so that an error code 404 was returned to Paypal. Paypal retried the notification several times and finally gave up. The plugin processed the notification properly, though.</p>
<p><strong>I fixed this bug today and released the corrected Paypal plugin as version 0.5.</strong></p>
<p>You can find more info about the plugin on <a href="http://www.grails.org/paypal+plugin">the plugin page at grails.org</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/09/13/paypal-plugin-0-5-for-grails-released-today/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understanding social media</title>
		<link>http://www.mbohlen.de/blog/2009/09/13/understanding-social-media/</link>
		<comments>http://www.mbohlen.de/blog/2009/09/13/understanding-social-media/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 16:45:14 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=602</guid>
		<description><![CDATA[At the moment, there is a lot of buzz around social media like Twitter. Keyword is &#8220;democratizing information&#8221;. Social media users are forming new communities with their own rules and &#8220;social speak&#8221;. There are even web sites like Klout that calculate how much influence you have in social media (when I test my Twitter user [...]]]></description>
			<content:encoded><![CDATA[<p>At the moment, there is a lot of buzz around social media like Twitter. Keyword is &#8220;democratizing information&#8221;. Social media users are forming new communities with their own rules and &#8220;social speak&#8221;. There are even web sites like <a href="http://www.klout.net/">Klout</a> that calculate how much influence you have in social media (when I test my Twitter user account, it says that it has not indexed my tweets, yet).</p>
<p>This is an interesting phenomenon that I am trying to study and understand. Maybe, it is possible to generate something entirely new.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/09/13/understanding-social-media/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scaffolding in Grails: More than a one-night stand?</title>
		<link>http://www.mbohlen.de/blog/2009/09/07/scaffolding-in-grails-more-than-a-one-night-stand/</link>
		<comments>http://www.mbohlen.de/blog/2009/09/07/scaffolding-in-grails-more-than-a-one-night-stand/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 21:43:52 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=593</guid>
		<description><![CDATA[Scaffolding in Grails (from my point of view) is like scaffolding in construction: After the walls have been built, you remove the scaffold.
However, at least one plug-in developer for Grails seems to think differently. See for yourself:
This plugin provides an &#8216;automatic&#8217; component-like rendering infrastructure to Grails. It combines the ease of use of scaffolding with [...]]]></description>
			<content:encoded><![CDATA[<p>Scaffolding in Grails (from my point of view) is like scaffolding in construction: After the walls have been built, you remove the scaffold.</p>
<p>However, at least one plug-in developer for Grails seems to think differently. See for yourself:</p>
<blockquote><p>This plugin provides an &#8216;automatic&#8217; component-like rendering infrastructure to Grails. It combines the ease of use of scaffolding with the flexibility to change the resulting views via custom renderers. This also allows you to change what tags you use to render an object without having to worry about consistency across views. Write it once, and be done with it!</p></blockquote>
<p>What do you think &#8211; is <a href="http://grails.org/plugin/scaffold-tags">this plug-in</a> worth a try?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/09/07/scaffolding-in-grails-more-than-a-one-night-stand/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Camel plug-in for Grails</title>
		<link>http://www.mbohlen.de/blog/2009/09/07/apache-camel-plug-in-for-grails/</link>
		<comments>http://www.mbohlen.de/blog/2009/09/07/apache-camel-plug-in-for-grails/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 21:36:34 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=590</guid>
		<description><![CDATA[The Apache Camel Grails plug-in allows you to send and route messages to a wide variety of destination endpoints directly from your controllers and services. It also provides a new Grails artifact, Routes, to configure your routes using known Enterprise Integration Patterns via the Apache Camel Java DSL.
It is quite easy to route messages. For example, write [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://camel.apache.org/">Apache Camel</a> Grails plug-in allows you to send and route messages to a wide variety of destination endpoints directly from your controllers and services. It also provides a new Grails artifact, Routes, to configure your routes using known Enterprise Integration Patterns via the <a href="http://camel.apache.org/dsl.html">Apache Camel Java DSL</a>.</p>
<p>It is quite easy to route messages. For example, write a Grails service like this:</p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> MyService <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">def</span> myMethod<span style="color: #66cc66;">&#40;</span>fooBarText<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        log.<span style="color: #006600;">info</span> “Got text: $<span style="color: #66cc66;">&#123;</span> fooBarText <span style="color: #66cc66;">&#125;</span>”
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Then, using Camel’s bean integration, you can deliver messages from an in-memory queue directly to that Grails service:</p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;">from<span style="color: #66cc66;">&#40;</span>“seda:my.<span style="color: #006600;">queue</span>”<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">filter</span> <span style="color: #66cc66;">&#123;</span>
    it.<span style="color: #b1b100;">in</span>.<span style="color: #006600;">body</span>.<span style="color: #CC0099;">contains</span><span style="color: #66cc66;">&#40;</span>“FooBar”<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#125;</span>.<span style="color: #006600;">to</span><span style="color: #66cc66;">&#40;</span>“bean:myService<span style="color: #66cc66;">?</span>methodName<span style="color: #66cc66;">=</span>myMethod”<span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>Cool, isn&#8217;t it? As usual, you can find more info on <a href="http://grails.org/plugin/camel">the plugin page on grails.org</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/09/07/apache-camel-plug-in-for-grails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acegi tutorial for Grails updated</title>
		<link>http://www.mbohlen.de/blog/2009/09/06/acegi-tutorial-for-grails/</link>
		<comments>http://www.mbohlen.de/blog/2009/09/06/acegi-tutorial-for-grails/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 17:30:26 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=587</guid>
		<description><![CDATA[The tutorial that describes how to use the AcegiSecurity Plugin for Grails has been updated:
There are three ways to define security mappings &#8211; see Securing URLs for more details. This tutorial uses the Requestmap approach. To use Controller annotations, use this tutorial and to specify security mappings using the standard Spring Security approach use this [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://grails.org/AcegiSecurity+Plugin+-+Basic+Tutorial">tutorial that describes how to use the AcegiSecurity Plugin for Grails</a> has been updated:</p>
<blockquote><p>There are three ways to define security mappings &#8211; see <a href="http://www.grails.org/AcegiSecurity%20Plugin%20-%20Securing%20URLs">Securing URLs</a> for more details. This tutorial uses the Requestmap approach. To use Controller annotations, use <a href="x-msg://590/AcegiSecurity+Plugin+-+Basic+Tutorial+with+Annotations">this tutorial</a> and to specify security mappings using the standard Spring Security approach use <a href="x-msg://590/AcegiSecurity+Plugin+-+Basic+Tutorial+with+standard+string+mapping">this tutorial</a>.</p></blockquote>
<p>Good Luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/09/06/acegi-tutorial-for-grails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
