<?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>.NET Stories: Digitale Erfahrungen</title>
	<atom:link href="http://www.gmbsg.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gmbsg.com</link>
	<description>So einfach wie möglich. Aber nicht einfacher.</description>
	<lastBuildDate>Tue, 31 Aug 2010 22:21:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Me Likes Community Events</title>
		<link>http://www.gmbsg.com/me-likes-community-events/</link>
		<comments>http://www.gmbsg.com/me-likes-community-events/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 22:19:19 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[MSBuild]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1299</guid>
		<description><![CDATA[Die Zeiten sind auf Community Events geeicht. Oder soll ich besser sagen Community Conference? Ich bleibe vorerst mal bei Community Conference. Eines dieser Community Conferences war letztes Wochenende: die See#. 
See#
Das von der .NET Usergroup Konstanz-Kreuzlingen organisierte Event hatte eine ...]]></description>
			<content:encoded><![CDATA[<p>Die Zeiten sind auf Community Events geeicht. Oder soll ich besser sagen Community Conference? Ich bleibe vorerst mal bei Community Conference. Eines dieser Community Conferences war letztes Wochenende: die <a href="http://www.seesharpparty.de/de/Start/page38393.htm">See#</a>. </p>
<h3>See#</h3>
<p><img src="http://www.gmbsg.com/wp-content/uploads/2010/08/seesharplogo.png" alt="seesharp" title="seesharp" width="252" height="94" class="alignright size-full wp-image-1304" />Das von der .NET Usergroup Konstanz-Kreuzlingen organisierte Event hatte eine eine sehr ansprechende Agenda und hochkarätige Speaker zu bieten. Meine Sessionliste:</p>
<ul>
<li>Windows Phone 7 Applications mit Silverlight, <a href="http://geekswithblogs.net/lbugnion/Default.aspx">Laurent Bugnion</a></li>
<li>IronRuby für .NET Developer, <a href="http://dotnet-forum.de/blogs/thorstenhans/">Thorsten Hans</a></li>
<li>ADO.NET Entity Framework in N-Tier Applikationen integrieren, <a href="http://sqlpractice.wordpress.com/">Robert Meyer</a></li>
<li>Code-Generierung mit dem Text Template Transformation Toolkit (T4), <a href="http://www.dnug-bern.ch/">René Leupold</a></li>
</ul>
<p>Besonders schade fand ich, dass ich in Ermangelung meiner Parallelisierungsfähigkeiten bei folgenden Sessions nicht dabei sein konnte, denn sie hätten mich brennend interessiert:</p>
<ul>
<li>Powershell für Entwickler, <a href="http://www.thomas-krause.de/">Thomas Krause</a></li>
<li>UI/UX &#8211; Grundlagen für Entwickler, <a href="http://www.roland-weigelt.de/">Roland Weigelt</a></li>
<li>Framework Design Guidelines &#8211; Wiederverwendbare Frameworks in C#, <a href="http://www.software-architects.com/Blogs/tabid/72/BlogID/5/Default.aspx">Rainer Stropek</a></li>
</ul>
<h3>SL4@WP7</h3>
<p>Naja, nicht so schlimm, denn ich wurde von meiner Sessionwahl keineswegs enttäuscht. Den Anfang machte Laurent mit Windows Phone 7 Entwicklung. Angenehm: er spricht deutsch! Er gab einen guten Überblick über die Funktionen des neuen WP7 und die Programmiermöglichkeiten, darunter Silverlight. Highlight hierbei ist sicherlich, dass Laurent live in der Session gegen ein echtes Device die Programmierbeispiele ausgeführt hat und mit der Webcam dem Publikum gezeigt hat. Nice!</p>
<h3>IR</h3>
<p>Danach ging es schon weiter. Thorsten Hans zeigte in seiner IronRuby-Session wirklich beeindruckend, dass das .NET Framework mit der CLR und DLR eine revolutionäre Programmierplattform ist. Er ging zunächst auf die DLR und deren Komponenten ein und steigerte während seiner Session stetig den Geekfaktor. Zunächst zeigte er, wie man mit IronRuby umgeht &#8211; das Handwerkszeug sozusagen. Danach wurde es schon cooler: .NET-Assemblies und IronRuby im Zusammenspiel: IronRuby-Skripte (mit Scope &#038; Context) aus .NET-Anwendungen aufrufen und vice versa. Als Beispiel zeigte Thorsten eine in Ruby geschriebene Validierung einer Kunden-Registrierung eines .NET-Programms. Ich war beeindruckt! Doch Thorsten ließ nicht locker und haute zum Schluß noch einen richtigen Knaller raus: Unit Testing einer .NET-Komponente mit IronRuby &#038; RSpec!</p>
<p>Gut, dass danach die Mittagspause anstand, dass musste ich erst mal verarbeiten :) In der Pause hatte ich dank Basti auch die Gelegenheit, den von <a href="http://blog.thomasbandt.de/39/2361/de/blog/sony-vaio-vpcs12v9eb-review.html">Thomas getesteten Sony Vaio VPCS12V9E/B</a> selbst einmal &#8220;anzutesten&#8221;. Ich muss sagen, dass Thomas die Messlatte ganz schön hoch legt, denn für meinen Geschmack ist die Verarbeitung des Sony wirklich gut. Das Gehäuse ist kein Shiny-Alu-Guß, aber auch kein Plastik. Die Chiclet-Tastatur ist ok, der Druck relativ sensibel. Performance gut, Display in Ordnung.</p>
<h3>EF4</h3>
<p>Nach der Mittagspause ging es zu Robert&#8217;s Entity Framework Session. Er ging zunächst auf die &#8220;Schwierigkeiten&#8221; der ersten Version des Entity Frameworks ein, um danach gleich mit den Neuerungen von EF4 nachzulegen. An seinem Vortrag besonders gefallen haben mir die vielen kleinen Beispiele aus der Praxis, mit denen Robert seine Expertise in diesem Bereich einmal mehr zu unterstreichen wusste. In der zweiten Hälfte der Session widmete er sich den neuen Features wie (echten) POCO-Support, Domain-First-Design und natürlich dem IObjectSet&lt;T&gt;. Robert ging auch auf Testbarkeitskriterien von EF4-Lösungen ein und nennte einige Leitfäden zum Testing. Fazit: eine guter EF4 Überblick mit wertwollen Praxisbeispielen vom Experten.</p>
<h3>T4</h3>
<p>Die letzte Session hatte es in sich: T4. René zeigte zunächst die Grundlagen. Was ist T4, Wieso T4. Aufbau, Architektur, Anwendung. So einfach kann eine Einführung sein. Doch dann ließ es sich auch Rene nicht nehmen, in die Tasten zu greifen. Exemplarisch an Anwendungsbeispielen wie z.B. EF-Templates oder Templates für Unit Testing ging er auf die Features der T4-Engine ein. Bemerkenswert: René lässt sich auch durch kleinere technische Probleme nicht aus dem Konzept bringen. Er hatte wirklich eine Fülle von Beispielen parat, mit denen er reichhaltigen Funktionalitäten von T4 erläuterte. Ein Text- und Code-Jongleur, kann ich da nur sagen.</p>
<p>Trotz dieser guten Sessions war mein Eindruck von See# nicht ganz perfekt &#8211; doch daran war ich selbst schuld. Durch die lange Anreise habe ich die Keynote von <a href="http://www.des-eisbaeren-blog.de/">Golo</a> verpasst. Die lange Reisezeit war schlußendlich auch der ausschlaggebende Faktor, warum ich leider nicht mehr bei der Grillparty und dem .NET Coding Dojo mit <a href="http://www.lieser-online.de/blog/">Stefan</a> dabei sein konnte. Sehr schade. Nichtsdestotrotz konnte ich wieder auf dem Event wirklich tolle neue Entwickler-Kollegen kennenlernen, darunter <a href="http://www.aspnetzone.de/blogs/peterbucher/">Peter Bucher</a>, <a href="http://www.aspnetzone.de/blogs/robertobez/">Roberto Bez</a>, <a href="http://www.aspnetzone.de/blogs/juergengutsch/">Jürgen Gutsch</a> und <a href="http://dotnet-forum.de/blogs/thorstenhans/">Thorsten Hans</a>. Für mich hat sich dadurch die Teilnahme an See# doppelt gelohnt.</p>
<h3>Let&#8217;s go to NRWConf!</h3>
<p><img src="http://www.gmbsg.com/wp-content/uploads/2010/08/banner125x125.gif" alt="nrwconf2010" title="nrwconf2010" width="125" height="125" class="alignleft size-full wp-image-1303" />Kaum ist die eine Community Conference zu Ende, steht die nächste schon vor der Tür &#8211; die <a href="http://www.nrwconf.de/2010/">NRWConf 2010</a> am 9./10. September steht an. Wenn man sich die <a href="http://www.nrwconf.de/2010/Event/Agenda">Agenda der NRWConf</a> ansieht, dann klingt das überaus vielversprechend. Also ich werde mir definitiv wieder eine Menge Sessions so zu Gemüte führen und vieles dazu lernen. Am Abend gibt es &#8211; wie auch bei der See# &#8211; ein .NET Coding Dojo. Diesmal jedoch mit meiner Wenigkeit als Operator. Ich denke es wird nicht nur eine Menge Spaß machen, sondern wieder einmal erkenntnisreich sein ;-)</p>
<p>Ich freue mich!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/me-likes-community-events/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Das Agile Team in Nahaufnahme</title>
		<link>http://www.gmbsg.com/das-agile-team-in-nahaufnahme/</link>
		<comments>http://www.gmbsg.com/das-agile-team-in-nahaufnahme/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 10:21:08 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Emergenz]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1270</guid>
		<description><![CDATA[Oder: Nähe ist besser als Distanz
Es ist schon eine wundersame Welt. Also, in meinen Augen natürlich. Ich schreibe diesen Artikel ja auch, also kann es nur eine persönliche und subjektive Meinung sein. Aber immerhin, es ist eine Meinung, und das ...]]></description>
			<content:encoded><![CDATA[<h3>Oder: Nähe ist besser als Distanz</h3>
<p>Es ist schon eine wundersame Welt. Also, in meinen Augen natürlich. Ich schreibe diesen Artikel ja auch, also kann es nur eine persönliche und subjektive Meinung sein. Aber immerhin, es ist eine Meinung, und das sogar ziemlich deutlich. Denn, ich habe den Artikel, die Kommentare und den Folge-Artikel von Golo zu seiner These &#8220;Räumliche Nähe wird überbewertet&#8221; gelesen. Das ich da anderer Meinung bin, habe ich ja schon gebloggt. Was also noch darauf rumreiten? Die Antwort ist einfach: Es ist wichtig, deswegen.</p>
<h3>Kommunikation = Mitteilung + Wahrnehmung</h3>
<p>Doch zunächst möchte ich in aller (nur notwendig langen) Kürze auf ein verwandtes Thema eingehen: Die Kommunikation. Besser gesagt, die <a href="http://de.wikipedia.org/wiki/Zwischenmenschliche_Kommunikation">zwischenmenschliche Kommunikation</a>. Kommunikation ist eine schwierige und herausfordernde Kunst. Der eine sagt etwas, der andere versteht etwas. Ob es dann das ist, was der eine sagen wollte und der andere verstehen wollte, hängt von unheimlich vielen Faktoren und komplexen Sachverhalten ab. Doch zunächst gilt es festzuhalten: <a href="http://twitter.com/ilkerde/status/21942161099">Kommunikation ist nicht nur Mitteilung, sondern auch Wahrnehmung</a>. So geschehen auch bei der &#8220;Blog-Kommunikation&#8221; zwischen mir, Golo und dem &#8220;Publikum&#8221; (also auch Dir, lieber Leser).</p>
<p>Mit Golo&#8217;s Aussage fing es an: &#8220;<a href="http://www.des-eisbaeren-blog.de/post/2010/08/19/Raumliche-Nahe-wird-uberbewertet.aspx">Räumliche Nähe wird überbewertet</a>&#8220;. Gut. Man könnte jetzt vieles wahrnehmen. Zum Beispiel könnte man wahrnehmen, dass Golo damit meint, dass ihm räumliche Nähe ein Graus ist. Oder man könnte wahrnehmen, dass Golo ein introvertierter, soziophober Alleingänger ist. Keines von dem ist der Fall. In meinen Augen ist derjenige, der so eine Wahrnehmung hat, einfach nicht aufgeschlossen und wohlwollend zu Golo&#8217;s Meinung. Dennoch &#8211; man könnte es sicherlich wahrnehmen.</p>
<p>Ich antwortete auf seine Aussage mit dem Artikel &#8220;<a href="http://www.gmbsg.com/raumliche-nahe-wird-unterschatzt/">Räumliche Nähe wird unterschätzt</a>&#8220;. Gut. Man könnte jetzt vieles wahrnehmen. Zum Beispiel könnte man wahrnehmen, das ich damit &#8220;Verteilte Teams sind nicht erfolgreich&#8221; postuliere. Oder man könnte wahrnehmen, das ich ein opportunitisch-dogmatischer Agile-Fetischist bin. Keines von dem ist der Fall. In meinen Augen ist derjenige, der so eine Wahrnehmung hat, einfach nicht aufgeschlossen und wohlwollend zu meiner Meinung. Dennoch &#8211; man könnte es sicherlich wahrnehmen.</p>
<p>Aber jetzt mal Tacheles kommuniziert: Wer sollte denn so etwas annehmen? Ich finde so eine Wahrnehmung absurd. Ja, geradezu lächerlich. Demjenigen, der wirklich allen ernstes Golo nachsagen möchte, dass er Colocation als &#8220;schädlich&#8221; einstuft, oder aber mir den Vorwurf macht, ich würde &#8220;Colocation über Alles!&#8221; predigen, dem traue ich auch zu, dass er in &#8220;<a href="http://www.youtube.com/watch?v=8QSgNM9yNjo">Satellite</a>&#8221; keine Liebeshymne sieht, sondern es als öffentliche Drohgebärde einer <a href="http://de.wikipedia.org/wiki/Stalking">Stalkerin</a> zu ihrem Opfer interpretiert. Soviel dazu.</p>
<h3>Die Mathematik der Meinung</h3>
<p>Zurück zum Thema, der räumlichen Nähe. Ich bin nach wie vor der Meinung, dass räumliche Nähe unterschätzt wird. Unterschätzt in vielerlei Hinsicht. Ich gehe zunächst auf eine Perspektive ein, die auch schon angesprochen wurde: Effizienz und Produktivität. Golo schreibt in einem Kommentar treffend seine Motivation:</p>
<blockquote><p>Golo: &#8220;&#8230;Es ging mir um die immer postulierte Allgemeingültig der Aussage &#8220;Colocation ist besser&#8221;. Zu zeigen, dass dem nicht so ist, genügt ein einziges Gegenbeispiel&#8230;&#8221;</p></blockquote>
<p>Meine Meinung dazu: Ja, Richtig und Nein, Falsch. Das ist nicht logisch? Macht nichts. Ist trotzdem so. </p>
<p>Denn: Ja, es ist richtig, dass Golo nur ein Gegenbeispiel zeigen muss, um die Allgemeingültigkeit ad acta zu legen. Und: Nein, es ist falsch, denn meiner Meinung nach ist das gewählte methodische Werkzeug &#8211; nämlich die Anwendung der Aussagenlogik und deren Beweismethoden &#8211; völlig unangebracht. Bei allem Respekt gegenüber der Professionalität und Kompetenz von Golo bin ich etwas irritiert, das gerade der Berater für agile Methoden die Colocation nicht zu favorisieren scheint.</p>
<p>Doch die Motivation verstehe ich nur allzu gut &#8211; es wird öfters die &#8220;Colocation&#8221; als Heilsbringer dargestellt. Dem ist nicht immer so. Aber muss man deswegen so eine trockene, wissenschaftliche Herangehensweise wählen? Ich denke, dass es nicht unbedingt notwendig gewesen wäre, denn schließlich führt die Bool&#8217;sche Algebra hin zu einer totalitären &#8220;Schwarz-Weiss&#8221;-Wahrnehmung (wie oben geschildert). Dabei ist in Wahrheit nicht schwarz oder weiss schön, sondern <a href="http://acab.muc.ccc.de/">alle Farben</a>.</p>
<p>Leider wird für meinen Geschmack bei diesem Thema zu tief in die mathematisch-naturwissenschaftliche Logik-Kiste gegriffen. Logik &#038; Mathematik sind mächtige Werkzeuge, die man oft und versatil einsetzen kann. Aber sie sind nicht die Weisheit für alle möglichen Systeme oder Lebenslagen. Ich meine, hier ist Logik alleine nicht das adequate Werkzeug. Vielmehr hilft meines Erarchtens hier der gesunde Menschenverstand mit dem unvergleichlichen Etwas, was uns Menschen auszeichnet: Emotion. Doch dazu komme ich gleich noch.</p>
<h3>Handlungsfähigkeit, Produktivität und Effizienz</h3>
<p>Fakt ist, dass Menschen, die an einem Ort, in einem Raum zusammenarbeiten, Ihre Arbeit in den meisten Fällen effizienter, effektiver und produktiver gestalten und erledigen. Abseits von Agilität und <a href="http://www.academypublisher.com/jsw/vol03/no04/jsw03043136.pdf">unabhängig von der eingesetzten agilen Managementmethode</a> stellt man fest: In sehr vielen Fällen ist ein &#8220;Warroom&#8221; oder &#8220;Teamroom&#8221; für eine erfolgreichere Gestaltung des Vorhabens <a href="http://possibility.com/Misc/p339-teasley.pdf">nicht nur hilfreich, sondern mit ausschlaggebend</a>. Darüber hinaus entwickelt sich ein deutlich zügigerer Durchlauf des Teams durch die Tuckman-Phasen. Mit der Zeit entwicklelt man auch ein viel besseres Verständnis zu den Aufgaben anderer und vermag auch, den anderen in brenzlichen Situationen zu helfen. Und manchmal ist man auch ganz glücklich, wenn einem selbst ein wenig unter die Arme gegriffen wird.</p>
<p>Es gibt dabei meiner Meinung nach aber noch einen weiteren wichtigen Aspekt. Es ist die Teamaufstellung. Es ist eines der Dinge, die bei der Diskussion für mein Empfinden viel zu wenig herausgearbeitet wurde. Oder besser auf Deutsch gesagt: es wurde einfach ignoriert. Schade. Denn ein agiles Team ist nur dann ein agiles Team, wenn es <a href="http://theagileproductmanager.blogspot.com/2008/07/whats-cross-functional-team-and-why.html">interdisziplinär (bzw. &#8220;cross-functional&#8221;) ist</a>. Warum das so ist, habe ich ja schon <a href="http://www.gmbsg.com/raumliche-nahe-wird-unterschatzt/">geschildert</a>. Der Effekt, der dabei entsteht, ist eine wesentlich effizientere Kommunikation zwischen den einzelnen Domänen- und Fach-Experten. Darüber hinaus werden intuitiv und äußerst effizient gemeinsame Schnittstellen und eine <a href="http://domaindrivendesign.org/node/132">Ubiquitous Language</a> entwickelt. </p>
<p>Es gibt noch eine <a href="http://www.smartagile.com/2007/08/team-co-location.html">Menge anderer Dinge</a>, die ein interdisziplinäre und lokale Teamaufstellung zu einer Präferenz zu anderen Teamstrategien macht. Doch der kausale Kern eines agilen Teams ist und bleibt geschäftsgetrieben. Ein agiles Team ist &#8220;im Kern&#8221; nur interdisziplinär, weil es der einzige Weg ist, ein Feature als Ganzes, also integer und abgeschlossen, umzusetzen. Das es nebenbei diese Aufgabe auch noch effektiver löst, als andere Teamaufstellungen, ist die &#8220;Sahne&#8221; auf dem Kuchen.</p>
<h3>Mi Kasa Es Su Kasa</h3>
<p>Ein weiterhin von Golo und anderen Kommentatoren kritisch beäugtes Merkmal von &#8220;Colocation&#8221; ist die &#8220;Minderung der Produktivität durch Störungen&#8221;. Diese Argumentation ist für <a href="http://www.agilegamedevelopment.com/2008/11/agile-principles-emphasize-face-to-face.html">Agilisten nichts Neues</a>. In meinen Augen ein Indiz für Ängste. Man befürchtet, dass man durch &#8220;den Lärm&#8221; und &#8220;die Unterhaltungen&#8221; im Raum nicht mehr konzentriert arbeiten kann, sich jeder die Kopfhörer aufsetzt und in seine Welt entschwindet. Man befürchtet, dass man sich nicht mehr in seinem eigenen kreativen Mikrokosmos nicht mehr wohlfühlen kann. Man befürchtet, beobachtet zu werden. Man befürchtet, sich einfach nicht mehr in die Arbeit &#8220;gehen lassen&#8221; oder &#8220;eintauchen&#8221; zu können. Das sind verständliche Ängste. Besonders dann, wenn man noch nie oder erst selten mit agilen Teams &#8211; oder als Teil eines agilen Teams gearbeitet hat. Ich kann das nachvollziehen.</p>
<p>Doch ich kann es nicht nachvollziehen, dass manche &#8211; wohl genährt durch diese Befürchtungen &#8211; behaupten, dass es &#8220;sowieso nicht besser wäre&#8221;, oder für die einzelne Persönlichkeit und den einzelnen Charakter ungeeignet sei. Noch dazu ohne es einmal ausprobiert zu haben. In meinen Augen ist das eine lapidare und profane Argumentation. Viel zu oft gewinne ich dadurch den Eindruck, das dieser  Schlag von Entwicklern ein wenig zu oft an sich selbst denkt als an andere Teammitgleider und die gemeinsame Sache. </p>
<p>So sind z.B. <a href="http://www.uxmatters.com/mt/archives/2009/07/a-practical-guide-to-capturing-creativity-for-ux.php">Designer und UX-Experten wesentlich intensiver mit kreativer Schaffung konfrontiert</a> und damit auch deutlicher abhängig von ein Umfeld, in dem die &#8220;Kreativität keimen und reifen&#8221; kann. Auch Produkt Manager sind oft mit hochkonzentrierten und komplexen Denkprozessen beschäftigt, wenn es z.B. um die Entwicklung von neuen Features eines Produktes geht. Was ich damit sagen will: Jeder ist ein Mensch, nicht nur die &#8220;Coder&#8221;. Wer wünscht sich nicht gerne sein eigenes &#8220;Arbeitsreich&#8221;? Doch auch wenn man es hätte, in den meisten Fällen wäre es für die gemeinsame Sache eben nicht zielführend, das jeder sein Reich hat und sein eigenes Ding auf seine eigene Art und Weise macht.</p>
<p>Interessanterweise sind es aus meiner Erfahrung gerade diejenigen, die mehrheitlich Konzentrations- oder Kreativitäts-Aufgaben erledigen, am wenigsten Probleme mit der Zusammenstellung interdisziplinärer Teams in einen Raum haben. Im Gegenteil. Sie fühlen sich inspiriert und freuen sich, dass ihre Arbeit auch gesehen und bewertet werden kann. Ein guter &#038; <a href="http://emilychang.com/2006/02/the-agile-web-design-manifesto-an-introduction/">agiler Web-Designer</a> z.B. freut sich über jedes frühe Feedback &#8211; von jedem. Natürlich braucht man auch seine Ruhe- und Schaffungsphasen. Jeder braucht das. </p>
<p>Das ist im Übrigen eines der ersten Dinge, die ein agiles Team auch lernt und gestaltet: Ruhephasen &#8211; Bibliotheksmodus &#8211; Silentio. Ein weiteres, hilfreiches Merkmal solcher &#8220;hyperproduktiven Arbeitsumgebungen&#8221; sind Fluchtpunkte. Also Ruheinseln, in denen man sich zurückziehen kann. Für Persönliches oder Privates. Oder einfach nur so, zum ausruhen. Powernap. Etwas lesen. Am Flipper eine Runde zocken und den Kopf etwas frei kriegen. Auftanken.</p>
<p>Ich sage nicht, das all das, was ich gerade erwähnt habe, nicht auch mit verteilten Teammitgliedern möglich wäre. Es ist auch machbar. Die Profi&#8217;s Golo &#038; Peter sind ein <a href="http://www.des-eisbaeren-blog.de/post/2010/08/19/Raumliche-Nahe-wird-uberbewertet.aspx">gutes Beispiel</a> dafür. Aber es ist meiner Meinung in sehr vielen Fällen ungleich schwieriger, deutlich fragiler und auch minder effizient. Mit Colocation funktioniert es natürlich auch nicht immer &#8211; aber dafür deutlich öfter, einfacher und produktiver.</p>
<h3>Emotion. Hautnah.</h3>
<p>Zurück zu dieser einen &#8220;ungreifbaren&#8221; Sache, die mit agilen Teams an einem gemeinsamen Ort besonders hervorstechend ist. Die Emotion. Emotion ist etwas so wichtiges und schönes. Auch für Entwickler und Nerds. Man regt sich über den langsamen SATA-Treiber auf. Man installiert gespannt die neuesten Plugin&#8217;s für Visual Studio während man sich mit dem Käsebrötchen vollkrümelt. Man lacht sich über den 3. roten Build des Tages kaputt, weil es wieder einmal ein Leichtsinnsfehler war.</p>
<p>Doch Emotion ist nicht nur für einen selbst wichtig. Emotion ist auch für andere wichtig. Die Sprache ist nur ein Teil der Kommunikation. Manche Streiten sich darüber, ob nur <a href="http://blog.my-skills.com/2007/10/18/mythos-93-der-kommunikation-ist-nonverbal.html">7% unserer gesamten Kommunikation</a> verbal ist. Fakt ist, Sprache ist nicht alles. Den Satz &#8220;Ich verstehe.&#8221; von einer langfährigen, erfahrenen Web-Designerin zu hören &#8211; flüsternd, mit glasigen Augen und zittrigen, schweißgebadeten Händen, die sie vergebens versucht hinter ihrer großen Pop-Art-Teetasse zu verstecken &#8211; oder aber &#8220;Ich verstehe.&#8221; mit resoluter Stimme wahrzunehmen &#8211; gefolgt von einer gekonnten Seitwärtsdrehung, die ihre zum Pferdeschwanz gebundenen Haare durch die rapide Rotationskraft zu einem Duftkatalysator ihres Luxusparfums entarten lässt und mit der Registrierung ihrer kalten Schulter abrupt endet. Ein und das selbe Wort &#8211; doch zwei Nachrichten, die gegensätzlicher kaum sein könnten. Natürlich gibt es noch tausende von andere Bedeutungen des Satzes &#8220;<a href="http://www.youtube.com/watch?v=VgesUCTCoBs">Ich verstehe</a>&#8220;, aber ich denke Du verstehst, was ich meine. ;)</p>
<div style="float:right"><object width="360" height="227"><param name="movie" value="http://www.youtube.com/v/xDOURH0O16w?fs=1&amp;hl=en_US&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/xDOURH0O16w?fs=1&amp;hl=en_US&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="360" height="227"></embed></object></div>
<p>Für einige mag das jetzt zu weich, unlogisch, konstruiert oder unwissenschaftlich sein. Aber das ist mir egal. Denn das ist es, was ich am Anfang dieses Artikels mit &#8220;es ist wichtig&#8221; gemeint habe und was ich zum Ausdruck bringen will: Agile Teams, die gemeinsam an einem Ort arbeiten sind sicherlich nicht perfekt. Aber sie sind in der deutlichen Vielzahl der Fälle produktiver, effektiver, handlungsfähiger, änderungswilliger, offener, respektvoller und: emotionaler. </p>
<p>Das Ergebnis ist eine gewisse Energie, eine gewisse Magie, die bei agilen Teams mit Colocation öfter und schneller entsteht. In dem letzten Slide meines <a href="http://www.youtube.com/watch?v=xDOURH0O16w">Enthusiasmus-Vortrags</a> über Scrum beim Webmontag in München sieht man <a href="http://www.youtube.com/watch?v=YWkSnKd-5Tc">eine Band im Sonnenuntergang zusammenspielen</a>. Das spiegelt die Energie &#038; Magie ein wenig wider: die Emergenz des Teams. Das Ganze ist mehr als die Summer der einzelnen Teile.</p>
<div style="float:right"><object width="360" height="227"><param name="movie" value="http://www.youtube.com/v/YWkSnKd-5Tc?fs=1&amp;hl=en_US&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/YWkSnKd-5Tc?fs=1&amp;hl=en_US&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="360" height="227"></embed></object></div>
<p>Und damit dieses ach so kindische &#8220;aber du sagt das ist toll und alles andere ist blöd&#8221;-Fingerpointing nach diesem Artikel hoffentlich keinen Nährboden findet, nochmal ein klarer Disclaimer: Ich habe die Weisheit nicht gepachtet. Ich bin kein Klugscheißer und Besserwisser, und ich will es auch nicht sein. Aber ich habe eine Meinung. Ob sie Dir gefällt, lieber Leser, musst Du schon selbst wissen. </p>
<p>Für mich ist klar: wer wirklich agile Software-Entwicklung betreiben möchte, der wird versuchen, ein Team an einem gemeinsamen Ort arbeiten zu lassen. Wenn es nicht möglich ist, dann eben mit Hilfsmitteln verteilt. Alles andere ist in meinen Augen weder agil, noch fortschrittlich, noch wirklich produktiv. Ob das für Dich, lieber Leser, auch so ist, musst Du schon selbst wissen.</p>
<p>Ich bevorzuge es, wenn ich meinem Kollegen auf die Schulter klopfen kann, wenn er einen genialen Integrationstest geschrieben hat. Oder dem Web-Designer in sein kritisches Gesicht zu blicken, wenn er wieder einmal den Usability-Prototyp der UX-Designerin begutachtet und währenddessen sich die Komplementärfarben im Pantone-Fächer zurechtsucht. Es ist für mich eine Ehrensache, dem gestressten Produktmanager beim sortieren und formulieren der neuen User Stories zu helfen, weil er in einer Stunde ein wichtiges Meeting mit dem Marketing hat. Und: es baut mich auf, wenn meine Teammitglieder mich anlächeln, weil ich ein Feature mit einem Kollegen fertiggestellt habe und wir uns nach dem grünen Build in den Armen liegen, als wäre der FC Bayern gerade Championsleague-Sieger geworden.</p>
<div style="clear:both"></div>
<p>Ich bevorzuge agile Teams an einem Fleck, an einem Ort, in einem Raum.<br />
Gemeinsam für die gemeinsame Sache.<br />
Räumliche Nähe wird unterschätzt. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/das-agile-team-in-nahaufnahme/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Räumliche Nähe wird unterschätzt</title>
		<link>http://www.gmbsg.com/raumliche-nahe-wird-unterschatzt/</link>
		<comments>http://www.gmbsg.com/raumliche-nahe-wird-unterschatzt/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 13:54:23 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Pair Programming]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1262</guid>
		<description><![CDATA[Mit Interesse habe ich den Artikel von Golo über Scrum-Teams und seine Meinung zu räumlicher Nähe in agilen Teams gelesen. Der Titel seines Artikels ist durchaus provokant: &#8220;Räumliche Nähe wird überbewertet&#8220;. 
Nun, dem muss ich deutlich widersprechen. Genau das Gegenteil ...]]></description>
			<content:encoded><![CDATA[<p>Mit Interesse habe ich den Artikel von Golo über Scrum-Teams und seine Meinung zu räumlicher Nähe in agilen Teams gelesen. Der Titel seines Artikels ist durchaus provokant: &#8220;<a href="http://www.des-eisbaeren-blog.de/post/2010/08/19/Raumliche-Nahe-wird-uberbewertet.aspx">Räumliche Nähe wird überbewertet</a>&#8220;. </p>
<p>Nun, dem muss ich deutlich widersprechen. Genau das Gegenteil ist der Fall &#8211; und sowohl sein Artikel als auch die Kommentare dazu sind in meinen Augen eine Bestätigung: Räumliche Nähe wird einfach noch viel zu oft unterschätzt!</p>
<h3>Professional Engineering</h3>
<p>Ich möchte das Beispiel von Golo aufgreifen, in dem er die gute Zusammenarbeit zwischen ihm und Peter schildert:</p>
<blockquote><p>&#8220;&#8230; Peter Bucher und ich sind ein solches Team. David Tielke und ich sind ein solches Team. Beide habe ich in meinem Leben noch nicht all zu oft getroffen – jeden von beiden höchstens fünf Mal. Und dennoch harmoniert die Zusammenarbeit in einem Ausmaß, das für Außenstehende nicht nachvollziehbar ist.</p>
<p>Auch wenn uns hunderte von Kilometern trennen, führen wir regelmäßig Programmieren in Paaren durch – per Skype und Teamviewer. Und die Zusammenarbeit funktioniert einwandfrei. Keiner von uns käme auf die Idee, zu sagen, dass wir effektiver oder effizienter sein könnten, wenn wir gemeinsam vor einem PC arbeiten würden.</p>
<p>Vermutlich wären wir dies noch nicht einmal, weil dann nicht jeder seine vertraute Arbeitsumgebung hätte, in der er sich rundum wohlfühlt&#8230;. &#8220;</p></blockquote>
<p>Das Beispiel ist ein Zeugnis von professioneller Software-Entwicklung. Da arbeiten offensichtlich zwei Profis zusammen. Sehr gut. Golo leitet daraus ab, dass es nicht zwingend notwendig sei, Teammitglieder an einem Ort, in einem Gebäude, in einem Raum zu haben, um effektiv ein &#8220;Team&#8221; zu sein. Nun, das mag ja schön und gut sein. Aber Golo: Hast Du denn Vergleiche? Und wenn ja, hast Du gemessen, wie &#8220;effektiv&#8221; denn beides ist? Ich befürchte nein. Wäre dem so, dann wäre mit großer Wahrscheinlichkeit Dein Fazit anders ausgefallen.</p>
<p>Was ich damit zum Ausdruck bringen will, ist, daß Golo und Peter wohl nie in einem Raum über längere Zeit zusammen gearbeitet haben. Ich unterstelle das jetzt einfach einmal Golo & Peter; bitte korrigiert mich und verzeiht mir, wenn dem nicht so ist. Es dient mir zur Illustration meiner Perspektive zum Thema.</p>
<p>Also, wäre dem so, so hätte Golo gar keinen Vergleich der Effektivität &#038; Effizienz des Teamgefüges zwischen ihm und Peter. Beide sind ausgewiesene Profis in der Software-Entwicklung und schaffen aus der Distanz gemeinsam gute und effiziente Teamarbeit. Der Artikel von Golo beweist es. Man stelle sich nur vor, welche Produktivität und Ingenieursleistung möglich wäre, wenn zwei solche Profis an einem Tisch arbeiten würden. Wow.</p>
<p>Damit sind wir auch schon an einem wichtigen Punkt. Agile Software-Entwicklung und deren Verfahrensweisen behaupten nicht, dass es notwendig sei, ein Team an einem Fleck zu haben, um (gut) Software zu entwickeln. Aber sie behaupten, dass sich spätestens mittelfristig die Produktivität &#038; Effizienz eines Teams steigert, wenn sie an einem Fleck miteinander zusammenarbeiten. Diese Behauptung ist kein Wunschtraum, sondern messbar &#038; belegbar.</p>
<p>Doch es gibt noch einen weiteren, ganz entscheidenden Aspekt der Forderung nach Teamnähe in der Agilität. Golo überspringt in seiner Betrachtung meines Erachtens die Interdisziplinarität agiler Teams. Das ist für mich besonders verwunderlich, zumal er in seinem gelungenen Artikel über die <a href="http://www.des-eisbaeren-blog.de/post/2010/08/18/Featurebezogene-Entwicklung.aspx">Feature-Orientierung in agilen Methoden</a> sich selbst genug Indizien gibt, die interdisziplinäre Aufstellung von Teams zu fordern &#038; zu fördern.</p>
<h3>Agile Teams sind Interdisziplinär</h3>
<p>Was heisst das? Das heisst, erst einmal, das Entwickler alleine kein Team sind. Zumindest mal in der agilen Software-Entwicklung nicht. Ein agiles Team ist ein Team, welches eigenständig dazu in der Lage ist, das geforderte Produkt bzw. deren Features ausliefern zu können. Manchmal &#8211; besser gesagt: eher selten &#8211; reichen dazu Entwickler. Doch meist braucht es mehr, viel mehr. Es braucht Produktmanager, Systemingenieure, Usability-Experten, Designer, Tester und manchmal sogar noch mehr, um ein Feature eines Produktes wirklich fertigstellen zu können.</p>
<p>Ein agiles Team ist ein Team, welches all diese Rollen und Aufgabenbereiche berücksichtigt und mit den Teammitgliedern umsetzen kann. Dass heisst nicht unbedingt, dass Designer ein &#8220;fester Bestandteil&#8221; des Teams sein muss, wenn er nur zwei Websites designen soll, das Produkt aber weitaus mehr darstellt (z.B. im Backend oder durch Dienste). Doch wichtig ist hier die Erkenntnis, dass ein agiles Team interdisziplinär ist; idealerweise sogar mit dem Kunden (oder Kundenvertreter) an seiner Seite.</p>
<p>Vor diesem Hintergrund macht die Forderung nach räumlicher Nähe von Teammitgliedern in einem Team noch viel mehr Sinn. Leider gibt es noch viel zu oft die Situation, dass Entwickler von der Marketing-Abteilung die Anforderungen über ein Feature (&lt;Ironie&gt;als &#8220;Story&#8221; natürlich, haha&lt;/Ironie&gt;) in einem &#8220;agilen&#8221; Ticketsystem vorgesetzt bekommen. Die Entwickler &#8220;sprinten&#8221; dann und liefern das Ergebnis an die Testabteilung, um danach ein Paket der Infraktruktur bzw. Installation-Engineers &#8220;über den Zaun&#8221; zu werfen. In meinen Augen haben es solche Teams echt schwer, denn sie sind nicht agil, sondern fragil.</p>
<h3>Keine Scheu vor Transparenz</h3>
<p>Die Emergenz, die durch interdisziplinare Teams entsteht, ist nämlich erst dann wirklich mess- und spürbar, wenn die Kommunikationsmittel als auch die Kommunikationsbarrieren untereinander so gering wie möglich ist. Doch nicht nur gute Kommunikation ist ein Ziel der Co-location. Ein aus meiner Sicht wesentlich wichtigerer Faktor ist der Faktor der Transparenz.</p>
<p>Durch die Nähe zueinander sieht man auch, was der andere so macht. Soll heissen, man lernt seinen Tagesablauf, seine Aufgaben, seine Tools, seine Herausforderungen &#8211; na eben das ganze Arbeitsumfeld. Umgekehrt sehen andere, mit welchen Dingen man selbst tagtäglich konfrontiert ist und was es tatsächlich bedeutet, Software zu entwickeln. Durch die Transparenz entsteht mehr Verständnis zu der Aufgabe und der Leistung des anderen Teammitglieds. Man versucht sich gegenseitig zu helfen und aufzubauen. Das wiederum hilft der Kommunikation und der Produktivität im Team.</p>
<p>Abschließend kann ich nur sagen, dass ich nicht nur ein Befürworter von räumlicher Nähe bin, sondern als Agilist versuche, so nah wie möglich an meinen Teammitgliedern und dem Kunden dran zu sein. Manchmal macht man es sich meiner Meinung nach zu einfach, wenn man Distanzen unter gemeinsam arbeitenden Kollegen als gegeben hinnimmt.</p>
<h3>Be Agile!</h3>
<p>Ich möchte in diesem Zusammenhang gerne nochmal an zwei Punkte des <a href="http://agilemanifesto.org/">agilen Manifests</a> erinnern: People over Process (and Tools), sowie Collaboration over Contracting. Für mich steht fest: wer von sich behaupten möchte, agile Software-Entwicklung zu betreiben, der wird früher oder später die Vorteile von räumlicher Nähe von Teams erkennen und versuchen, diese Nähe von Teams so gut wie möglich herzustellen. Alles andere sind in meinen Augen nur Lippenbekenntnisse und Halbwahrheiten über Agilität.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/raumliche-nahe-wird-unterschatzt/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>.NET Coding Dojo @ Avanade</title>
		<link>http://www.gmbsg.com/dotnet-coding-dojo-avanade/</link>
		<comments>http://www.gmbsg.com/dotnet-coding-dojo-avanade/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 22:50:11 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1245</guid>
		<description><![CDATA[Es war ein grandioses .NET Coding Dojo in München am letzten Mittwoch. Wir waren zu Gast bei Avanade und haben uns von der ersten bis zur letzten Minute sehr wohl gefühlt. Dank der tollen Organisation gab es nichts zu bemängeln ...]]></description>
			<content:encoded><![CDATA[<p>Es war ein grandioses .NET Coding Dojo in München am letzten Mittwoch. Wir waren zu Gast bei <a href="http://www.avanade.com/de">Avanade</a> und haben uns von der ersten bis zur letzten Minute sehr wohl gefühlt. Dank der tollen Organisation gab es nichts zu bemängeln und vieles zu bestaunen. Den Anfang machte da das reichhaltige Empfangsbuffet, welches einen geschmackvollen Beitrag für eine angenehme und gelassene Atmosphäre leistete.</p>
<p>Wohl nicht zuletzt durch diese &#8220;Stärkung&#8221; zu Beginn war die Teilnehmerschaft bei diesem Dojo besonders motiviert. Nach der obligatorischen Begrüßung ging es auch schon an die Wahl des Modus und des Kata&#8217;s. Wir haben uns nach Abstimmung für den <a href="/dotnet-coding-dojo/modes">Prepari-Modus</a> entschieden und uns wieder einmal an das sagenumwobene <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataBankOCR">Kata BankOCR</a> ausgesucht. Auf Grund der Teilnehmerzahl haben wir auch die Gruppe in zwei Teams und separate Räumlichkeiten aufgeteilt. </p>
<div style="float:right; padding-left:8px;">
<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13984765&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=13984765&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/13984765">munich .net coding dojo @ avanade</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
</div>
<p>Dabei gab es diesmal einige Besonderheiten. Bei Avanade haben die Meetingräume Namen von berühmten Münchener Persönlichkeiten &#8211; so kam es auch, dass wir den Teams auch diese Namen gaben. Darüber hinaus haben beide Teams eigene &#8220;Operator&#8221; und &#8220;Coder&#8221; gehabt. Für das Team &#8220;<a href="http://de.wikipedia.org/wiki/Leo_von_Klenze">Von Klenze</a>&#8221; war der Operator diesmal Christian; die Macht über die Tasten hatte Tom. Das Team &#8220;<a href="http://de.wikipedia.org/wiki/Oskar_von_Miller">Von Miller</a>&#8221; wurde durch den Operator Andreas unterstützt, während Dimi über die Kontrolle über den Rechner hatte.</p>
<p>Nach der Teamaufteilung ging es schon los. 45 Minuten lang wurde kräftig designed, diskutiert und programmiert. Bei beiden Teams war das TDD schon in Fleisch und Blut übergegangen, denn schließlich hatten beide zur 5 minütigen Pause schon Tests und Code aufzuweisen. Zuversichtlich ging es dann auch schon in die zweiten 45 Minuten. Mein persönlicher Eindruck war, dass gerade diese zweite Runde viele Aha-Effekte auslöste damit den Erfahrungsaustausch besonders förderte.</p>
<p>Den Abschluß des Dojo&#8217;s machte eine (diesmal etwas längere) Retrospektive. Die Teilnehmer gaben Feedback zum Code, zur Teamleistung und zur eigenen Perspektive. Wiederum bemerkenswert war die allgemeine Zufriedenheit über den Ablauf des Dojo und die geleisteten Resultate. Nach ein paar Schlußworten meinerseits ging es dann noch (mit nahezu gleicher Teilnehmerzahl) in ein Bistro in der Nähe auf eine ausgedehntere Nachbesprechung eines der besten .NET Coding Dojo&#8217;s, die ich jemals erlebt habe. Vielen Dank an alle Teilnehmer und an Avanade!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/dotnet-coding-dojo-avanade/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ratatouille Estimation Scale</title>
		<link>http://www.gmbsg.com/ratatouille-estimation-scale/</link>
		<comments>http://www.gmbsg.com/ratatouille-estimation-scale/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 18:19:56 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1158</guid>
		<description><![CDATA[Manchmal ist es nicht einfach, umzudenken. Manchmal will man verstehen, tut sich aber schwer. Mir ist das schon einige Male passiert. Ich denke, jedem passiert das ab und an einmal.
So oder ähnlich erging es auch dem ein oder anderen beim ...]]></description>
			<content:encoded><![CDATA[<p>Manchmal ist es nicht einfach, umzudenken. Manchmal will man verstehen, tut sich aber schwer. Mir ist das schon einige Male passiert. Ich denke, jedem passiert das ab und an einmal.</p>
<p>So oder ähnlich erging es auch dem ein oder anderen beim jüngsten Estimation Meeting, welches wir in einem Projekt durchgeführt haben. Für einige war es das erste Schätzmeeting, bei dem nicht einfach so Manntage herausposaunt wurden, sondern das von agilen Methoden wie XP oder Scrum bekannte schätzen in <a href="http://de.wikipedia.org/wiki/Extreme_Programming#Aufwandsabsch.C3.A4tzung">Relationsgrößen (z.B. Story Points)</a> umgesetzt wurde.</p>
<p>Für den Anfänger ist der Zeitbezug im Schätzungsverfahren meist so manifestiert, dass er sich schwer tut, überhaupt anders denken und schätzen zu können. Die erste, wichtige Hürde hin zum relativen schätzen ist eine klare Vorstellung davon, was nun der Unterschied zwischen größenorientiertem Umfang und zeitorientiertem Aufwand ist. Um den Teilnehmern und Neulingen im agilen Schätzzirkus den Einstieg zu erleichtern, habe ich mich einer kleinen Metapher bedient:</p>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/07/ratatouille_scale.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/07/ratatouille_scale.jpg" alt="ratatouille_scale" title="ratatouille_scale" width="700" height="495" class="aligncenter size-full wp-image-1161" /></a></p>
<p>Da ist er, der „<strong>Ratatouille Estimation Scale</strong>“. Klassisch, einfach. Fibonacci und am Ende Hightower-Zahlen. Das war’s. Doch es ist mehr dahinter als nur die blanken Zahlen. Es ist die Metapher, die Schätzen besonders geholfen hat.</p>
<p>Denn der Film „<a href="http://disney.go.com/disneyvideos/animatedfilms/ratatouille/">Ratatouille</a>“ und die Liebe zu Gaumenschmaus ist ein schönes Beispiel, an dem sich größenorientiertes Schätzen erklären lässt. Bei der Menge der Köstlichkeiten geht es nämlich nicht darum, wie „schnell“ man diese Leckereien herunterwürgen kann. Es geht auch nicht darum, einfach wahllos seinen Hunger zu befriedigen. Nein, es geht darum, den <a href="http://www.youtube.com/watch?v=wlCAq45TcxU">Umfang und Wert der Köstlichkeiten zu erfassen</a> ;-) </p>
<p>Nur ein Häppchen? Wohl eher eine 1 oder 2. Ein echtes Stück Käse? Eher die 5. Viel Käse und Trauben dazu? Lecker. An die 20. Kistenweise Käse, Gemüse, Obst und Wein? Wow. 50 oder mehr!</p>
<p>Die Besonderheit dabei: Es wird schnell deutlich, dass es nicht um die Zeit geht. Schließlich kann man ein Stück Käse sicherlich in ein paar Stunden „abfrühstücken“ – oder aber scheibchenweise über eine Woche lang genießen. Mit steigendem Umfang wird es allerdings schwerer. Denn jetzt kommen andere Lebensmittel hinzu, die vielleicht andere Haltbarkeitsmerkmale aufweisen oder aber besondere Behandlung bzw. Lagerung benötigen. Das ist ein relativ schönes Bild für den Begriff der “Komplexität im Umfang“.</p>
<p>Den Neulingen im Estimation Meeting hat diese Metapher sehr geholfen, denn schon nach den ersten paar Schätzrunden war die &#8220;Zeit&#8221; in der Besprechung der Features „wie verschwunden“ :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/ratatouille-estimation-scale/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Unit Tests sind immer dabei</title>
		<link>http://www.gmbsg.com/unit-tests-sind-immer-dabei/</link>
		<comments>http://www.gmbsg.com/unit-tests-sind-immer-dabei/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 23:20:17 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1133</guid>
		<description><![CDATA[Vor knapp einer Woche stellte Stefan die Frage „Wohin mit den Tests?“ gestellt. Er selbst schreibt, er trenne die Implementierung und deren Tests strikt, ließ sich allerdings zu einem Experiment hinreißen, in dem er Implementierung und Tests in einem einzigen ...]]></description>
			<content:encoded><![CDATA[<p>Vor knapp einer Woche stellte Stefan die Frage „<a href="http://www.lieser-online.de/blog/?p=235">Wohin mit den Tests</a>?“ gestellt. Er selbst schreibt, er trenne die Implementierung und deren Tests strikt, ließ sich allerdings zu einem Experiment hinreißen, in dem er Implementierung und Tests in einem einzigen Projekt ließ. Alles in einer Assembly also. Motiviert wurde er wohl durch meine Aussage, dass es <a href="http://www.gmbsg.com/auf-dem-eisberg/">schlichtweg einfach nicht mehr zeitgemäß</a> ist, Tests vom SUT zu trennen.</p>
<p>Und genau so ist es auch. Zumindest für mich. Ich habe lange Zeit Tests und Implementierung in separaten Projekten entwickelt. Bis ich bemerkt habe, dass es mir nicht hilft, sondern mich eher bei meiner Entwicklung stört. Seitdem halte ich Tests und Implementierung immer ganz nah beieinander, sozusagen „Seite an Seite“. Ich möchte in diesem Post meine Beweggründe &#038; Konsequenzen für Side-by-Side-Specs (oder Near-Specs, wie ich es gerne nenne) schildern, und somit meine Antwort auf Stefan’s Frage geben.</p>
<p>Nun zunächst einmal beschränke ich mit bei den Near-Specs auf Unit Tests. Ganz klassisch im Sinne des TDD. Integrationstests sind bei mir nach wie vor Far-Specs, also separate Projekte. Doch es soll ja um die Unit Tests gehen, besser gesagt um Tests, die aus dem Test-First-Ansatz heraus entstehen. Das können Tests bei TDD oder aber auch Specs bei BDD sein. Ergo: Tests, mit denen ich meinen Code designe &#038; entwickle, halte ich sehr nah am Code.</p>
<h3>Verhalten greifbar formen</h3>
<p>Doch wieso sind bei mir die Tests nun an der Implementierung dran? Es gibt einen ganz einfachen und für mich auch unschlagbar effektiven Grund: Die Tests sind greifbar. Sie sind dort, wo ich sie brauche, nämlich an dem Verhalten, für das ich sie zur Spezifikation gebraucht habe. Seit dem ich die Tests an der Implementierung habe, „forme“ ich auch mehr und öfter. Soll heissen: Ich führe öfter und effizienter Refactorings durch. Nicht nur vom SUT, sondern natürlich auch von den Tests selbst.</p>
<p>Überhaupt ist es mit den Tests im Implementierungsprojekt ein ganz anderes, viel effizienteres arbeiten. Wenn ich nach einiger Zeit wieder einmal in einem Projekt etwas zu tun habe, schaue ich mir die Tests an. Das Schöne bei den Near-Specs ist jetzt, dass ich sehr schnell zwischen Spezifikations- und Implementierungssicht wechsle und deutlich zügiger navigieren kann. Das fällt mir besonders bei Tests mit mehreren Abhängigkeiten / Mocks auf.  Ich komme mit dieser Art von „Code lesen“ viel besser zurecht als vorher mit dem hin- und herspringen zwischen mehreren Projekten.</p>
<p>Zugegeben, anfangs tat ich mir noch ein wenig schwer, denn schließlich ist die Anzahl der Testklassen &#8211; genereller: die Menge an Testcode &#8211; für ein SUT meist deutlich mehr. Neben der Umgewöhnung des „nicht mehr über Assembly-Boundaries“ hinweg arbeitens hatte ich das Gefühl, dass mich der Testcode „stört“ oder mir „im Weg steht“. Doch dieses Gefühl war schnell wieder weg, als ich das Prinzip auf größere Projekte angewendet habe und immer wieder die Tests für die Spezifikation und das Codeverständnis gebraucht habe. Spätestens dann war bei mir die Erkenntnis da: Side-By-Side-Specifications Rule!</p>
<p>Doch mit dieser „Colocation“ der Tests an die Implementierung tauchen neue Fragen auf. Eine ganz besonders oft gestellte Frage ist die der Auslieferung der Tests in Release-Assemblies. Es ist schließlich erstrebenswert, nur das in ein Release einfliessen zu lassen, was auch wirklich vom Benutzer gebraucht wird: die Funktionalität. So stand ich auch vor dieser Aufgabe, welches sich aber sehr schnell und vor allem einfach bewältigen ließ.</p>
<h3>Reduce to the Max</h3>
<p>Die Idee ist denkbar einfach: Wenn ich Tests und Implementierung zur Entwicklungszeit nicht trenne, dann trenne ich sie eben später, undzwar zur Auslieferungszeit. In einfachen Worten: der Build muss diese Aufgabe erledigen. Da ich sowieso meinen Code über Build-Skripte bauen lasse, lag es sehr nah, diese Skripte einfach anzupassen. Für meine eigenen Projekte habe ich oft ein kleines Powershell-Skript. Bei größeren Projekten oder CI-Umgebungen ist der Aufruf eines eigenen Post-Clean-Events vor dem Build ein guter Extension-Point.</p>
<p>Als ich die Menge und den Inhalt der Kommentare bei Stefan’s Post gesehen habe, dachte ich mir nur: warum schreiben so viele darüber und finden es „schwierig“ oder „unsauber“, ohne es offensichtlich einmal probiert zu haben? Ich habe es probiert und ich fand es überhaupt nicht schwierig – ganz im Gegenteil. Jetzt ist das für mich eine viel angenehmere, effizientere und vor allem intuitivere Arbeitsweise. Das Build-Skript zum filtern der Testartefakte ist denkbar einfach, bei mir sind das meistens nur so 10 bis 20 Zeilen. Schließlich ist es ja auch „nur“ ein Release-Build. Ich rufe es nicht die ganze Zeit auf wie ein CI-Build, und CD mache bzw. brauche ich derzeit auch nicht.</p>
<p>„Soooo lange, wie ich brauche, diese Kommentare überhaupt zu lesen, brauche ich nicht einmal, wenn ich sogar das Build-Skript per TDD erstelle“ war mein Gedanke, als ich mit dem Lesen der Kommentare fertig war. Und da ich ein Freund von <a href="http://twitter.com/ilkerde/status/18264412106">empirischen Erkenntnissen</a> bin, dachte ich mir: „Auf geht’s, das machst Du jetzt!“. Gesagt getan. Das <a href="http://github.com/ilkerde/funbench/tree/master/codekatas/fizzbuzz/fizzbuzz-sidebyside/">Ergebnis</a> kann man sich auf github ansehen. Erkenntnis: Die Entwicklung des Build-Skripts (ohne TDD Framework und mit meinen „bescheidenen“ Powershell-Kenntnissen) hat etwas mehr als eine Stunde gedauert. So lange habe ich in etwa auch zum Lesen der Kommentare gebraucht ;-)</p>
<h3>Separation of Concerns</h3>
<p>Doch zurück zum Thema. Beim Lesen der Kommentare ist mir auch aufgefallen, dass man öfter das Argument der „Separation of Concerns“ (SoC) gegen die Zusammenführung von Tests und Implementierung anbringt. Es sei im Sinne der SoC, Tests von der Implementierung zu trennen. Auch gute Freunde von mir, wie z.B. <a href="http://twitter.com/tehlike">Tehlike</a> – für den ich im Übrigen diesen Post <a href="http://www.gmbsg.com/to-whom-it-may-concern/">auch auf Englisch verfasst habe</a> &#8211; entgegneten mir das gleiche Argument. Dazu mein Statement:</p>
<p><strong>Tehlike, yanılıyorsun! ;-)</strong><br />
<i>(Auf deutsch: Tehlike, Du irrst Dich!)</i></p>
<p>Ja, ich denke diejenigen irren sich, die SoC als Argument für eine Trennung von Tests &#038; Implementierung anbringen. Sie irren sich meiner Meinung nach sogar gewaltig. Denn SoC ist in meinen Augen bei genauerer Betrachtung sogar ein Argument für die Zusammenlegung von Tests und Implementierung.</p>
<p><a href="http://en.wikipedia.org/wiki/Separation_of_concerns">Separation of Concerns</a> besagt nämlich, dass unterschiedliche Zuständigkeiten eines Objekts voneinander getrennt werden sollten. Zuständigkeiten sind im Sinne der Domänenmodellierung und Systemanalyse Aspekte von Verhalten und Funktionalität. Ergo: Unterschiedliche Zuständigkeiten eines Verhaltens sollten voneinander getrennt werden. Ein schönes Beispiel ist der Taschenrechner. Die Funktionalität des Addierens des Taschenrechners gestaltet sich aus dem Tastenfeld, der Recheneinheit, und der Anzeige. All das sind Aspekte der Funktionalität, die in eigenständige Zuständigkeiten münden. Im Sinne der „Separation of Concerns“ sind diese Aspekte zu trennen und damit die Komponentenorientierung und Wiederverwendbarkeit zu stärken.</p>
<h3>Completeness of Concern</h3>
<p>So weit, so gut. Doch Separation of Concerns bedeutet für mich im Umkehrschluß auch, dass man eine Zuständigkeit einer Funktionalität auch zusammenhalten sollte. Ein einziger „Concern“ sollte in sich geschlossen sein. „Das ist er doch automatisch“ denkt man sich. Naja, ganz so einfach ist es meiner Meinung nach nicht. Denn eine Zuständigkeit einer Funktionalität findet man in der Software-Entwicklung oftmals nicht als „ganze Einheit“ an einem Fleck, sondern überall verteilt.</p>
<p>So wird z.B. in der klassischen Softwareentwicklung die Zuständigkeit in den Requirements erfasst. Man findet sie in der Use-Case-Dokumentation und in UML-Diagrammen wieder, diesmal mit ein oder zwei Szenarien. Natürlich wird das Verhalten und dessen Aspekt auch in den Tests manifestiert – dazu sind sie ja da. Und – wer hätte das gedacht – die Funktionalität findet man auch im Code wieder. Resultat: Ein einziger Concern, der im Entwicklungsprozess an allen möglichen Stellen auftaucht. In einem solchen Szenario ist es für den Entwickler meistens wie ein Puzzle, bei dem die Puzzlestücke überall sind – nur nicht auf dem Tisch.</p>
<p>Es ist also für die „Vollständigkeit einer Zuständigkeit“ nicht hilfreich, Tests und Implementierung voneinander zu trennen. Weiterhin hat das Trennen von Tests und Implementierung nichts mit Separation of Concerns zu tun, denn schließlich geht es sowohl bei den Tests als auch bei der Implementierung um einen einzigen Concern – dem Aspekt der Funktionalität, die das SUT eben abbilden soll.</p>
<p>Es ist gerade die Fraktion der BDD-Anhänger, die genau diesem Umstand mit all Ihren Argumentationen und Prinzipien hervorheben möchten. Sie reden nicht von Tests, sondern von Spezifikationen, sie reden nicht über Verifikation, sondern über Verhalten. Ja, sie gehen sogar soweit und reden im Sinne der Context-Specifications von „Concerns“, also „Zuständigkeiten“. Das alles sind klare Hinweise, das die Spezifikation eines Verhaltens und deren Umsetzung als unzertrennliches Paar zu betrachten sind. Übrigens ist diese „Expressivität“ auch ein Grund, warum „BDD“ so gut geeignet ist für Einsteiger in TDD bzw. Test-First.</p>
<h3>Feels just like it should</h3>
<p>Wenn man mal eine gewisse Zeit per TDD/BDD entwickelt, dann fällt einem oft auf, dass man bei jeder Änderung mindestens zwei Dinge ändert. Man ändert oder erweitert die Tests und man ändert oder erweitert die Implementierung. Ein Verhalten, eine Zuständigkeit, doch zwei Perspektiven, zwei Änderungspunkte. </p>
<p>Das ist bei Far-Specs, (also getrennten Tests und Implementierung über Assembly-Boundaries) genauso wie auch bei Near-Specs (Tests &#038; Implementierung Seite-An-Seite). Doch bei Near-Specs ist es einfacher, schneller und intuitiver, Änderungen am System durchzuführen. Darüber hinaus wird das Streben nach „Vollständigkeit eines Verhaltens und deren Zuständigkeit“ gestärkt. Das wiederum zahlt auf Lesbarkeit, Wartbarkeit und Flexibilität ein.</p>
<p>Seit nun seit knapp 3 Monaten entwickle ich Unit Tests, TDD &#038; BDD ausschließlich per „Side-By-Side-Specifications. Diese „andere“ Art der Codeorganisation ist für mich äußerst angenehm und effektiv gleichermaßen. Für mich ist es ein stückweit näher dran am „TDD-Spirit“, dem test- bzw. spezifikationsgetriebenen designen und entwickeln von Software. Mit Tests &#038; Implementierung nebeneinander fühlt es sich so an, wie es eigentlich sein sollte. </p>
<p>Also: <a href="http://www.youtube.com/watch?v=9LCEsRno1cg">Feels just like it should</a> ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/unit-tests-sind-immer-dabei/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>To Whom It May Concern ?!?</title>
		<link>http://www.gmbsg.com/to-whom-it-may-concern/</link>
		<comments>http://www.gmbsg.com/to-whom-it-may-concern/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 23:16:33 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[MSBuild]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1144</guid>
		<description><![CDATA[Note: Diesen Artikel gibt es auch auf Deutsch
It’s been something like a week since Stefan asked a provoking question in his blog (german): „Where to put the Tests?” He wrote that he’s strictly separating tests from their implementation in separate ...]]></description>
			<content:encoded><![CDATA[<div style="background-color: #dedede;margin:2px;"><small>Note: <i>Diesen Artikel gibt es auch auf <a href="http://www.gmbsg.com/unit-tests-sind-immer-dabei/">Deutsch</a></i></small></div>
<p>It’s been something like a week since Stefan asked a provoking question in his blog (german): „<a href="http://www.lieser-online.de/blog/?p=235">Where to put the Tests?</a>” He wrote that he’s strictly separating tests from their implementation in separate projects. However, motivated by a statement of me, he gave the idea of having tests &#038; implementation in the same project a try. Wow, all code in one assembly. He as well as a punch of commentators on his blog came to the conclusion, that separating tests from implementation using separate projects is better. I argue the converse.</p>
<p>It’s simply <a href="http://www.gmbsg.com/auf-dem-eisberg/">old-fashioned style to separate tests &#038; implementation with separate projects</a>. I did separate my tests from implementation code for years. However, about half a year ago, I realized that this separation doesn’t help me much. Instead, it hinders my development process. Since then I keep tests &#038; implementation together in one project. They are located as near to each other as possible. Let’s name this “side-by-side” residency. In this post I want to show and explain the main reasons, consequences and experiences in favor of “side-by-side specifications” or “near specs”.</p>
<p>Well, first of all, I reduce the practice of „near specs” to unit tests only. Just as in classical sense of TDD. Integration tests and verification-driven tests are located in separate projects (thus being “far specs”), as usual. For me, putting tests and implementation altogether in one project makes sense in test-first approaches. That is, TDD testing or BDD specifications. Ergo: It’s about tests I use to drive my implementation. Tests, which I’m using to design and develop the desired functionality.</p>
<h3>The grip of behavior</h3>
<p>So, what’s the point then to put tests and implementation side-by-side? In my opinion there’s a quite naive, yet effective reason: You get grip of your tests. The tests are simply there. They’re where I need them; they’re there where I expect them. They are right there where the behavior is. Since I keep tests next to my implementation, I’m just better able to “put them in shape”. Means: I do refactorings a lot more effective and frequent. Naturally not only on SUT, but tests as well.</p>
<p>Generally speaking, it’s a kind of different, more efficient style of development to work with implementation &#038; tests right at hand. Coming back to projects after some time makes it a breeze. I just look and read the tests. Then, I navigate frequently between tests and implementation to understand the details. “Near specs” make it less painful and more pleasant to read the code. This is especially the case for tests where several dependencies / mocks exist. No jumps through projects, no loading of solutions here and there. Just reading, that’s it.</p>
<p>To put it candidly, it was hard at start. The number of test classes – or the amount of test code in general – is quite a lot compared to implementation code only. I had to get used to it somehow. From time to time, I had a strange feeling that my tests are distracting me. It was so unusual for me that I felt that my tests “messed up” my organization in my “production” project. It didn’t last long though. As I continued to keep my tests right where my implementation is, I more and more realized how cool and beneficiary it is to do so. Especially as I utilized this approach on a larger codebase. Since then, it’s clear for me: putting specifications/tests side-by-side rules!</p>
<p>Wait, the world’s not shining always. New questions arise with this new “colocation” of tests right where the implementation is. Probably the most often asked is how the release assemblies of such applications look like. Needless to say, it’s desirable to let release assemblies contain only what the customer actually needs: the functionality. However, with tests in same assembly, how would you achieve this?</p>
<h3>Reduce to the Max</h3>
<p>The solution is quite simple: If tests and implementation are no longer divided in design- or development-time, then the split-up needs to take place later on, at delivery-time! Simply put, the build needs to take care of this task. Since I’m used to use build scripts for my projects, it’s quite a common thing for me to adjust end enhance my scripts to filter out the test classes and test-related references. For my own tiny projects, I most often use powershell scripts. At larger contexts with CI and Buildsystems, a call to a cleanup extension is an obvious, handy task.</p>
<p>Back to Stefan’s post. As I read through comments, I thought to myself: Why do so many people write so much about it and judge this approach as “tricky” or “dirty” without obviously not having tried it once? I did give it a try and I’m feeling very fine with it. It’s neither difficult, not dirty at all. The contrary is the case. Now that I use „near specs“, my daily TDD and development life is more pleasant and effective than before. Building a filter for test-related artifacts is an easy task. In my scripts, I usually need about 10 lines for this. Moreover, it’s worth to keep in mind that filtering is “only” needed for release builds. No CI build whatsoever affected.</p>
<p>Once read through the whole thread, I just said to myself: „I even would build my build script test-first faster than reading all this”. As some of you know me as a <a href="http://twitter.com/ilkerde/status/18264412106">friend of empiric results and measurement</a>, it’s obvious that I needed to check if my statement really would turn out true. Just do it and see if it’s really that fast and easy. No sooner said than done! I pushed the <a href="http://github.com/ilkerde/funbench/tree/master/codekatas/fizzbuzz/fizzbuzz-sidebyside/">results to my github repository</a>. Brief summary: Even without test-framework and with my „limited“ powershell knowledge, I was able to build my test-artifact filtering in about the same amount of time I spent to read the blog. ;-)</p>
<h3>Separation of Concerns</h3>
<p>Another argument quite often rose against putting tests and implementation together is “Separation of Concerns” (SoC). “Partitioning tests and implementation in separate projects is following this principle”, it’s being said. Even good friends of mine, like <a href="http://twitter.com/tehlike">Tehlike</a> bring SoC onto the table against “near specs”. By the way, I specially write this article in <a href="http://twitter.com/tehlike/status/18223527988">English for Tehlike</a>, and therefore:</p>
<p><strong>Tehlike, yanılıyorsun! ;-)</strong><br />
<i>(In english: Tehlike, you are mistaken!)</i></p>
<p>Yes, I think that those are mistaken who think that SoC is a reason to split tests and implementation. From my perspective, the opposite is the case. SoC is – once considered to look at it carefully &#8211; even a reason to put tests and implementation side-by-side.</p>
<p>The essence of <a href="http://en.wikipedia.org/wiki/Separation_of_concerns">Separation of Concerns</a> is quite easy: diverse perspectives, say „concerns“, of a behavior of an object should be separated. „Concerns“, in context of domain modeling and system analysis, are aspects of behavior and functionality. Take the calculator example. The functionality of „addition“ of a calculator has different aspects. You need to enter the numbers through keys, the calculation unit needs to add the numbers, and the sum needs to be displayed. All concerns – better: different concerns – of one functionality. With respect to „Separation of Concerns“, those aspects need to be separated. In consequence, a component-oriented and reusable solution is fostered.</p>
<h3>Completeness of Concern</h3>
<p>So far, so good. But wait. For my understanding, Separation of Concerns means by implication, that a single concern should strive towards entirety. That is, one single concern ideally should aim completeness. „Isn’t this automatically the case?“ you might think. Mhh, not really, in my opinion. Most often, one concern is located on very diverse and unusual locations within a software development process.</p>
<p>Take the „classical“ software engineering scenario as an example. A behavior and its concern is described in requirements documentation. You can find different, mostly edgy details of the same concern in UML diagrams and Use Case documents. Of course, tests reflect the concern again. Well crafted, tests most likely specify the concern at its best. Naturally, the concern is in production code, implanted as final functionality of the system. And what’s the result now? Straight answer: The result is a mess. Most often, a developer finding himself in such a situation is faced with puzzle pieces everywhere – but not on the table. </p>
<p>Hence, for me it’s obvious that partitioning tests and implementation in separate projects is not helping me to strive towards „Completeness of Concern“. Moreover, splitting up tests an implementation is not related to Separation of Concerns. Both tests and implementation care about the same concern, that’s the simple truth.</p>
<p>BDD lovers in the wild will clap their hands. The abovementioned is more or less the same they proclaim over and over. They don’t talk about tests; they care about “specs”. They don’t talk about verification; they care about “behavior”. Yes, they even care about concerns, drivers and observations. Altogether, this is even for beginners quite a good hint towards a mindset, where tests and implementation build a chained, inseparable pair.</p>
<h3>Feels just like it should</h3>
<p>Let’s face it. Once developing a reasonable time in TDD/BDD style, you clearly realize one thing: Whenever you need to change or extend the system, you have at least two „changepoints“. First, you change tests. Right afterwards, you change your implementation. One single behavior, one single concern. But two perspectives, two edits. That’s the case for „far specs“ (that is, tests located in a separate project) as well as for “near specs” (that is, tests residing in the same project along with the implementation “side-by-side”).</p>
<p>The difference: With near specs, you change and develop the system faster, &#038; easier. It’s simply more efficient and intuitive. Near specs foster „Completeness of Concern“. This essentially contributes to better readability, maintainability and flexibility of the overall system.</p>
<p>It’s been more than 3 months now since I started to structure my unit tests strictly side-by-side along to my implementation. For me, this “different” style of code organization is absolutely pleasant and effective. Right now, I can’t think of switching back. In my opinion, putting tests and implementation as near as possible is in favor of the “TDD spirit”. With tests and implementation being at the same place, for me TDD now more and more “<a href="http://www.youtube.com/watch?v=9LCEsRno1cg">feels just like it should</a>” ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/to-whom-it-may-concern/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Auf dem Eisberg</title>
		<link>http://www.gmbsg.com/auf-dem-eisberg/</link>
		<comments>http://www.gmbsg.com/auf-dem-eisberg/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 14:47:20 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1118</guid>
		<description><![CDATA[Ich bin auf dem Eisberg. Ich bin alleine. Doch zunächst geht es hier nicht um mich, sondern um die „Community“.
In vielen Kommentaren und Blog-Posts wurde die jüngste Bewegung über .NET Coding Dojo’s als „für die Community nicht hilfreich“ tituliert. Jetzt, ...]]></description>
			<content:encoded><![CDATA[<p>Ich bin auf dem Eisberg. Ich bin alleine. Doch zunächst geht es hier nicht um mich, sondern um die „Community“.</p>
<p>In vielen Kommentaren und Blog-Posts wurde die jüngste Bewegung über .NET Coding Dojo’s als „für die Community nicht hilfreich“ tituliert. Jetzt, wo es zwei verschiedene „Stile“ von .NET Coding Dojo’s gäbe, sei auch noch ein entscheiden und ein „was ist nun besser“ hinzugekommen. Den Meinungen kann ich mich größtenteils anschließen. Doch ich möchte noch etwas hinzufügen: Das philosophische, frenetische, ja fast religiöse Reden und Ausarbeiten dieser „Stilunterscheidung“ zwischen Schwarm und Latifa ist mir doch deutlich zu krass und hat mich über die letzten Tage mehrheitlich nur dazu gebracht, beim Lesen der Meinungen immer wieder zu denken: „<a href="http://www.youtube.com/watch?v=xvk2eLbnh0c">Hääh, oder wie oder wat?</a>“</p>
<h3>Eine Bereicherung</h3>
<p>Insofern finde ich es ein schlechtes Signal und eine besorgniserregend überspannte Kommunikation, von „<a href="http://ralfw.blogspot.com/2010/06/zeig-mir-deinen-code-und-ich-nenn-dir.html">der Teilung der Dojo-Welt</a>“ oder der „Trennung der Community in zwei Lager“ zu sprechen. Das Gegenteil ist der Fall, die „Community“ wird bereichert. Sie wird bereichert um andere Sichtweisen, um andere Vorgehensweisen und andere Menschen – ganz unabhängig davon, ob die Bereicherung nun als gut oder schlecht zu bewerten ist.</p>
<p>Darüber hinaus ist es schlichtweg überzeichnet, wenn man sich so massiv mit der „Gestaltung von Coding Dojo’s“ auseinandersetzt und die „Stilrichtungen“ oder “Schulen“ miteinander in fast religiös ausufernder Manier differenziert. Coding Dojo’s sind bei weitem nicht das einzig wichtige für einen Software-Entwickler, zumindest für mich. Ich mache Coding Dojo’s aus Spaß &#8211; in meiner Freizeit. Andere machen es vielleicht aus einer anderen Motivation heraus. Aber das in letzter Zeit ist mir deutlich zu viel des Guten, wenn es überhaupt dem Attribut gutwillig genüge träge. Es gibt auch noch andere Dinge, also sollte man das ganze <a href="http://de.wikipedia.org/wiki/Tohuwabohu">Tohuwabohu</a> um die .NET Coding Dojo’s relativieren.</p>
<p>Ich bin mir durchaus bewußt, das die <a href="http://www.gmbsg.com/lerne-lehre-ilker-net-coding-dojo-latifa-stil/">Erhebung meines „Latifa“-Stils</a> ein Treiber in dieser Entwicklung war, wenn auch nicht der einzige. Jedoch war es nicht meine Motivation, irgendwelche „Lagerschaften“ zu erarbeiten. Nein, vielmehr ist diese Formalisierung der Regeln aus der Erfahrung des Coding Dojo’s bei den dotnetpro.powerdays entstanden. Meine Wahrnehmungen waren nämlich deutliche Divergenzen zwischen dem Verhalten einzelner Teilnehmer und den als „Latifa“ titulierten Werten.</p>
<h3>Latifa ist tot, es lebe Latifa</h3>
<p>Ich denke auch, dass die Werte-Prinzipien sowie auch andere Prinzipien, auf die ich hier nicht näher eingehen werde, nicht als spezifisch für ein Coding Dojo reduziert werden können. Ich denke, die „Latifa-Werte“ sind über ein Coding Dojo hinaus auch im täglichen Miteinander und Arbeiten beachtenswert. Deswegen – und wegen der für mich zu konterkarierenden Darstellung der Stilisierung von Dojos – werde ich die Latifa-Werte nicht mehr ausschließlich im Kontext von Coding Dojo’s anwenden. Es gibt kein „Latifa-Coding-Dojo“ mehr. Weil für mich diese Werte &#038; Prinzipien nicht nur für Coding Dojo’s gelten, sondern in meiner Welt Anspruch auf Allgemeingültigkeit erheben.</p>
<h3>Schwarm drüber?</h3>
<p>Also, alles wieder gut, alles wieder lustig und soz. „<a href="http://ralfw.blogspot.com/2010/06/kollektiv-intelligent-codieren.html">Schwarm</a> drüber“? Nein, ist meine klare Antwort. Jedenfalls nein für mich. Es ist ja auch meine Perspektive, die ich hier schildere. Ich habe für mich erkennen und lernen dürfen, dass ich offensichtlich eine eingeschränktere Menge an Gemeinsamkeiten mit Meinungen, Verfahrensweisen, und Prinzipien anderer habe. Besonders ist mir aufgefallen, dass ich &#8211; für mein eigenes Bedauern &#8211; mit <a href="http://ralfw.blogspot.com/">Ralf</a> und <a href="http://www.lieser-online.de/blog/">Stefan</a> weniger Gemeinsamkeiten habe als ich zunächst vermutete. </p>
<p>Ich habe den Eindruck, dass meine Ansichten &#038; Werte sich von den Werten &#038; Prinzipien von Ralf &#038; Stefan auf fachlicher Ebene deutlich unterscheiden. Meine Wahrnehmung ist weiterhin, dass die Unterschiede zwischen mir und Ralf/Stefan auf persönlicher Ebene noch deutlicher sind. Für mein Empfinden ist für diese Relation der Begriff des „<a href="http://de.wikipedia.org/wiki/Diametral">diametralen entgegen stehens</a>“ durchaus treffend.</p>
<h3>Das .NET Coding Dojo für „Profi’s“ ist Schwarm ?!?</h3>
<p>Ein Beispiel dafür ist für mein Empfinden die Zielsetzung bei Coding Dojo’s. Ich mache Coding Dojo’s in meiner Freizeit und ich möchte in meiner Freizeit Spaß haben. Das ist für mich soetwas wie ein Primärziel. Diesen Eindruck habe ich von der Zielsetzung von Ralf nicht. Für mich stellt sich die Zielsetzung von Ralf als zielorientiert und leistungsorientiert dar. Bei Ralf geht aus meiner Sicht deutlich mehr um „professionelles Lernen“.</p>
<p>Ein weiteres Indiz ist sicherlich die unterschiedliche Betrachtungsweise von „professioneller &#038; moderner Softwareentwicklung“. Für mein Empfinden genügen doch eine ganze Menge an Ansichten und „Lehren“ von Ralf &#038; Stefan nicht mehr meinem Anspruch der professionellen &#038; modernen Softwareentwicklung. </p>
<p>Das fängt für mich schon bei unnötigem <a href="http://ralfw.blogspot.com/2010/06/zeig-mir-deinen-code-und-ich-nenn-dir.html">Sauberkeitsfetisch wie dem Trennen von Tests und Produktionscode in verschiedene Projekte</a> an. Das ist für mich ja schon fast wie jeden Tag das Auto durch die Waschanlage zu fahren. Zum Einen, weil der Code ein kleines Code Kata im Coding Dojo ist und keine Mission-Critical-Anwendung. Zum Anderen, weil es schlichtweg nicht mehr zeitgemäß ist, Tests vom SUT zu trennen. Je näher sie zueinander stehen, um so besser. </p>
<h3>Frankreich wird Fußballweltmeister</h3>
<p>Ich könnte jetzt weitermachen und „weiterwettern“, z.B. das für mein Dafürhalten das von Ralf &#038; Stefan transportierte „TDD“ mit der Anleitung des „vorher die Lösung auf Papier erfassen“ und dann „gestärkt und mit klarem Kopf Tests programmieren“ so viel mit TDD zu tun hat wie Frankreich mit der Fussballweltmeisterschaft <i>(Anmerkung des Autors für den &#8220;ernsthaften&#8221; Leser: Das war ein kleiner übertriebener Witz am Rand. Bitte schmunzeln, Danke.)</i></p>
<p>Doch ich werde dieser Versuchung widerstehen, denn ich habe für mich erkannt, dass es eben verschiedene Ebenen und subjektive Wahrnehmungen von professioneller &#038; moderner Software-Entwicklung gibt. Ich hatte schon im meinem Artikel über „<a href="http://www.gmbsg.com/lerne-lehre-ilker-net-coding-dojo-latifa-stil/">mein .NET Coding Dojo</a>“ (ergo: meine Perspektive eines Coding Dojo’s) schon angedeutet, dass ich mich gerade mit dem Thema <a href="http://www.gmbsg.com/tdd-ist-keine-wissenschaft/">TDD</a> &#038; Planung noch deutlich sowie ausführlich äußern möchte und werde. Zurück zur Professionalität &#038; Modernität.</p>
<p>Meine Wahrnehmung der unterschiedlichen Grade und Auffassungen von fachlicher sowie persönlicher Professionalität &#038; Modernität zwischen dem nun nicht mehr vorhandenen „Latifa-Dojo“ und dem „Schwarm-Dojo“ ist es auch, die mich dazu veranlasst, ab heute auch bestimmte Begriffe bei meiner Kommunikation mit .NET Coding Dojo’s explizit auszuschließen. Dazu zählen „Lerne &#038; Lehre“, „Professionell“ &#038; „Modern“.</p>
<p>Das heisst nun keineswegs, dass es keine Coding Dojo’s gibt, die moderne &#038; professionelle Software-Entwicklung fokussieren. Das heisst vielmehr, dass ich mir moderne &#038; professionelle Methoden bei einem Coding Dojo wünsche, aber sie eben nicht bei allen erfüllt werden.</p>
<h3>Fun as fun in fun</h3>
<p>Abschließend kann ich für mich als folgendes Fazit ziehen: Ich werde weiter .NET Coding Dojo’s besuchen. Vor allem, weil sie mir Spass machen. Wenn sie mir keinen Spass mehr machen, dann werde ich sie auch nicht mehr besuchen. Der Spass steht bei mir im Vordergrund, denn es ist für mich eine Freizeitaktivität. Diese Freizeitaktivität hat mir viele Erkenntnisse beschert. Und das ist gut so.</p>
<p>Aber ich werde mich auch von Coding Dojo’s distanzieren, die dieses Primärziel für mein Dafürhalten nicht erfüllen. Dazu zählt für mich das „Schwarm-Dojo“. Es mag andere Meinungen dazu geben und auch andere Entwickler, die eben mehr Wert auf andere Komponenten legen. Für diese mag viellecht auch ein „Stil“ wie der Schwarm-Dojo schön, gut, frisch und fröhlich sein. Gut. Für mich ist es eben nicht so.</p>
<p>Selbst wenn die inhaltliche Substanz eines Schwarm-Dojo’s für mich attraktiv wäre (was sie für mich nicht ist), ja selbst dann würde ich mich auf Grund der momentan für mein Empfinden zu großen persönlichen Diskrepanz zu Ralf &#038; Stefan mit großer Wahrscheinlichkeit nicht dazu motivieren können, ein Dojo mit Ralf &#038; Stefan zu besuchen.</p>
<h3>Auf dem Eisberg</h3>
<p>Ich werde weiter auf dem Eisberg sein. Wenn meine Werte, meine Prinzipien und meine Arbeitsweise mein Eisberg sind, dann bleibt mein Name ist zwar Ilker, aber <a href="http://www.youtube.com/watch?v=qU4I00s25ho">auf dem Eisberg bin ich so ähnlich wie Kalle.</a> :-) Na juuud juuuud juuud juuud juuud&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/auf-dem-eisberg/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Lerne &amp; Lehre: Ilker&#8217;s .NET Coding Dojo</title>
		<link>http://www.gmbsg.com/lerne-lehre-ilker-net-coding-dojo-latifa-stil/</link>
		<comments>http://www.gmbsg.com/lerne-lehre-ilker-net-coding-dojo-latifa-stil/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 16:15:50 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[ATDD]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Latifa]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1089</guid>
		<description><![CDATA[Das letzte Münchener Coding-Dojo war schon ein ganz besonderes. Wir, die Münchener Dojo-Crew waren zu Gast beim dotnetpro.powerday und waren überrascht, dass uns der Veranstalter vor dem Coding Dojo sogar noch Snacks &#038; Getränke gestellt hat. Einfach nur Toll! Meinen ...]]></description>
			<content:encoded><![CDATA[<p>Das letzte Münchener Coding-Dojo war schon ein ganz besonderes. Wir, die Münchener Dojo-Crew waren zu Gast beim dotnetpro.powerday und waren überrascht, dass uns der Veranstalter vor dem Coding Dojo sogar noch Snacks &#038; Getränke gestellt hat. Einfach nur Toll! Meinen herzlichen Dank an <a href="https://www.xing.com/profile/Florian_Bender2">Florian Bender</a> und den <a href="http://www.dotnetpro-powerday.de/">dotnetpro.powerday</a>!</p>
<p>Doch nicht nur die Location war ganz besonders, sondern auch <a href="http://twitter.com/sforkmann/status/16759769373">das &#8220;Line-up&#8221; der Teilnehmer</a>. Es hatten sich mehr als <a href="https://www.xing.com/events/net-coding-dojo-empowered-508914">20 Teilnehmer für das Dojo auf der Xing-Gruppe angemeldet</a> – und es gab „on top“ noch ein gutes Dutzend Interessierter, die nach einem ganzen Tag geballter C#-Wissensvermittlung noch „Power“ genug hatten, beim Dojo dabei zu sein.</p>
<p>19:00 Uhr – es geht los, das Dojo wurde von mir mit einleitenden Worten eröffnet. Ich habe für die Neulinge in der Runde noch kurz die „Rahmenbedingungen“ abgesteckt: Lösen eines Code Kata per TDD, aktiv und gemeinsam. Alle coden, einer tippt (wir waren wieder im <a href="http://en.wiktionary.org/wiki/prepari">Prepari</a>-Modus). Es gibt kein Falsch und kein Richtig, es gibt keine dummen Fragen und keine dummen Antworten. So einfach ist das.</p>
<p>Ich habe dann auf Grund der großen Teilnehmerzahl den Vorschlag der Gruppenbildung unterbreitet und zur Abstimmung vorgelegt. Wir haben uns gemeinsam für eine große Gruppe statt zwei kleiner Gruppen entschieden.</p>
<p>Danach ging es auch schon zur Vorstellung der Kata’s: Ich hatte mit Pete gemeinsam eine Vorschlagsliste erarbeitet: KataTennis, KataRomanCalculator und KataBankOCR. Ein seltenes, aber schönes Erlebnis waren diesmal die Alternativ-Vorschläge der Teilnehmer, darunter Sudoku oder FizzBuzz. Nach einer kurzen Abstimmungsrunde war es soweit: <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataBankOCR">KataBankOCR</a> wurde gewählt. </p>
<h3>Wie wird morgen das Wetter?</h3>
<p>Die übliche „Anforderungsrunde“ wurde damit eingeleutet. Ich habe das Kata näher vorgestellt und nach offenen Fragen abgefragt. In dieser Phase haben wir uns auf besondere Dinge wie z.B. Zeilenhöhe und Ziffernabstand geeinigt und die Anforderungen klarer umrissen. Nach ca. 15 Minuten war es dann soweit, auf meine Frage „Noch offene Fragen?“ gab es nur noch die Gegenfrage „Wie wird morgen das Wetter?“. Damit war die Anforderungsrunde abgeschlossen.</p>
<p>Es konnte also losgehen. Aber wie legt man jetzt denn los? Das war die nächste Frage. Pete hatte Visual Studio schon offen, das Projekt war angelegt, das Test-Framework eingebunden. Die Tools waren bereit. Doch waren es die Teilnehmer auch? Eine geteilte Stimmung machte sich breit. Während die einen am Grübeln über den ersten Test waren, waren die anderen mit der Vorgehensweise nicht einverstanden und wollten erst mal „generell eine Architektur herausarbeiten“. Auch hier half die Abstimmung weiter. Mit äußerst knapper Mehrheit ließ man sich auf die Erarbeitung des ersten Tests ein, ohne eine „Lösungsanalyse“ im klassischen Sinne gemacht zu haben.</p>
<h3>Test schreiben heisst nachdenken</h3>
<p>Das herausarbeiten des ersten Tests war garnicht so einfach wie es viele vielleicht vermutet hatten. Es gab Diskussionen über die Datenstruktur (<code>string</code> vs. <code>List&lt;string&gt;</code> vs. <code>IEnumerable&lt;string&gt;</code>) und wir taten uns schwer, einen richtigen Namen für unseren Test zu finden. Doch nach knapp 10 Min. hatten wir endlich den ersten Test, der das „Digit 0“ testet, rot. Und schon ging es an die Implementierung: „return 0;“! Ach, wie schön, das erste Erfolgserlebnis ist da!</p>
<p>Das motiviert schon gleich zum nächsten Test, der Erkennung von „Digit 1“. Schnell wurde der Test geschrieben und dann ging es wieder an die Implementierung. Diesmal war es natürlich schon schwerer, denn schließlich musste jetzt erkannt werden. Aber jetzt fingen auch die Neulinge an, aktiv an der Lösung zu arbeiten und brachten Vorschläge und Kommandos in die Runde ein. Es dauerte nicht lange, und man hatte mit einem einfachen String-Vergleich die Implementierung fertig.</p>
<h3>Red-Green-Maybe&lt;Refactor&gt; ?</h3>
<p>Doch irgendwie war man nicht ganz mit dem Ergebnis zufrieden, denn der Ruf nach Refactoring wurde lauter. <a href="http://www.des-eisbaeren-blog.de/">Golo</a> mahnte an: „Es heisst Red-Green-Refactor und nicht Red-Green-Vielleicht-Refactor“. Sein Standpunkt: wenn man Refactoring nicht „im Kleinen“ und von Anfang an betreiben würde, dann würde der Aufschub noch mehr Probleme schaffen.</p>
<p>Andere wiederum sahen das nicht „so steif“, sondern beriefen sich auf den berühmten „Smell“. D.h. wenn eine Implementierung offensichtlich „Bereinigung verlangt“ um die Funktionalität weiter vorantreiben zu können, dann werde refaktorisiert. Auch hier die Abstimmung. Auch hier ein ganz knappes Ergebnis für den Aufschub des Refactorings.</p>
<h3>Gibt es ein ABS beim TDD ?</h3>
<p>Also ging es weiter zum nächsten Test, der im Übrigen wieder von einem Neuling angeregt wurde. Was tun mit „Leerstellen“? Also wie kann man überprüfen, dass *keine* Ziffer an einer Stelle des „virtuellen Displays“ dargestellt wird. Raunen machte sich breit beim erarbeiten des Tests. Einige Stimmen waren für „einfach 0 zurückliefern“ („Vollgas“ weiter machen), andere wiederum wollten den Test nicht machen stellten den derzeitigen Lösungsansatz in Frage („Vollbremsung“). </p>
<p>Eine kleine Randgruppe wollte den Test durchführen, aber den Target (also die zu testende Methode) wechseln ( „Ausweichen“). An dieser Stelle gingen die Meinungen und Ansichten wieder auseinander. Eine etwas heftigere Diskussion wurde entfacht, doch leider konnte Sie nicht weitergeführt werden, denn unsere „Dojo-Zeit“, die wir uns als Timebox festgelegt hatten, war abgelaufen. Doch die Frage war im Raum und verlangt natürlich auch nach einer Antwort: Gibt es ein &#8220;ABS&#8221; (Anti-Blockier-System) beim TDD?</p>
<h3>Die Moral von der Geschichte&#8230;</h3>
<p>Die abschließende Retrospektive war wie immer sehr aufschlußreich und gab einen bunten Mix an Feedback zurück. Unter anderem wurde die TDD Vorgehensweise gelobt und kritisiert, die Gruppengröße bemängelt, das Ergebnis sowohl als „sehr gut“ und „sehr schlecht“ attributisiert, die „Planlosigkeit“ kritisch betrachtet, das vernachlässigte Refactoring angemahnt. Alles in allem jedoch, war es für jeden erkenntnisreich, denke ich.</p>
<p>Doch ganz besonders war dieses Dojo eine Lehre für mich. Ich konnte in diesem Dojo wieder vieles Lernen. Ich lernte z.B. dass „Neulinge“ sehr wertvoll für eine Gemeinschaft sein können, weil sie unvoreingenommen, ja man mag fast sogar sagen „positiv naiv“ auf Dinge blicken. Das ist nicht nur frisch, sondern auch konstruktiv. Dazu gab es noch eine Reihe weiterer Erkenntnisse, die mich zum Nachdenken gebracht haben. Ich will hier auch auf diese Erkenntnisse und die Konsequenzen daraus eingehen.</p>
<h3>Die einfachste Lösung gewinnt</h3>
<p>Da wäre zum Beispiel die immer wieder aufkeimende Diskussion in Coding Dojo’s, ob man nun nach der Anforderungsanalyse über einen generellen Lösungsweg nachdenken sollte (Knobler) oder „einfach“ sich auf den Code stürzen sollte (Coder). Ich habe zu diesem Thema einen besonderen persönlichen Standpunkt, den ich noch in einem gesonderten Artikel im Detail niederschreiben werde – hier würde solch ein Exkurs den Rahmen deutlich sprengen.</p>
<p>Fakt ist, dass wenn eine <a href="http://twitter.com/sforkmann/status/16834230537">solche Diskussion im Dojo auftaucht</a>, diese Diskussion auch geführt werden muss. Hier zählt der Erfahrungsaustausch, hier zählt der Lernwille, der das führen der Diskussion bedingend macht. Generell ist es natürlich so, dass beim Coding Dojo „Test-First“ entwickelt wird. Ob das per TDD, BDD oder ATDD geschieht, sei erstmal dahingestellt. „Test-First“ ist im Sinne der agilen Methoden, besonders aber im engeren Sinne XP wörtlich zu verstehen. Um den TDD-Neulingen oder TDD-Zweiflern das etwas näher zu bringen, zitiere ich <a href="http://www.amazon.de/Software-Development-Principles-Patterns-Practices/dp/0135974445">Uncle Bob</a>:</p>
<blockquote><p>
&#8220;The act of writing a unit test is more an act of design than of verification. It is also more an act of documentation than of verification. The act of writing a unit test closes a remarkable number of feedback loops, the least of which is the one pertaining to verification of function.&#8221;
</p></blockquote>
<p>Also ganz klar: Nein, es soll beim Coding Dojo keine „gesamte Lösung“ erarbeitet werden, bevor man das programmieren anfängt. Sondern: Ja, beim Coding Dojo wird nach klarer Anforderungsanalyse sofort der erste Test in Angriff genommen. Dazu muss man natürlich auch nachdenken. Keiner wird daran gehindert, sich für diesen Test (und manchmal sogar den nächsten) eine Strategie zu überlegen. Es ist eher so, dass man sich gegenseitig zu einer klaren Testdefinition motiviert. </p>
<h3>Chief Operating Development Engineer Lead Executive Senior Sensei</h3>
<p>Darüber hinaus gab es in diesem (sowie auch in den vorangegangenen) Dojo vermehrt Stimmen, die eine “Führungsrolle”, eine “bewertende und entscheidende Instanz“, einen „Chefentwickler“ oder ähnliches eingefordert haben. Auch hierzu gibt es für das Coding Dojo eine klare Vorgabe. So gibt es beim Coding Dojo z.B. verschiedene Formate, wie das Prepari oder Randori oder andere. Ich möchte hier nur kurz anmerken, dass ich in einem separaten Artikel auch auf diese <a href="http://www.altnetberlin.de/Termine/coding-dojo">verschiedenen Verfahren und Modi</a> in Dojo’s eingehen werde. Für&#8217;s erste soll es reichen, dass es verschiedene Arten gibt.</p>
<p>Je nach Format gibt es auch verschiedene Rollen. In den Münchener Dojo’s haben wir oft – wie auch dieses Mal &#8211; das einfachste Format gewählt: Prepari. In diesem Format gibt es 3 Rollen: den „Hacker“ (von mir öfter flapsig als „CodeMonkey“ bezeichnet), den „Operator“ (der Organisator und Moderator, manchmal etwas irreführend auch „Leiter“ des Dojo’s) und natürlich die „Contributor“, die aktiven Teilnehmer des Dojo’s.</p>
<p>Im Prepari-Format (sowie auch in allen anderen) gibt es keine CODELESS-Rolle. Es gibt also beim Coding-Dojo niemanden, der die Rolle des „CODELESS“ einnimmt. Das Gegenteil ist der Fall: es wird explizit beim Coding Dojo eine CODELESS-Rolle vermieden. Und für diejenigen, die die Rolle nicht kennen:</p>
<blockquote><p>
Definition:<br />
<strong>CODELESS</strong> = “<b>C</b>hief <b>O</b>perating <b>D</b>evelopment <b>E</b>ngineer <b>L</b>ead <b>E</b>xecutive <b>S</b>enior <b>S</b>ensei”</p>
<p>Im Coding-Dojo die “Anti-Rolle” der führenden, leitenden, entscheidenen Person(en). Kann von einer oder mehreren Personen erfüllt werden. Sobald die Gefahr für so eine Rolleneinnahme besteht (ein „Smell“ sozusagen), darf (und soll) jeder zur Vermeidung der Rolle folgenden Satz sagen:</p>
<p>„We don’t want (to) CODELESS, we want (to) code more !“
</p></blockquote>
<p>Sobald also die Rolle eingenommen wird, sind alle anderen dazu verpflichtet, die Rolle der oder den Personen wieder zu entziehen. Im Coding Dojo gilt das Prinzip der Gleichstellung. Alle Meinungen haben per se den gleichen Wert. Die Auswertung der Meinungen geschieht gemeinsam. Entscheidungen werden gemeinsam getroffen. Diskussionen werden gemeinsam gestartet und gemeinsam beendet. Keiner darf sich besser stellen, keiner soll sich schlechter stellen.</p>
<h3>Rei</h3>
<p>Jeder ist in dieser „Coding Dojo“-Gemeinschaft nun gleichgestellt – ein schönes Recht. Doch gibt es auch Pflichten für die Teilnehmer? Oft werde ich nach „Voraussetzungen“ für die Teilnahme des Dojo’s gefragt. Ich antwortete auf diese Frage meist mit folgenden Sätzen:</p>
<p>„Nicht viel. Interesse, Wissbegierde, Neugier für .NET und moderne, professionelle Software-Entwicklungs-Methoden. Aktive Teilnahme &#038; Beitrag zur Lösung der gestellten Programmieraufgabe.“</p>
<p>Das hat den meisten Fragestellern ausgereicht, um sich ein Bild machen zu können. Aber dennoch haben wir immer wieder Probleme mit dem Selbstverständnis der Teilnahme am Dojo. Ich denke, dass es dafür mehrere Gründe gibt. Manche denken, ein Dojo sei so „informell“, dass es keine Regeln gäbe. Andere wiederum vergleichen es mit anderen Formaten, wie z.B. einem Workshop, Vortrag oder Fishbowl. Um diesen „Interpretationen“ etwas mehr Linie und Substanz zu geben, stelle ich die Teilnahme-Voraussetzungen auf eine etwas formalere Ebene. Die folgenden Regeln sind Grundregeln (<a href="http://de.wikipedia.org/wiki/Rei">Rei</a> bzw. <a href="http://de.wikipedia.org/wiki/Reishiki">Reishiki</a>), die für die Teilnahme an einem Coding Dojo bedingend sind:</p>
<blockquote><p>
<strong>§1 &#8211; Aktivität</strong><br />
Der ehrliche Wille, einen aktiven, fokussierten Beitrag zum „Lernen &#038; Lehren“ zu leisten.
</p></blockquote>
<p>Es gibt beim Coding Dojo niemanden, der sich nicht einbringen darf. Das hört sich ein wenig nach „zur Aktivität gezwungen sein“ an. Und ganz offen: Ja, so ist es auch. Mitdenken, Mitwirken, Mitreden – das ist eine Pflicht für den Teilnehmer im Coding Dojo. Dennoch gibt es natürlich „Interessierte“, die sich „das Mal anschauen“ möchten. Das war bisher immer möglich und das wird es auch weiterhin. Aber: es darf nicht zur Gewohnheit werden. Deswegen folgende Regelzusätze: </p>
<ul>
<li>Falls jemand „Spectator“ sein möchte, muss er es bei Dojo-Beginn allen mitteilen. Zuschauer haben keine Pflichten, aber auch keine Rechte. Im Gegensatz zu den Teilnehmern dürfen sie keinen Beitrag leisten, sondern nur „beobachten“. Sie werden auch vom Abstimmungs- und Feedback-Recht befreit.</li>
<li>Eine Person darf nur einige Male – sagen wir mal bis zu dreimal – „Spectator“ sein. Spätestens beim 4. Dojo-Besuch muss er aktiv werden. Sollte er es weiterhin nicht wollen, muss er alle Teilnehmer um Beobachtungserlaubnis bitten. Bei Erlaubnis bleibt er „Spectator“, bei Verweigerung muss er das Dojo verlassen.</li>
</ul>
<blockquote><p>
<strong>§2 &#8211; Respekt</strong><br />
Der ehrliche Wille, sein Gegenüber anzunehmen wie er ist.
</p></blockquote>
<p>Sie oder ihn, seine Haltung, seine Meinung und sein Wissen zu würdigen um damit das „Lernen &#038; Lehren“ zu stärken. Einher geht dabei auch Höflichkeit bei Kommunikation und Kollaboration. Adequate Wortwahl, konstruktive Beiträge und kultivierte Gemeinsamkeit sind die Pflicht jedes Dojo-Teilnehmers. Um dies zu Gewährleisten, gelten folgende Regelzusätze:</p>
<ul>
<li>Jeder einzelne Teilnehmer ist verpflichtet, andere auf mögliche Respektsverletzungen hinzuweisen. Er kann sich jederzeit dem „Operator“ zuwenden. Es obliegt dann der gesamten Dojo-Gruppe, sich gemeinsam zu besinnen. Das kann durch auflockernde Übungen, eine kurze Pause oder andere Besinnungstechniken geschehen.</li>
<li>Bei einer offensichtlichen Respektsverletzung, ob willentlich oder nicht, wird das Dojo sofort abgebrochen. Es gibt keine Retrospektive, keine Diskussion. Die Beteiligten an der Respektsverletzung werden durch die anderen Teilnehmer oder den Operator auf Ihr Fehlverhalten höflich und respektvoll hingewiesen und dazu aufgefordert, Ihr Verhalten zu reflektieren und eine Lösung zu erarbeiten. Das Dojo wird nach Abbruch nicht wieder begonnen. Alle Teilnehmer verlassen das Dojo.</li>
</ul>
<blockquote><p>
<strong>§3 &#8211; Optimismus</strong><br />
Der ehrliche Wille, mit Freude und positiver Einstellung zum „Lernen &#038; Lehren“ beizutragen.
</p></blockquote>
<p>Die positive, offene Grundhaltung eines jeden Teilnehmers ist bedingend für eine gute Unterstützung des „Lernen &#038; Lehren“. So ist es für jeden Dojo-Teilnehmer eine Freude, dabei zu sein und die anderen bei sich zu haben. Sollte „mal einer einen schlechten Tag haben“ ist es nicht so schlimm. Aber man sollte auch im Sinne des Dojo’s offen zu sich selbst sein. Ist die Laune im Keller, so macht es für einen selbst nicht viel Sinn – und damit für die Gemeinschaft auch nicht. Niemand im Dojo nimmt es Übel, wenn man mal „keine Lust“ hat, dabei zu sein. Um die positive Einstellung im Dojo zu unterstützen, gelten folgende Regelzusätze:</p>
<ul>
<li>Ein Lächeln ist der Botschafter der Optimismus. Jeder Teilnehmer ist dazu aufgefordert, seine positive Grundhaltung auszudrücken. Manche Lächeln, manche machen kleine Witze, manche suchen Nähe und das Zwischengespräch. Trotz aller Aktivität und Fokus, die man beim Dojo hat (siehe „Regel 1“), ist Optimismus eine Voraussetzung, der man auch als Teilnehmer nachkommen soll.</li>
<li>Stellt ein Teilnehmer für sich fest, nicht mehr positiv Beitragen zu können, sollte er aus freien Zügen – auch ohne Angaben jedweglicher Gründe, wenn nötig – das Dojo verlassen dürfen. Denken andere Teilnehmer, dass jemand in der Gemeinschaft keine positive Grundhaltung mitbringt, sind sie dazu aufgefordert, demjenigen mit ermutigenden und positiven Worten ihre Wahrnehmung mitzuteilen. Das kann persönlich in der Pause geschehen, oder aber indirekt durch Beteiligung des Operators.</li>
</ul>
<blockquote><p>
<strong>§4 &#8211; Zwanglos</strong><br />
Der ehrliche Wille, freiwillig, ohne Druck, Wettbewerb oder Leistungsziel das „Lernen &#038; Lehren“ zu verfolgen.
</p></blockquote>
<p>Diese Regel ist besonders wichtig, denn sie nimmt jeglichen Druck von allen. Keiner ist dazu verpflichtet, eine Sache „richtig“ oder „fertig“ zu machen. Niemand zwingt die Teilnehmer, sich an eine bestimmte Technologie, Meinung oder Vorgehensweise zu richten. Wenn überhaupt, dann sind es die Teilnehmer, die selbstbestimmt, freiwillig und gemeinsam sich selbst Verbindlichkeiten zusprechen. Um dies im adequaten Rahmen zu gewährleisten, gelten folgende Regelzusätze:</p>
<ul>
<li>Es gibt keine Leistungsziele und keine Leistungsmessung. Weder von Einzelnen, noch von der Gemeinschaft. Ausschließlich Bewertung im Sinne des Feedbacks und des Meinungsaustausches sind für die Teilnehmer möglich. Teilnehmer mit Leistungsanspruch sind von den anderen Teilnehmern von diesem Anspruch freizustellen.</li>
<li>Selbstbestimmt heisst nicht selbstautoritär. Trotz der Zwanglosigkeit gelten für jeden Teilnehmer die Grundsatzregeln, die Grundsatzvorgehensweise sowie die Regel des kollektiven Entscheids. So ist es verpflichtend und selbstverständlich, wenn ein Teilnehmer einer anderen Auffasung ist die Mehrheit der Teilnehmer, dass dieser sich der kollektiven Meinung beugt bzw. nach dem gemeinsamen Entschluß zu richten hat. Ist die eigenee Meinung mit der gemeinschaftlichen Meinung fundamental nicht vereinbar, so bleibt es jedem frei, das Dojo zu verlassen.</li>
</ul>
<p>Diese oben genannten vier Grundregeln sind für mich essentielle Voraussetzungen für die Teilnahme an einem Dojo. Oftmals ist es garnicht so schwer, diesen Bedingungen gerecht zu werden, doch wir durften in der Vergangenheit auch erleben, wie sich der eine oder andere Teilnehmer mit diesen Werten schwer tat.</p>
<h3>Make it simple</h3>
<p>Es gibt noch vieles mehr, das ich über das Coding Dojo, die Regeln und Werte des Coding Dojo und auch die Dynamik und Magie des Coding Dojo schreiben könnte, und ich werde es wohl nach und nach auch tun. Doch bei all diesen Hintergrundinformationen und den eben etwas formaler beschriebenen Regeln gilt es den Grundsatz der Einfachheit zu wahren. Solange es nicht wirklich notwendig ist, wird es keinen weiteren „Ballast“ oder „Verkomplizierung“ der Sache geben. Weder mit weiteren Formalismen oder irgendwelchen Hierarchien, unnötigen Gedankenwindungen oder theoretischen Methodenspielchen. Das gilt für Software, das gilt für TDD, das gilt für gemeinschaftliches Arbeiten, also gilt es auch für das Coding Dojo. Frei nach Albert Einstein:</p>
<blockquote><p>
„<strong>Make it simple, but not simpler</strong>“. </p>
<p><small>Für die Interessierten sei noch das <a href="http://en.wikiquote.org/wiki/Albert_Einstein">Original-Zitat</a> erwähnt:<br />
&#8220;It can scarcely be denied that the supreme goal of all theory is to make the irreducible basic elements as simple and as few as possible without having to surrender the adequate representation of a single datum of experience.&#8221;<br />
</small>
</p></blockquote>
<h3>Ich, der Ilker</h3>
<p>Nach diesem regelrechten Aufsatz an Regeln und Bestimmungen gibt es einen weiteren wichtigen Punkt, der unbedingt erwähnt werden muss. Alle die o.g. Regeln beziehen sich auf meinen Eindruck, meine Meinung und meine Anschauung. Es ist also „Ilker’s Coding Dojo“, welches sich diesen Rechten und Pflichten unterwirft. </p>
<p>Warum erwähne ich das? Ganz einfach, weil jeder auf dieser Welt das gute Recht hat, Coding Dojo’s zu machen. Jeder hat so gar das gute Recht, Coding Dojo’s so zu machen, wie er sich das vorstellt. Das ist auch gut so, denn Diversität ist ein wichtiger Faktor für Fortschritt. Aber es birgt auch Potenzial für Missverständnis und Verkennung. Der eine macht Coding Dojo’s mit dem Streben nach Kampf und Perfektion. Ein weiterer macht Coding Dojo’s um neue Sprachen zu erleben und zu erforschen. Ein anderer macht Coding Dojo’s, um anderen zu zeigen, wie man was macht und die Richtung vorzugeben. Aber ich mache Coding Dojo’s nicht (nur) deswegen. Meine Motivation ist das Motto, welches ich immer wieder versuche zu transportieren: „<strong>Lerne &#038; Lehre</strong>“. </p>
<p>Bei „meinem“ Coding Dojo steht der lockere Erfahrungsaustausch im Vordergrund, gebunden durch eine konkrete, kleine, realisierbare Aufgabe. Doch es geht nicht um einen netten Plausch oder Brainstorming, sondern um <a href="http://de.wikipedia.org/wiki/Lernen">Lernen</a> und <a href="http://de.wikipedia.org/wiki/Lehren">Lehren</a>. Wer nicht genau weiß, wie herausfordernd und anspruchsvoll diese beiden Disziplinen sind, dem rate ich, sich damit ein wenig auseinanderzusetzen.</p>
<p>Weiterhin mache ich Coding Dojo’s aus freien Stücken, weil es mir Spaß macht und ich weiter Spaß damit haben möchte. Ich mache es, weil ich eine tiefe, feste Überzeugung habe, dass jeder von anderen lernen kann und jeder den anderen lehren kann.</p>
<p>Ich respektiere diejenigen, die Coding Dojo’s „anders“ sehen, die etwas anderes darunter verstehen oder es anders kennen. Wie gesagt, jedem steht es frei, selbst Coding Dojo’s zu machen und sie so zu machen, wie er es für richtig hält. Ich habe die „Coding Dojo’s“ nicht erfunden, ich bin nicht der Coding-Dojo-Oberlehrer, ich bin kein Kata-Mönch und auch kein Dojo-Messias. Ich bin der Ilker, der Coding Dojo’s macht. Punkt.</p>
<h3>Latifa-Dojo</h3>
<p>So, und als genau dieser Ilker, der diese <a href="http://www.gmbsg.com/mucnetdojo-bericht-vom-ersten-net-coding-dojo/">Coding Dojo-Bewegung in die .NET-Welt getragen hat</a>, als der Ilker, der Erfahrung mit Coding Dojo’s verschiedener Formate hat, als der Ilker, der das <a href="http://www.gmbsg.com/uber-das-ziel-von-coding-dojos/">„Lernen &#038; Lehren“ mit Code Kata’s</a> und TDD/BDD &#038; Design Patterns sowie Best Practices in den Vordergrund stellt, als genau dieser Ilker stelle ich die oben genannten Regeln für die Art der Coding Dojo’s auf, die ich mir vorstelle.</p>
<p>Diejenigen, die sich für Coding Dojo’s interessieren, schon mal bei dem einen oder anderen dabei waren, sogar den Weg mit mir „mitgegangen“ sind oder einfach mal gerne dabei sein möchten – ja euch alle – bitte ich um Vertrauen. <strong>Bitte, vertraut mir</strong> und geht den Weg, den ich hier beschreibe, wenn ihr Coding Dojo’s macht und mitmacht. Verlangt Aktivität, Respekt, Optimismus und Zwanglosigkeit. Verfolgt das Ziel des Lernen &#038; Lehrens. Fordert genau diese Art von Coding Dojo’s, denn diese Coding Dojo’s sind es, die uns alle weiter bringen. Fordert von Coding Dojo’s diese Werte und diese Ziele – von Veranstaltern, von Operatoren, von Teilnehmern, von euch selbst. Ich werde es tun.</p>
<p>Im Sinnbild der asiatischen Kampfkünste, welches unschwer erkennbar auch mit dem Coding Dojo transportiert wird, möchte ich hiermit das oben geschilderte „Format“ als einen „Dojo-Stil“ etablieren. Es widerspricht natürlich dem gemeinschaftlichen Denken, nun von „Ilker’s Dojo-Stil“ zu sprechen oder es so zu kommunizieren. Personifizierung ist nicht zielführend. Wie gesagt, keiner ist besser gestellt als die anderen, keiner ist schlechter gestellt als die anderen.</p>
<p>Dennoch ist es ein stückweit meine Handschrift und meine Vorstellung eines Coding Dojo’s. Deswegen möchte ich bei der Schaffung dieses „Dojo-Stils“ noch eine kleine persönliche Note einbringen. Ich mache das jetzt mal einfach und gebe „meinem“ Dojo-Stil einen Namen: <strong>Latifa</strong>.</p>
<p>Latifa kommt vom arabischen latif, welches frei übersetzt &#8220;höflich, freundlich, sanft&#8221; bedeutet. Ich habe es gewählt, weil es im türkischen (latife) für „zuvorkommend, manierlich“ und manchmal sogar „gentlemen-like“ angewendet wird. Es spiegelt für mich die Grundvoraussetzung für gemeinsames Tun &#038; Wirken wider, die auch für ein erfolgreiches Lernen &#038; Lehren notwendig ist.</p>
<p>Es gibt so vieles, welches wir von anderen, unseren Ahnen und anderen Kulturen lernen können. Doch eine Sache ist allen gemeinsam, der Respekt und die Höflichkeit. Wer sich intensiver mit dieser Werte-Einstellung auseinandersetzen möchte, dem Rate ich das Studium (das meine ich wörtlich, also „<a href="http://de.wikipedia.org/wiki/Studium">studere</a>“) des <a href="http://de.wikipedia.org/wiki/Funakoshi_Gichin#Shoto-Niju-Kun">Shoto-Niju-Kun</a>, der 20 Verhaltensregeln von Funakoshi für das Karate-Do.</p>
<h3>Feedback im Mittelpunkt</h3>
<p>Ein zentrales Element des fortschreitens und verbesserns ist das Feedback. Nach geleisteter Arbeit ist Feedback wichtig, um daraus Erkenntnisse zu gewinnen und damit sein Handeln zu adaptieren. Das ist eigentlich ein Naturgesetz.</p>
<p>Ich möchte diesem Naturgesetz auch hier folgen und möchte abschließend um euer Feedback bitten. Bringt euch ein, macht mit und gestaltet mit. Schreibt mir, was ihr denkt und was ihr machen würdet. Ich freue mich über jedes Feedback.</p>
<p>Doch bei all dem Wirken &#038; Tun rund um das Coding Dojo stelle ich klar und und kommuniziere es mit deutlichen Worten: Ich werde weiter Coding Dojo’s machen, genauer gesagt Coding-Dojo’s im Latifa-Stil. Ich werde das Lernen &#038; Lehren verfolgen und stärken. Das werde ich mit Freude und Spass machen, denn nur so ist es wertbringend und nachhaltig. Für den Latifa-Stil gelten die Voraussetzungen der Gleichheit, der Aktivität, des Respekts, des Optimismus und der Zwanglosigkeit. Die Modi im Latifa-Stil sind frei wählbar, solange sie keinen Kampfcharakter haben. Im Dojo wird gemeinsam an dem Kata gearbeitet und geübt. Es steht die Übung mit dem Code im Vordergrund, deswegen heisst es Coding Dojo.</p>
<h3>Wege sind zum gehen da</h3>
<p>Es soll klar sein: Für alle, die sich mit diesem, dem Latifa-Stil des Coding Dojo auseinandersetzen möchten und diesen Stil in den Coding Dojo’s erleben möchten, gibt es die wunderbare Möglichkeit sich in der <a href="https://www.xing.com/net/netdojo/">Xing-Gruppe zu melden</a> oder auf die <a href="http://www.facebook.com/pages/NET-Coding-Dojo/10150113747745398">Facebook-Seite</a> zu schauen, um so auch die nächsten Event-Termine mitzubekommen. Ihr seid herzlich eingeladen, mit uns gemeinsam zu lernen &#038; zu lehren.</p>
<p>Weiterhin soll klar sein: Für alle, die sich mit dem Latifa-Stil nicht anfreunden können oder unter Coding Dojo’s etwas anderes verstehen, kann ich folgendes entgegenbringen: Ich werde euch nicht in einem Latifa-Dojo akzeptieren. Ich werde euch nicht für die Werte des Latifa-Dojo ermutigen. Ich werde euch nicht vom Latifa-Dojo überzeugen. Ihr müsst das alles selbst tun. Ihr könnt jederzeit zu Coding Dojo’s im Latifa-Stil kommen, solange Ihr euch an die Regeln und Werte des Dojo’s richtet.</p>
<p>Und wenn sich im Ergebnis keiner für den Latifa-Stil interessiert, dann ist das gut, denn dann habe ich immer noch meine Überzeugung. Und wenn sich im Ergebnis einige für den Latifa-Stil interessieren, dann ist das gut, denn dann habe ich immer noch meine Überzeugung. Und wenn sich im Ergebnis alle für den Latifa-Stil interessieren, dann ist das gut, denn dann habe ich immer noch meine Überzeugung.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/lerne-lehre-ilker-net-coding-dojo-latifa-stil/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Verschwörung beim .NET Open Space Süd in Karlsruhe</title>
		<link>http://www.gmbsg.com/verschworung-beim-net-open-space-sud-in-karlsruhe/</link>
		<comments>http://www.gmbsg.com/verschworung-beim-net-open-space-sud-in-karlsruhe/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 12:16:37 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Open Space]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1062</guid>
		<description><![CDATA[Dieses Wochenende war ich zum ersten Mal bei einem .NET Open Space, dem .NET Open Space Süd in Karlsruhe. 
Gleich vorneweg: Es war super! Nein, noch mehr, es war richtig super! Eine mehr als gelungene Veranstaltung. In diesem Wochenende habe ...]]></description>
			<content:encoded><![CDATA[<p>Dieses Wochenende war ich zum ersten Mal bei einem .NET Open Space, dem <a href="http://karlsruhe.netopenspace.de/2010/">.NET Open Space Süd in Karlsruhe</a>. </p>
<p>Gleich vorneweg: Es war super! Nein, noch mehr, es war richtig super! Eine mehr als gelungene Veranstaltung. In diesem Wochenende habe ich vieles gelernt und mitgenommen. Die Eindrücke dieser wahnsinnigen .NET-Veranstaltung wirken bei mir noch so immens, dass ich sie hier in einem Blog einfach niederschreiben muss.</p>
<h3>Mittendrin statt nur dabei!</h3>
<p>Samstag, 9:45 Uhr, ich gehe durch eine unscheinbare Tür, es gibt nur ein kleines Schild „.NET Openspace Süd 2010, 4. OG“. Ich laufe die Treppen hoch und werde von einem lächelnden Gesicht überrascht: „Na, ganz schön sportlich!“ rief die freundliche Check-In-Lady (neudeutsch für Empfangsdame ?!? ;)) mir entgegen. Wohl eher aus Höflichkeit, schließlich tat ich mir nach geleisteter Stufenarbeit merklich schwerer als sonst, das mir entgegengebrachte Lächeln mit einem Zurücklächeln zu erwidern.</p>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_133_S.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_133_S-150x150.jpg" alt="Sessionplanung" title="Sessionplanung" width="150" height="150" class="alignright size-thumbnail wp-image-1069" /></a> Nach dem obligatorischen Check-In mit Teilnehmerkarte und Event-Infos finde ich mich mittendrin in der Sessionplanung für den ersten Tag wieder. „Wahnsinn“ dachte ich mir, endlich sehe ich viele, die ich nur per Twitter, Blog oder anderweitig online kenne. Gleichzeitig freute ich mich, wieder in Gesichter zu blicken, die ich schon kannte. Und ich war gespannt, welche neuen Bekanntschaften ich mit dieser „Erfahrungsaustauschplattform“ Open Space machen würde. Doch zunächst galt es, die Sessionplanung konzentriert umzusetzen. Auf geht’s!</p>
<h3>WTF is a Monad?</h3>
<p>Die Antwort auf diese Frage hat mir auf anschauliche Art und Weise <a href="http://www.navision-blog.de/">Steffen</a> gegeben. Er folgte der Aufforderung von <a href="http://www.bjoernrochel.de/">Björn</a>, uns allen mal dieses komische „Monad-Ding“ in verständlicher Form widerzugeben. Ich ertappte mich selbst dabei mich nicht daran erinnern zu können, wie lange es her ist, so gespannt und magnetisiert einem Thema und seinem Vortragenden zuzuhören.</p>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_135_S.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_135_S-300x179.jpg" alt="WTF is a Monad?" title="WTF is a Monad?" width="300" height="179" class="alignleft size-medium wp-image-1072" /></a> Er erklärte unter Anderem, dass die Uhr ein <a href="http://de.wikipedia.org/wiki/Monoid">Monoid</a> sei und es nur 3 essentielle Kriterien für das in sich geschlossene System eines <a href="http://de.wikipedia.org/wiki/Monade_%28Typkonstruktion%29">Monaden</a> gibt. Das neutrale Element, die „SelectMany“ und „Id“ Methoden (also Bind &#038; Return) <i>[Anmerkung: Das ist mit großer Wahrscheinlichkeit mathematisch total falsch und wahrscheinlich auch nicht richtig - aber so habe ich es verstanden :-/ - Korrektur willkommen.]</i>. Es ging weiter mit der Vorstellung der Population in der Monaden-Welt: Identity, Maybe, Continuation, State. </p>
<p>Ich habe es sicherlich noch nicht richtig begriffen und bin selbst erst am Anfang, die funktionale Programmierung wieder in meine tägliche Programmier-Praxis einzuführen. Doch diese Session war für mich wie ein Paukenschlag zum Auftakt! Super.</p>
<h3>3D in your Pocket</h3>
<p>„Hmm, das ist schwer zu toppen“, dachte ich mir, noch gedanklich verworren in Monaden, als ich mich plötzlich in der 2. Session über XNA &#038; Windows Phone 7 von <a href="http://blogs.msdn.com/b/twendel/">Tom</a> wieder langsam aus der Monadenwelt lösen konnte. Doch meine Skepsis erwies sich als unberechtigt. Tom zeigte uns, das XNA keine Abkürzung für Spieleentwicklung ist, sondern eine Abkürzung ist für effektive &#038; professionelle Spieleentwicklung &#8211; mit einer für mein Empfinden niedrigen Lernkurve. </p>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_141_S.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_141_S-150x150.jpg" alt="XNA Windows Phone 7" title="XNA Windows Phone 7" width="150" height="150" class="alignright size-thumbnail wp-image-1077" /></a> Tom ist ein Verfechter von Fakten, also waren auch keine trockenen Slides angesagt – statt dessen gab es Visual Studio, Source Code und den Windows Phone 7 Emulator zu sehen. Ich durfte lernen, dass es gar nicht so schwer ist, Windows Phose 7 „anzuprogrammieren“ und sich auch kein Hexenwerk hinter „Worlds“, „Matrices“, „Meshes“ und „Shadern“ verbirgt. Macht Laune auf mehr.</p>
<h3>Design Drivers</h3>
<p>Und schon ging es weiter mit den Erkenntnissen in der von <a href="http://sergeyshishkin.spaces.live.com/">Sergey</a> angetriebenen Session über &#8220;TDD vs. BDD vs. ATDD&#8221;. Es war unerwarteterweise keine trockene Gegenüberstellung von „methodischen Religiösitäten“. Ganz im Gegenteil. Die Session war wohl eine der konstruktivsten Diskussionen über „Erwartungsgetriebene Softwareentwicklung“, bei denen ich dabei sein durfte.</p>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_144_S.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_144_S-150x150.jpg" alt="Testing Rules" title="Testing Rules" width="150" height="150" class="alignleft size-thumbnail wp-image-1078" /></a> Der Erfahrungsaustausch fand auf breiter Ebene statt, fast jeder konnte irgendwie dazu beitragen. Highlights waren sicherlich die Vorstellung von Fitnesse als Werkzeug für ATDD sowie die anschauliche Erklärung der <a href="http://lh3.ggpht.com/_X3kaawac_g4/S3VCgzOuyQI/AAAAAAAAAvw/aww4Ui2N7LU/agile-testing-quadrants.JPG?imgmax=800">Agile Testing-Quadranten</a> von Sergey.</p>
<p>Im Übrigen hatte wohl Sergey noch mehr „feine Info’s“ mitgebracht, denn er war es auch, der die „RX – Reactive Extensions Hands On“-Session kräftig mitgestaltete. Ach, ich könnte womöglich noch stundenlang über die weiteren, hochinteressanten Sessions auf diesem .NET Open Space schreiben. </p>
<h3>Know How Rollercoaster</h3>
<p>Zum Beispiel über die unglaublich erkenntnisreiche Session über „TDD/BDD Do’s and Dont‘s“  – das war geballtes Know-How über testgetriebene Entwicklung. Oder die Session über „verteilte Architekturen“ sowie die Session über „Skalierung &#038; Caching im Web“, die anschaulich die Best Practices dieser Themen an mich, den Teilnehmer transportieren konnten.</p>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_132_S.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_132_S-150x150.jpg" alt="Legalize Unit Testing" title="Legalize Unit Testing" width="150" height="150" class="alignright size-thumbnail wp-image-1079" /></a> Das „Daily Life“ wurde wertwoll angereichert durch die Sessions „Smart Tools for Smart People (Part I + II)“  von <a href="http://www.lennybacon.com/default.aspx">Daniel</a>. Das meistern spielerischer Herausforderungen wurde in der AntMe!-Session von Tom gezeigt, einen Kickstart von 0 auf 100 für ASP.NET MVC2 lieferte <a href="http://www.der-albert.com/Default.aspx">der Albert</a>. Die weise Erkenntnis der vielen Gemeinsamkeiten und wenigen Unterschiede von <a href=http://code.google.com/p/xunitbddextensions/">xUnit.BDDExtensions</a> zu <a href="http://github.com/machine/machine.specifications">MSpec</a> zu <a href="http://www.navision-blog.de/2009/02/23/introducing-naturalspec-a-dsl-for-testing-part-i/">NaturalSpec</a> wurde in der „United BDD“-Session deutlich. Unüberhörbar waren auch die Berichte von einer spannenden Session über die Erfahrungen mit und um DDD herum von <a href="http://webenliven-space.de/dotnetblog/">Gregor</a>.</p>
<p>Ach ja, es gab ja auch noch ein Coding Dojo. Ich als „Session-Host“ möchte nicht viele Worte darüber verlieren. Ich möchte viel mehr, dass jeder, der dabei war, seinen Eindruck mitnimmt und seine Meinung dazu bildet. Ich kann nur sagen: mir hat das Dojo mit so vielen interessierten und erfahrenen Entwicklern sehr viel Spass gemacht und ich konnte wieder einiges dazulernen.</p>
<h3>Environment.Cool();</h3>
<p><a href="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_150_s.jpg"><img src="http://www.gmbsg.com/wp-content/uploads/2010/06/IMAGE_150_s-300x179.jpg" alt="Organizers" title="Organizers" width="300" height="179" class="alignleft size-medium wp-image-1082" /></a>Doch dieses gesamte „Excitement“, der Erfahrungsaustausch, die Bekanntschaften, die wunderbar leichten Unterhaltungen am Mittagstisch, die Diskussionen über Vergangenheit, Gegenwart und Zukunft der Software-Entwicklung am gemütlichen Abend, die Betrachtungen über den eigenen Tellerrand hinaus – all das wäre nicht möglich gewesen, ohne die Motivation &#038; Organisation zum .NET Open Space Süd in Karlsruhe. Vielen Dank an die <a href="http://www.dotnet-ka.de/">DNUG Karlsruhe</a>, Alex, Ralf, Frank, Aydin und alle, die dabei waren! Ich bin beim nächsten Mal sicher wieder dabei!</p>
<p>Doch eine wichtige Frage bleibt nach dem .NET Open Space Süd immer noch offen: Planen <a href="http://twitter.com/ilkerde/status/16535252984">Steffen</a>, <a href="http://twitter.com/BjoernRochel/status/16575784869">Björn</a>, <a href="http://twitter.com/sshishkin/status/16610614472">Sergey</a>, <a href="http://twitter.com/BjoernRochel/status/16557247504">Alexander</a> eine <a href="http://twitter.com/BjoernRochel/status/16580674588">Verschwörung</a>? Bildet sich ein verschworene Monaden-Mafia? Welche Rolle spielt dabei „<b>Jean Closure</b>“ – ist er der neue Pate der testgetriebenen Untergrundgeschäfte? Vielleicht hat <a href="http://twitter.com/cdeger/status/16635635336">Christian</a> auch etwas damit zu tun?</p>
<p>Maybe Some&lt;IsTrue&gt;, Maybe None&lt;IsTrue&gt; &#8230; to be <a href="http://blogs.msdn.com/b/wesdyer/archive/2008/01/11/the-marvels-of-monads.aspx">Continuation-Monad</a>! ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/verschworung-beim-net-open-space-sud-in-karlsruhe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrum: Der bessere Scrum Master</title>
		<link>http://www.gmbsg.com/scrum-der-bessere-scrum-master/</link>
		<comments>http://www.gmbsg.com/scrum-der-bessere-scrum-master/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 16:15:37 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Lean Management]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Scrum Master]]></category>
		<category><![CDATA[Scrum Norris]]></category>
		<category><![CDATA[Selbstorganisation]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1050</guid>
		<description><![CDATA[Es ist zwar schon eine Weile her, als über die Fünf Schwachpunkte von Scrum geschrieben habe. Die Resonanz auf diesen provokanten, aber aus meiner Sicht treffenden Artikel war durchaus unterschiedlich. Man hat mich des Plagiats bezichtigt, man hat mich als ...]]></description>
			<content:encoded><![CDATA[<p>Es ist zwar schon eine Weile her, als über die <a href="http://www.gmbsg.com/funf-schwachpunkte-von-scrum/">Fünf Schwachpunkte von Scrum</a> geschrieben habe. Die Resonanz auf diesen provokanten, aber aus meiner Sicht treffenden Artikel war durchaus unterschiedlich. Man hat mich des Plagiats bezichtigt, man hat mich als unkonstruktiven Satzbauartisten bezeichnet, man hat mir Rollen-Personifizierung vorgeworfen und mich als nachhilfebedürftig abgestempelt (inkl. Links zu „guten Coaches“). Ach ja, es gab auch tatsächlich einige ernsthafte Diskussionen, die von nachdenklichen Lesern über die einzelnen Punkte geführt worden sind.</p>
<p>Wie dem auch sei, am Ende des besagten Artikels hatte ich einen Ausblick darauf gegeben, dass ich nicht nur die Punkte nennen werde, die ich als Schwachstelle in Scrum sehe, sondern auch meine Ideen dazu beitragen werde, diese Schwachstellen zu stärken und damit Scrum als agile Managementmethode für mein Verständnis erfolgreicher zu implementieren. Das habe ich für das Thema &#8220;<a href="http://www.gmbsg.com/scrum-die-bessere-sprintdauer/">bessere Sprintdauer</a>&#8221; schon getan,  und damit widme ich mich heute einem ganz besonderen „Schwachpunkt“ – dem Scrum Master. </p>
<h3>Die innere Handbremse</h3>
<p>„Oh je, der Scrum Master ist ein Schwachpunkt von Scrum?“ werden sich nun viele stirnrunzelnd denken. Ja, genau so ist es, der Scrum Master ist meiner Meinung nach sogar eine richtig hinterlistige Schwachstelle in Scrum-Projekten. Das liegt viel weniger an dem Scrum Master als Person als am Scrum Master als Rollenimplementierung, wie er in vielen Büchern beschrieben wird und von Scrum-Trainern bei Unternehmen „antrainiert“ wird.</p>
<p>Viele Scrum Master in heutigen Organisationen sind „Vollzeit-Scrum Master“, die dediziert ein Scrum Team betreuen und sich tagtäglich mit den Sorgen, Nöten und Bedürfnissen Ihres Teams auseinandersetzen. Meiner Meinung nach ist hier schon der erste Schwachpunkt erkennbar. Obwohl die Rollendefinition in „Scrum-Bibeln“ nicht oft vom Scrum Master als institutionalisierte Position spricht, wird sie überall <a hrtef="https://www.xing.com/net/leansoftwaredevelopment/diskussionen-fragen-und-antworten-400978/ist-scrummastern-ein-vollzeitjob-26488808/">diskutiert</a>, <a href="http://borisgloger.com/2009/04/21/4711-is-a-scrummaster-a-full-time-position">implementiert</a> und <a href="http://jobsuche.monster.de/Search.aspx?q=scrum%20master&#038;cy=de&#038;lid=163&#038;re=130">implantiert</a>.</p>
<p>Ein Scrum Master ist dazu da, sich überflüssig zu machen. Eines seiner größten Ziele ist es, sein Team in die <a href="http://de.wikipedia.org/wiki/Selbstorganisation">Selbstorganisation</a> zu führen und dort zu halten. Doch wie geht das bei einem Scrum Master, der eine Planstelle in einer Organisation ist? Mehr noch, hinter der Rolle Scrum Master verbirgt sich dann eine konkrete Person, ein konkreter Arbeitsplatz, ein konkretes Schicksal. Und diese Person soll sich jetzt überflüssig machen? Das wird wohl selbst der barmherzigste Mensch nicht tun. Jetzt könnte man diesen Vorwurf mit „don’t blame the tool“ abwiegeln, aber das wäre zu einfach. Die Schwachstelle liegt viel tiefer begraben als es auf der Oberfläche sichtbar ist.</p>
<h3>Zwischen den Stühlen</h3>
<p>Zumeist befindet man sich als Scrum Master innerhalb einer „agilen“ Organisation sowieso in der Zwickmühle. Einerseits sollte man das Team nicht führen, sondern begleiten. Andererseits bleibt das Management als „Chicken“ selten mehr als die ersten paar Sprints ruhig. Nicht selten trägt es „Erwartungen“ und „Strategische Leitlinien“ an den oder die Scrum Master heran. Schließlich ist der Scrum Master ja überzeugt von Scrum und der Idee, dass der Product Owner nun das Management betreiben soll. Die Kennzahlen über Team- und Projektperformance holt man dennoch beim Scrum Master ein, weil der „einfach näher dran am Geschehen ist“.</p>
<p>Viele Scrum Master fügen sich in diese organisatorische „Kneifzange“, anstatt sie mit Kraft zu durchbrechen. Wie soll man auch, wenn z.B. der eigene Job daran hängt oder die letzte (dicke) Auszahlung des Dienstleistungsvertrages mit dem Kunden noch aussteht?</p>
<h3>Der Alleskönner</h3>
<p>Viele eingefleischte Scrum-Experten und erfahrene Trainer stellen deshalb die Rolle des Scrum Masters auf ein hohes Podest. Der Scrum Master sei „<a href="http://borisgloger.com/2010/03/22/scrum-wurden-agiles-schwachen-geerbt-eine-antwort/">eine Führungsrolle im Prozess</a>“, es dauere tausende von Stunden, die Charakteristika und schwierigen Aufgaben eines Scrum Masters zu meistern. Ein Change Agent und Facilitator hat es eben nicht leicht. </p>
<p>Der Scrum Master als Rolle wird oft als Alleskönner dargestellt. Schließlich muss er die Grundlagen des Managements beherrschen, ein absoluter Teamplayer sein und obendrein auch noch ein feiner Kerl den jeder mag. Der Scrum Master ist der neue <a href="http://de.wikipedia.org/wiki/MacGyver">MacGyver</a> in der agilen Software-Entwicklungslandschaft und kann selbst aus den schwierigsten und aussichtslosesten Situationen mit Einfallsreichtum, Know-How und Cleverness den Erfolg hin zur effektiven &#038; profitablen Software-Entwicklung gestalten.</p>
<p>Eine schöne Vorstellung. Doch die Realität ist eine andere. In der Realität gibt es nur einen MacGyver, und den sogar nur im Fernsehen. Schade für die vielen Softwarefabriken und Weborganisationen, schade für die vielen Scrum Trainer und Berater, schade für die Tausenden von „Certified Scrum Master“. Doch Karten auf den Tisch: Es wäre auch zu schön gewesen, oder?<br />
Mittlerweile ziehen sogar Alpha-Agilisten und Scrum-Kenner das „Scrum Is Always Better, Scrum Master Is Always Hero“-Gefühl durch den Kakao. Mit wunderbar leichtem und gleichzeitig nachdenklich stimmendem Humor schreitet seit einiger Zeit „<a href="http://blog.shino.de/2010/02/20/scrum-norris/">Scrum Norris</a>“ durch die geistigen Pfade der Agilität.</p>
<h3>Quo Vadis Scrum Master?</h3>
<p>Doch weder Humor noch Lamentiererei helfen einem dabei, diesen Schwachpunkt des „Scrum Master-Daseins“, nämlich die viel zu starke Fokussierung der Rolle und deren Implementierung, zu verbessern. Was tun? Wie kann man in einem Scrum-Team oder in einer Organisation mit Scrum-Teams diesen viel zu starken Fokus auf den Scrum Master mindern? Ich möchte hier einen konkreten Verbesserungsvorschlag und eine konzeptionelle Perspektivänderung als Diskussionsgrundlage vorstellen.</p>
<p>Dazu möchte ich ein Szenario aus der Entwicklung selbst voranstellen, um den Effekt der Maßnahme deutlicher hervorzuheben. Es wäre meines Erachtens sehr hilfreich für Team und Scrum Master, wenn die Abhängigkeiten zum Scrum Master zu allen anderen Rollen sowie zu der umgebenden Organisation so gering wie möglich sind. Um Abhängkeiten voneinander zu entkoppeln, gibt es in der Software-Entwicklung einige bewährte Methoden. Eine davon ist die sog. <a href="http://de.wikipedia.org/wiki/Inversion_of_Control">„Dependency Inversion“ oder „Inversion of Control“</a>. Das hört sich doch genau nach dem an, was gebraucht wird, nämlich eine „Inversion of Control“ im wörtlichen Sinne. Nicht der Scrum Master organisiert das Team, das Team organisiert das Team.</p>
<h3>Scrum Master in Bewegung</h3>
<p>Übertragen auf den Prozess und die Rahmenbedingungen, die die Scrum-Methode vorgibt, ließe sich eine solche Indirektion mit einem einfachen Mittel erreichen: Die Rolle des Scrum-Masters wird im Team rotierend „durchgereicht“. Statt eines Scrum Masters, der sich dediziert um ein (oder noch schlimmer mehrere) Teams kümmert, kümmert sich das Team um die Erfüllung der Rolle des Scrum Masters. In der Praxis kann man den „Scrum Master-Hut“ z.B. sprintweise, monatsweise, oder quartalsweise von Team-Mitglied zu Team-Mitglied weiterreichen.</p>
<p>So ist jeder einmal mit der „Verantwortung“ des Scrum Masters konfrontiert und lernt obendrein eine weitere, wichtige Perspektive des Prozesses kennen. Dadurch erschließt sich sukzessive dem ganzen Team eine tiefere Kenntnis der Vorgehensweise. Es ergibt sich eine induktive Selbstorganisation: Man lernt die Probleme und Aufgaben der Scrum Master Rolle kennen und hilft sich gegenseitig im Team, dass es nicht zu Problemen kommt oder diese schnell ausgeräumt werden.</p>
<p>Aus Sicht des Prozesses mündet das Rotationsprinzip in mehrere Vorteile. Zunächst wird einmal wird nicht nur die Selbstorganisation gefördert, sondern auch das Know-How effektiv verteilt. Der <a href="http://en.wikipedia.org/wiki/Bus_factor">Bus-Faktor</a> wird im Kontext des Prozesses und der Methodensicherheit massiv erhöht.</p>
<h3>Refokussierung der Kommunikation</h3>
<p>Für den Product Owner ist der wechselnde Scrum Master ein regelrechter Segen: Statt sich die ganze Zeit auf den Scrum Master zu konzentrieren, kann (und muss) er sich nun mit dem ganzen Team auseinandersetzen – so wie es am effektivsten ist und sich auch „gehört“. Darüber hinaus lernt der Product Owner, seine geschäftlichen Anforderungen und Interessen mit der „Masse Team“ zu koordinieren, statt mit dem „Ansprechpartner“ Scrum Master, wenn es mal wieder Abstimmungsprobleme oder Missverständnisse gibt.</p>
<p>Nicht nur der Prozess, sondern auch die umgebende Organisation – also das Unternehmen – profitiert von dieser Maßnahme. Statt wieder neue Stellen oder Stufen in die Organisation zu implementieren, wird durch die Rotation der Scrum Master von „allen“ getragen. Ergebnis: Keine neue „Position“ Scrum Master, keine Kompetenz- und Verantwortlichkeitskonflikte mit Teamleads (Gruppenleiter) oder Head-Of’s (Abteilungsleiter), keine Skalierungsprobleme. Die Führungsmöglichkeiten sind klar und bei einem <a href="http://de.wikipedia.org/wiki/Menschenf%C3%BChrung">partizipativen Führungsstil</a> höchst effektiv.</p>
<p>Die Rückkopplung zum mittleren Management und der strategischen Führung wird greifbarer, denn jetzt kann sich das Management nicht mehr den „Scrum Master“ als Mittelsmann für Mitarbeiterführung herauspicken. Der Fokus für wird stattdessen zum Product Owner gelenkt. Der wiederum wird – wie auch das Management selbst – realisieren und anerkennen müssen, dass sich eine Selbstorganisation nicht kommandieren lässt, sondern sich nach Bedürfnissen orientiert.</p>
<h3>Scrum Master: Kein Platz für Projektleiter</h3>
<p>Das Unternehmen wird schlanker, weil der „klassische“ Projektmanager nun nicht mehr in die für ihn äußerst angenehme „Scrum Master“-Schiene flüchten kann, sondern sie entscheiden muss: Entweder Product Owner oder Team! </p>
<p>Ich selbst dachte vor ein paar Jahren noch, dass der <a href="http://www.gmbsg.com/die-zukunft-des-projektmanagers-in-der-software-entwicklung/">klassische Projektmanager nur die Wahl zwischen Scrum Master und Product Owner hat</a>. Falsch! Heute darf ich die Lehre ziehen, dass ich damals auf den Scrum Master als Rolle viel zu Stark fokussiert gewesen bin. Team und Product Owner sind die &#8220;Key Player&#8221;, der Scrum Master ist nur Mittel zum Zweck, und das &#8211; wenn möglich &#8211; nur soviel wie unbedingt notwendig.</p>
<p>Mein Fazit: Mit einem rotierenden Scrum Master schafft man viele inherente Hürden aus dem Weg. Das Team, der Product Owner und die umgebende Organisation fokussieren sich deutlicher auf die Aufgabe. Der Prozess Scrum wird dadurch im Software-Entwicklungs-Theater wieder mehr zum Bühnenbild, das Team zu den Schauspielern und der Product Owner zum Regisseur. Damit ist dann auch eine gute agile Vorstellung wesentlich einfacher und schmerzfreier umsetzbar. Vorhang auf!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/scrum-der-bessere-scrum-master/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Über das Ziel von Coding Dojos II</title>
		<link>http://www.gmbsg.com/uber-das-ziel-von-coding-dojos-ii/</link>
		<comments>http://www.gmbsg.com/uber-das-ziel-von-coding-dojos-ii/#comments</comments>
		<pubDate>Mon, 31 May 2010 07:55:47 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[München]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MTC]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Unterschleißheim]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1040</guid>
		<description><![CDATA[Es ist Mittwoch, 18:30 Uhr. Die „Bude“ im Microsoft Technology Center in Unterschleißheim ist gerammelt voll. Der Meetingraum ist für 20 Personen ausgelegt, knapp 30 versuchen mehr oder minder erfolgreich, sich im Raum ein Plätzchen zu ergattern. Freudige Gesichter, alle ...]]></description>
			<content:encoded><![CDATA[<p>Es ist Mittwoch, 18:30 Uhr. Die „Bude“ im Microsoft Technology Center in Unterschleißheim ist gerammelt voll. Der Meetingraum ist für 20 Personen ausgelegt, knapp 30 versuchen mehr oder minder erfolgreich, sich im Raum ein Plätzchen zu ergattern. Freudige Gesichter, alle lächeln und sind locker – anscheindend. Doch irgendwie ist eine Spannung anzumerken. Es ist nicht so wie immer in München. Das MTC strahlt viel Professionalität aus. Man fühlt sich wie in Mitten einem wichtigen, kreativen und äußerst exklusiven Schaffenskreis.</p>
<p>Vorne sitzt <a href="http://ralfw.blogspot.com">Ralf Westphal</a>, der Architekt, der Wissenvermittler, der Konferenzorganisator – kurzum eine .NET Lichtgestalt. Er klickt und tippt noch schnell Dinge in sein Laptop. Die Teilnehmer warten. Komisch, üblicherweise macht man Witze und redet über einige interessante Blogposts, bevor es losgeht. Ich hätte z.B. erwartet, dass einer in die Runde „<a href="http://www.gmbsg.com/kein-yin-ohne-yang-kein-null-ohne-pointer/">Null oder nicht null, Hauptsache Ergebnis!</a>“ wirft und so ein wenig die Runde auflockert. Doch Nein. Es liegt Konferenzduft in der Luft. Alle starren und warten.</p>
<p>18:45 Uhr &#8211; Es geht los: Nach ein paar einleitenden Worten und dem lieben Dank an <a href="http://www.der-evangelist.de">Jan, dem Hüteträger und Evangelisten</a> für die super Organisation der Location geht es schon los. Ralf ist am Zug. Was danach genau im Münchener .NET Coding Dojo passiert ist, beschreibt Ralf akribisch und meiner Meinung nach ziemlich treffend in seiner <a href="http://ralfw.blogspot.com/2010/05/coding-dojo-muc-retrospektive.html">Retrospektive für das Coding Dojo</a>. Inhaltlich kann ich dem kaum etwas hinzufügen und möchte mich nochmals bei Ralf für diese gute Session bedanken.</p>
<p>Doch ganz so unkommentiert möchte ich es dabei natürlich nicht belassen. Steffen, der vor kurzem sehr erfolgreich das Hambuger .NET Coding Dojo initiiert hatte, hat in einem Tweet seine <a href="http://twitter.com/sforkmann/status/15062018368">Bedenken über den „Community-Gedanken“</a> geäußert. Seiner Meinung nach ist ein Coding Dojo keine <a href="http://twitter.com/sforkmann/status/15063976231">„One-Man-Show“ mit Musterlösung</a>. Ich habe ihm per Twitter schon <a href="http://twitter.com/ilkerde/status/15085255327">geantwortet</a>, möchte aber hier noch ein wenig detaillierter auf meine Auffassung eingehen.</p>
<h3>Das „Format“ Coding Dojo</h3>
<p>Ich hatte schon vor über einem halben Jahr einmal über das <a href="http://www.gmbsg.com/uber-das-ziel-von-coding-dojos/">Ziel von Coding Dojo’s</a> gebloggt. Damals, in einem Coding Dojo mit Pete, habe ich im Nachhinein mir einige Gedanken über das „Format“ Dojo gemacht. In besagtem Coding Dojo lief nämlich alles – also wirklich alles – gerade nicht so, wie es sich Pete und ich vorgestellt hatten. Wir hatten uns mit ein paar Kata’s vorbereitet und den Ablauf schon ein wenig vorgedacht. Aber es kam alles anders. Warum?</p>
<p>Die Antwort ist einfach: Weil wir es zugelassen haben. Wir haben eine Sache beherzigt: Ein Coding Dojo ist eine Veranstaltung für die Teilnehmer. Jeder sollte nach einem Dojo mit dem Gefühl nach Hause gehen können, dass er etwas gelernt hat. Im Coding Dojo mit dem KataBlog war den Teilnehmern die Komponentenorientierung und das IOC nicht so wichtig wie grundlegendere Themen, wie z.B. MVC als Pattern oder die HTTP-Request-Response-Pipeline von ASP.NET. Das haben wir beachtet und unseren Plan zurückgestellt.</p>
<h3>Aber warum ein Coding Dojo ohne Coding?</h3>
<p>Adaptiert auf das Coding Dojo von letzter Woche von Ralf lässt sich folgendes hinzufügen: Wir als Münchener .NET Coding Dojo Crew haben Ralf eingeladen, weil es die Teilnehmer &#8211; also wir, die Coding Dojo Community &#8211; so wollten. Wir haben Ralf nicht eingeladen, damit er eine Show abzieht. Wir haben Ralf auch nicht eingeladen, weil er der Ralf ist. </p>
<p>In einigen vorangegangenen Coding Dojo’s kam als Feedback der Teilnehmer immer wieder „zuwenig Architektur“, „zuwenig Design“, „zuwenig Vorgabe“. Als ich mit Ralf auf der VSOne darüber geredet habe, schlug er ein „Architektur-Dojo“ vor. „Super!“ dachte ich mir und freute mich, den Dojo-Teilnehmern mit einer Einladung ihren „Wunsch“ erfüllen zu können.</p>
<p>Wer beim .NET Coding Dojo vergangenen Mittwoch dabei war, der wird mir beipflichten, dass diesmal wirklich über Architektur, Design, Anwendungsaufbau und Komponenten-Orientierung ausgiebig diskutiert wurde. Ralf hat sein Versprechen gehalten. Er kam, dachte, designte und diskutierte. Genau so, wie es oftmals in Feedbackrunden vorheriger Dojo’s angefordert wurde.</p>
<h3>Coding Dojo ist kein Workshop</h3>
<p>Trotzdem. Es war anders als die vorherigen Coding Dojo’s. Ganz anders. Keine Diskussionen über die Kata-Wahl, keine Diskussion über Anforderungsanalyse, keine Design-Strittigkeiten. Statt dessen Ralf. Ralf wie er leibt und lebt. Das ist die Aufgabe, das ist die Vorgehensweise, das ist EBC, das ist State-Of-The-Art, das ist Regelwerk &#038; Konvention. Punkt. Natürlich mit fester und stichhaltiger Argumentation und der Erläuterung der Beweggründe.</p>
<p>Aber irgendwie war es kein Coding Dojo so wie ich es kannte. Es gab hier und da mal Rückfragen an Ralf, „wieso“ und „weshalb“. Aber aktiv mitgemacht – aktiv Architektur gemacht – das hat meiner Meinung nach mehrheitlich Ralf getan. Ralf hat schon ab und an probiert per Rückfrage die Teilnehmer einzubinden. Doch andererseits gab es für die Teilnehmer nicht wirklich viele Optionen. Besser gesagt: Es war ein geplante Session, mit strukturierter Vorgehensweise und festem Rahmen. Da bleibt nicht viel Luft und Platz für anderes.</p>
<p>Man kann mir „als Veranstalter“ jetzt natürlich alles mögliche vorwerfen. Z.B. dass ich ja hätte eingreifen können, wenn es mir zu „passiv“ und zu „vorgetragen“ erscheint. Oder man könnte mir den Vorwurf machen, dass ich in den vorangegangen Coding Dojo’s einfach nur chaotisch in die Tasten gehauen habe, anstatt strukturiert vorzugehen und damit praktisch immer wieder so ein „wir brauchen Architektur“-Feedback provoziert habe. Ok, dann soll man mir die Vorwürfe machen. Meine Antwort dazu ist: Ich habe es zugelassen, weil es wichtig ist, Dinge zuzulassen. Darüber sollte man nachdenken.</p>
<h3>Coding Dojo und Community</h3>
<p>Jetzt transportiere ich mal meine persönliche Auffassung etwas deutlicher, damit es nicht wieder heisst, ich wäre zu objektiv oder würde mich hinter geschnörkeltem Satzbau verstecken. Ich persönlich denke, dass das letzte Coding Dojo absolut kein Coding Dojo war. Es war ein Architektur-Workshop mit Ralf Westphal. Und wenn ich das so sagen darf: Es war ein guter Architektur-Workshop. Aber es war für mich mit Sicherheit kein Coding Dojo. Es gab keine aktive Einbindung der Teilnehmer, es gab keine lockere Atmosphäre, es gab kein Coding und keine großen Diskussionen. Ich finde, das war kein Coding Dojo, wie ich es mir wünsche und wie ich es auch gut finde.</p>
<p>Aber meine Meinung ist nicht wichtig – das habe ich nach nun mehr als 50 Coding Dojo’s gelernt. Es ist nicht wichtig, wie ich Probleme löse. Es ist auch nicht wichtig, welches Framework ich verwende. Und es ist schon garnicht wichtig, wie ich Analyse, Architektur, Design oder Entwicklung betreibe. Denn das einzige was zählt im Coding Dojo sind die Akteure. Die Akteure im Coding Dojo sind die Teilnehmer. Das ist entscheidend.</p>
<h3>Dojo = Lernen?</h3>
<p>Wenn also die Teilnehmer des „Coding-Dojo’s“ mit Ralf in der Feedback-Runde sagen „Ja, das hat mir gut gefallen, ich habe super mitgemacht &#038; viel gelernt“ – dann, ja dann ist es wohl ein Dojo gewesen. Vielleicht kein „Coding“ Dojo, aber es war ein echtes Dojo. Aber wenn die meisten kommentarlos und höflich klatschend das Dojo beenden, dann, ja dann war es wohl kein Dojo. Wie gesagt: Für mich war das kein Dojo – schon garnicht ein Coding Dojo. Aber das Feedback am Ende von Ralf’s Session war durchaus positiv. Also scheint es für einige Teilnehmer ein Dojo gewesen zu sein.</p>
<p>Natürlich möchte ich an dieser Stelle noch ein paar weitere Dinge loswerden. Ich möchte nicht, dass man die Definition des „Coding Dojo“‘s auf „Hat es dir gefallen?“, &#8220;Konntest Du mitmachen?&#8221; oder „Hast du etwas gelernt?“ reduziert. Ein echtes Coding Dojo hat einige weitere Parameter, die entscheidend sind für den speziellen, magischen Charakter und den guten Erfahrungsaustausch. Der aufmerksame Leser wird z.B. erkannt haben, dass ich nicht ein einziges Mal TDD erwähnt habe. Wenn Interesse daran besteht, die Bestandteile und das Format „Coding Dojo“ aus meiner Perspektive genauer kennenzulernen, dann bitte sagt mir das (schreibt einen Kommentar oder eine Email), und ich werde es niederschreiben.</p>
<h3>Fazit &#038; Ausblick</h3>
<p>Abschließend möchte ich zu „Ralf’s Coding Dojo“ noch folgendes loswerden. Es war der Wunsch der Community und ich (und Ralf) haben versucht, diesem Wunsch gerecht zu werden. Es war eine gute Erfahrung. Ich habe viel daraus gelernt und ich denke, dass auch die Teilnehmer etwas mitnehmen konnten. Es war ein guter Architektur-Workshop und Ralf hat viel investiert, um den Teilnehmern seine Sicht zu zeigen und Wissen zu transportieren. Danke, Ralf.</p>
<p>Doch eines steht heute schon fest: das nächste .NET Coding Dojo, welches im Übrigen wieder ein ganz besonderes Dojo ist, wird mit absoluter Sicherheit ganz anders ablaufen. Nicht nur, weil diesmal nicht der Ralf eine Aufgabe stellen wird. Nein. Es wird ganz anders, weil die Partizipation und das aktive teilnehmen exemplarisch exerziert werden. Das nächste <a href="https://www.xing.com/events/net-coding-dojo-empowered-508914">Münchener .NET Coding Dojo findet am 22. Juni</a> im Rahmen des <a href="http://www.dotnetpro-powerday.de/">dotnetpro.powerday’s</a> statt und hat den treffenden Titel „.NET Coding Dojo Empowered!“. Sei dabei und erlebe, wie man gemeinsam Lernen &#038; Lehren kann, wie man gemeinsam eine Problemstellung mit Logik &#038; Spaß lösen kann, wie man professionelle Software-Entwicklungs-Methoden im Team einsetzt! Es wird wieder einmal einzigartig und sehr lehrreich werden. <a href="https://www.xing.com/events/net-coding-dojo-empowered-508914">Zur Anmeldung</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/uber-das-ziel-von-coding-dojos-ii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dojo-Workout-Wochen</title>
		<link>http://www.gmbsg.com/dojo-workout-wochen/</link>
		<comments>http://www.gmbsg.com/dojo-workout-wochen/#comments</comments>
		<pubDate>Wed, 12 May 2010 18:58:31 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1033</guid>
		<description><![CDATA[Ich hatte es im „Coding Dojo Considered Helpful“-Artikel schon angekündigt, dass wir diesen Monat im .NET Coding Dojo München einen besonderen Gast mit einem besonderen Thema haben: Ralf Westphal wird im Mai-Dojo eine Kata der besonderen Art mit den Teilnehmern ...]]></description>
			<content:encoded><![CDATA[<p>Ich hatte es im „Coding Dojo Considered Helpful“-Artikel schon angekündigt, dass wir diesen Monat im .NET Coding Dojo München einen besonderen Gast mit einem besonderen Thema haben: <a href="http://ralfw.blogspot.com">Ralf Westphal</a> wird im Mai-Dojo eine Kata der besonderen Art mit den Teilnehmern durchführen. Frisch nach dem Münchener Forschungs- und Erfahrungsdrang dringt dabei das .NET Coding Dojo ab und an bis zum Grenzbereich.</p>
<p>Ralf wird im Mai-Dojo mit uns den Schwerpunkt Architektur &#038; Design trainieren. Einerseits ist das untypisch für ein .NET Coding Dojo, denn schließlich ist im Coding Dojo das „Coding“ nicht nur im Titel verankert, sondern auch das A und O eines jeden Dojo’s. Andererseits sind Anwendungs-Architektur und –Design wichtige Themen, denen besonders im Kontext der testgetriebenen Entwicklung Beachtung bemessen werden sollte. Umso besser und spannender ist es bei diesem Dojo, wie wir alle gemeinsam von der Idee, der Anforderung über die Architektur und bis zum Test-Driven-Design und der Implementierung gelangen werden.</p>
<p>Ein besonderes Thema verlangt auch eine besondere Location. Dank der tatkräftigen Unterstützung von Microsoft und dem <a href="http://www.der-evangelist.de">Evangelisten mit dem Hut</a> haben wir einen wirklich exklusiven Standort für dieses Dojo gefunden: Das <a href="http://www.microsoft.com/mtc/locations/munich.mspx">Microsoft-Technology-Center</a> in Unterschleißheim öffnet der .NET-Coding-Dojo-Crew die Pforten für diesen „Extra-Workout“. Danke!</p>
<h3>Kühl sag‘ ich, kühl!</h3>
<p>Wo wir gerade dabei sind: Die Idee und das Konzept des .NET Coding Dojo’s ist erfreulicherweise schon in einige Städte Deutschlands vorgedrungen. Dennoch &#8211; oder gerade deswegen &#8211; kommt es immer öfter vor, dass ich angesprochen werde und man mich frägt wie das denn im Coding Dojo so abläuft. Die ALT.NET-Crew in Berlin hat auf ihren <a href="http://www.altnetberlin.de/Termine/coding-dojo">Coding-Dojo-Seiten eine ziemlich gute Beschreibung</a>, doch jetzt gibt es eine noch anschaulichere Alternative: <a href="http://www.microsoft.com/germany/msdn/video/show.mspx?id=msdn_de_39788">MSDN TV war bei einem Dojo in München</a> zu Gast und hat ein paar interessante Impressionen mitgenommen!</p>
<p>Eine Überasschung, aber für mich eines der Highlights in dieser Folge ist die Nahaufnahme von zwei „.NET Coding Dojo Core‘s“, sozusagen dem ideelen Fundament der Münchener Coding-Dojo-Crew, Philipp (aka. Fuip) und Olaf (aka. Nurph). Natürlich gibt es mittlerweile viele tragende Stammgäste und immer wieder neue Teilnehmer, die alle dazu beitragen, ihr eigenes Dojo zu dem zu machen was es ist und mit uns gemeinsam weiter zu trainieren, um so immer mehr und deutlicher an die professionelle Softwareentwicklung heranzukommen. Euch allen vielen Dank! Ach ja, Jan hat in der Folge auch mich zum Thema interviewt. Alles in Allem: Kühl&#8230; sehr kühl! :-)</p>
<h3>.NET-Coding-Dojo-Chillout</h3>
<p>Und weil in München gerade .NET Coding Dojo-Workout-Wochen sind geht es nach der Denk-Design-Diskussions-Orientierung im Mai im Juni wieder direkt an den Code! Das Münchener .NET Coding Dojo wird im Juni wieder ein Dojo erster Klasse veranstalten: Am 22. Juni sind wir zu Gast beim <a href="http://www.dotnetpro-powerday.de/Programme/dotnetpro.powerday-C-fuer-Profis-am-22.-Juni-2010">dotnetpro.powerday für C# Profis</a>! Tagsüber wird von <a href="http://www.des-eisbaeren-blog.de/">Golo</a> und <a href="http://www.der-albert.com">Albert</a> (dem Online-Dojo-Virtuosen) C# Know-How kompakt und verständlich vermittelt, abends wird im .NET Coding Dojo gechillt eine Code-Kata mit dem neu gewonnenem Wissen gelöst. Chillen, Programmieren und Lernen geht nicht? Dann überzeuge Dich vom Gegenteil im .NET Coding Dojo bei dem C#-Profi-dotnetpro-powerday! <a href="https://www.xing.com/events/net-coding-dojo-empowered-508914">Anmelden und gechillt coden</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/dojo-workout-wochen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Goto Dojo Considered Helpful</title>
		<link>http://www.gmbsg.com/goto-dojo-considered-helpful/</link>
		<comments>http://www.gmbsg.com/goto-dojo-considered-helpful/#comments</comments>
		<pubDate>Mon, 03 May 2010 19:49:49 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1018</guid>
		<description><![CDATA[Es ist es heute an der Zeit, darüber zu schreiben, daß Pete und ich uns nun darin einig geworden sind, die erste Hürde mit dem .NET Coding Dojo gestemmt zu haben. Was diese erste Hürde ist und wieso wir das ...]]></description>
			<content:encoded><![CDATA[<p>Es ist es heute an der Zeit, darüber zu schreiben, daß Pete und ich uns nun darin einig geworden sind, die erste Hürde mit dem <a href="http://www.gmbsg.com/works/index.php?title=.NET_Coding_Dojo_Muenchen">.NET Coding Dojo</a> gestemmt zu haben. Was diese erste Hürde ist und wieso wir das so sehen, werde ich später noch erklären. </p>
<p>Doch zunächst möchte ich auf die nächsten .NET Coding Dojo-Termine hinweisen, denn der Mai wird ein regelrechter Coding-Dojo-Workout-Monat werden!</p>
<h3>Coding Dojo Berlin: Round II</h3>
<p>Gong! Die zweite Trainingsrunde für das .NET Coding Dojo in Berlin steht kurz vor der Tür! Morgen schon, am 04.05. werden die Hauptstädtler so richtig die Bude rocken. Ich zitiere: „Strukturiertes Vorgehen, schnelle Finger und messerscharfe Logik sind unsere Waffen!“ So ist es richtig, und die Berliner Crew braucht nicht nur diese Eigenschaften, sondern auch weitere Unterstützung von .NET Entwicklern, TDD-Jüngern und CCD-Freunden. Gemeinsam das Code-Kata lösen, welches Mike schon durch das Sparring gepfercht hat. Sei dabei: <a href="http://www.altnetberlin.de/Termine/coding-dojo/kommender-dojo">Anmelden und Mitmachen!</a></p>
<h3>Coding Dojo Online: Weinert&#8217;s 2. Sinfonie</h3>
<p>Beim letzten Online Coding Dojo haben <a href="http://www.der-albert.com/">der Albert</a> und die Online-Teilnehmer alles gegeben, um das Code Kata zu lösen. Es hat wieder einmal jede Codezeile gezählt. Die Kata und der Albert als virtuos auf der Tastatur fegender Kunst-Coder waren so fesselnd, dass nach dem Fall des ersten Online-Dojo-Vorhangs schon fest stand: Es muss eine 2. Sinfonie geben! Diese Woche ist es soweit. Am Donnerstag, den <a href="https://www.xing.com/events/2-online-coding-dojo-497522">06.05. findet das zweite .NET Online-Coding-Dojo</a> statt. Es wird wieder eine Herausforderung erster Klasse werden, also nicht zögern und zaudern, sondern gleich <a href="https://www.xing.com/events/2-online-coding-dojo-497522">anmelden</a> und mit Albert und der geballten Know-How-Power der .NET-Online-Community das Code-Kata im Online-Coding-Dojo lösen! Auf geht’s!</p>
<h3>Coding Dojo Wien: MVC FTW!*</h3>
<p>Andreas, Adrian und die Wiener Dojo-Fraktion machen weiter an ihrem ASP.NET MVC Fundament und verknüpfen exemplarische Anwendungsentwicklung geschickt mit dem Coding Dojo und den darin gestellten Herausforderungen des Test-First, TDD &#038; CCD. Das und vieles mehr qualifiziert die Wiener Gruppe zur Avangarde und Vorreitern der Coding Dojo-Szene in Österreich. Sei dabei, wenn es am 14.05. wieder heisst: MVC-Training im Coding Dojo &#8211; <a href="http://dotnetopenspace.ning.com/events/aspnet-mvc-anwendung-1">Anmelden</a>! <i>(*Update!)</i></p>
<h3>Coding Dojo Hamburg: Die Premiere</h3>
<p>Vorhang auf, meine Damen &#038; Herren. Die .NET-Community in Hamburg präsentiert das <a href="http://www.navision-blog.de/2010/05/03/erstes-net-coding-dojo-in-hamburg/">erste .NET Coding Dojo in Hamburg</a>, am 19.05.2010! Es wird eine ganz besondere Premiere, eine würdige Premiere der Coding Dojo Begeisterten in Hamburg werden, denn Hamburger sind bekannt für den hohen Anspruch, den sie an sich selbst stellen. Gleich das erste Coding Dojo wird ein Randori werden. .NET Entwickler im Norden Deutschlands, lasst euch gesagt sein, wer dieses Highlight verpasst, ist selber schuld! Auf geht’s zum .NET Coding Dojo Hamburg: <a href="https://www.xing.com/events/coding-dojo-506845">Anmelden</a>!</p>
<h3>Coding Dojo München, Dojo Deluxe</h3>
<p>Das Münchener .NET Coding Dojo macht weiter und trainiert weiter hart und unermüdlich. Modernste Software-Entwicklungs-Methoden, TDD im Hochleistungsbereich und CCD Eleganz treffen sich in München zum Coding Dojo der Extraklasse. In München geht es im Mai heiß her! <a href="http://ralfw.blogspot.com/">Ralf Westphal</a> wird mit der .NET Coding Dojo Gemeinde in München ein Dojo der Extraklasse abhalten und das <strong>D in Dojo</strong> dick und fett unterstreichen. <strong>Denken, Designen, Diskutieren!</strong></p>
<p>Als Sahnehäubchen &#8220;On-Top&#8221; wird es eine besondere Location geben, die wir eine Woche vor dem Dojo bekanntgeben werden! Freut euch, dieses „Dojo Deluxe“ darf man nicht verpassen! Sei dabei, wenn die .NET Community mit modernsten Software-Entwicklungs-Methoden das Code-Kata von Ralf löst! Auf geht&#8217;s: <a href="https://www.xing.com/events/net-coding-dojo-deluxe-munchen-506973">Anmelden</a>!</p>
<h3>Coding Dojo Bei Dir!</h3>
<p>Nach diesen Dojo-Highlights komme ich wieder zum Anfang meines Posts zurück. Wir, die .NET Coding Dojo Community aus München sind überzeugt von den Vorteilen, die ein .NET Coding Dojo mit sich bringt. Immer wieder freuen wir uns, gemeinsam eine Aufgabe zu lösen, neue und bekannte Gesichter wiederzusehen und uns auszutauschen. Über kleine Dinge, wie z.B. Resharper-Shortcuts. Aber auch über große Dinge, wie z.B. Template Method vs. Higher Order Functions. Das ist es aber nicht, was Pete und mich als Initiatoren der .NET Coding Dojo-Bewegung nun dazu veranlässt, einen Haken hinter unser erstes Etappenziel zu setzen. Es ist etwas anderes.</p>
<p>Mittlerweile gibt es viele Interessierte, die die Idee und das Konzept des .NET Coding Dojo’s gut finden und selbst implementieren. Es gibt .NET Coding Dojo’s nun nicht mehr nur in München, sondern auch in Berlin, Hamburg, Wien, Augsburg, Ingolstadt, Karlsruhe und sogar ortsunabhängig Online! Auch wenn nicht viel darüber geredet wird oder darf, ich kenne mittlerweile eine handvoll Unternehmen, die intern regelmäßig Dojo’s durchführen, und das mit sensationellen Erfolgen. Doch auch diese Verbreitung und das allgemein steigende Interesse für .NET Coding Dojo’s ist es nicht, was unsere erste Etappe als erledigt markiert. Es ist etwas anderes.</p>
<h3>Goto Dojo Considered Helpful</h3>
<p>Es ist der einfache, ungeschriebene, stille aber dennoch treibende und gedeihende Gedanke, dass die .NET Entwickler-Gemeinde Coding Dojo’s als eine hilfreiche und gleichzeitig unterhaltsame Maßnahme akzeptiert und implementiert. Es ist die Bewegung und Bereitschaft der Community, eigenständig Coding Dojo’s zu organisieren und zu veranstalten. Es ist der schlichte Umstand, dass mittlerweile „.NET Coding Dojo“ nicht mehr nur mit „Pete“ oder „Ilker“ oder diesen Blog hier assoziiert wird, sondern vielmehr mit gemeinsamer Entwicklungsleistung, mit Code-Kata’s, der Clean-Code-Developer-Bewegung und mit den vielen Gesichtern und .NET-Enthusiasten in der Community. Das ist es, was uns dazu veranlässt ein „Check“ zu machen und uns auf schon auf die nächsten Coding Dojo’s zu freuen.</p>
<p>An dieser Stelle möchte ich jeden .NET Entwickler, TDD-Interessierten und CCD-Freund dazu motivieren, selbst an einem .NET Coding Dojo teilzunehmen oder aber ein .NET Coding Dojo zu gründen. Wie man aus der Ankündigungsliste unschwer ableiten kann, ist es garnicht so schwer, ein .NET Coding Dojo zu gründen. Die gesamte Coding-Dojo-Community kann und wird euch dabei unterstützen mitzumachen. Die besten Anlaufstellen sind hier die <a href="https://www.xing.com/net/netdojo/">Xing-Gruppe</a> und die <a href="http://www.facebook.com/pages/NET-Coding-Dojo/10150113747745398">Facebook-Page</a>! Sei dabei, mach mit, es lohnt sich! </p>
<p><strong>Goto Dojo Considered Helpful!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/goto-dojo-considered-helpful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kein Yin ohne Yang, kein Null ohne Pointer</title>
		<link>http://www.gmbsg.com/kein-yin-ohne-yang-kein-null-ohne-pointer/</link>
		<comments>http://www.gmbsg.com/kein-yin-ohne-yang-kein-null-ohne-pointer/#comments</comments>
		<pubDate>Sun, 02 May 2010 21:58:57 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[NULL]]></category>
		<category><![CDATA[Null Reference]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1002</guid>
		<description><![CDATA[Es ist eine schwierige Zeit heutzutage. Besonders für Software-Entwickler. Denn heutzutage gibt es für einen Software-Entwickler viele Dinge, die er lernen, können und beachten muss. Da gibt es die Tools, die Programmiersprachen, die Methoden, die Anforderungen, die Domäne, die Kollegen ...]]></description>
			<content:encoded><![CDATA[<p>Es ist eine schwierige Zeit heutzutage. Besonders für Software-Entwickler. Denn heutzutage gibt es für einen Software-Entwickler viele Dinge, die er lernen, können und beachten muss. Da gibt es die Tools, die Programmiersprachen, die Methoden, die Anforderungen, die Domäne, die Kollegen und noch vieles mehr. Da gibt es schon einmal Momente, in denen man sich unsicher ist. „Mache ich das richtig?“, „gibt es bessere Lösungen?“ oder „hoffentlich passt das&#8230;“. Zumindest geht es mir manchmal so, z.B. bei neuen Dingen oder besonders komplexen Problemstellungen. Ich bin dann froh, wenn ich um mich herum jemanden habe oder finde, der mich und mein Problem versteht und mir helfen kann. Helfen mit seiner Einschätzung, seiner Meinung und seinen Erfahrungen.</p>
<h3>Helfen ist schön, geholfen werden ist schöner!</h3>
<p>Ich weiß es nicht genau, aber ich vermute es ein wenig, dass <a href="http://blog.thomasbandt.de/39/de/blog.html">Thomas</a> auch froh ist, wenn er durch Meinungsaustausch seine eigenen Herausforderungen besser einzuschätzen vermag. Ich persönlich empfinde diese „Kalibrierung“ als wichtigen Baustein zur Festigung der eigenen Meinung.</p>
<p>Thomas hat mit <a href="http://blog.thomasbandt.de/39/2333/de/blog/null-verstaendnis.html">Null Verständnis</a> gefragt, wie die Handhabung von NULL als Rückgabe von Methoden bei anderen Entwicklern umgesetzt und eingeschätzt wird. Viele haben kommentiert, einige haben auch Blog-Post-Antworten geschrieben. Ich habe das mit Kommentaren und dem <a href="http://www.gmbsg.com/null-toleranz/">Null Toleranz-Beitrag</a> auch getan, der <a href="http://ralfw.blogspot.com/2010/05/null-oder-nicht-null-das-ist-hier-die.html">unermüdliche Ralf hat auch kräftig in die Tasten gehauen</a>. Überraschenderweise mit mehreren Aussagen.</p>
<p>Ralf geht in seinem „<a href="http://ralfw.blogspot.com/2010/05/es-hilft-nichts-dass-es-darauf-ankommt.html">Plädoyer für Regeln</a>“ auch auf einige Punkte ein, die ich über die Handhabung von NULL in Anwendungsszenarien bemerkt hatte. Ralf hat so vieles geschrieben, dass es mir schwer fällt, wirklich alle Themen in einem oder mehreren Blog-Posts zu erwidern. Einen Überblick über meine Perspektive möchte ich dennoch geben. </p>
<h3>Mind the Null!</h3>
<p>Ralf stellt im Namen der Community die erste Null-Regel auf: </p>
<blockquote><p>&#8220;Man darf Null benutzen und auch als Wert zurückgeben – aber Vorsicht! Erst prüfen, ob es nicht auch anders geht&#8221;</p></blockquote>
<p>D’accord! Das hatte ich ja auch schon in Kommentaren und <a href="http://twitter.com/ilkerde/status/13197888337">per Twitter</a> erwähnt. Doch wann kann man Null verwenden, wann nicht? Gibt es dafür eine „kontextarme“ Regel? Kann man pauschal sagen: „<a href="http://twitter.com/DerAlbert/status/13246967481">Verwende es nicht!</a>“. Meiner Meinung nach ist das nicht so einfach. Klar kann ich auch sagen, dass man Null einfach nicht anwenden soll, aber ich mache es mir nicht so einfach.</p>
<p>Wenn ich nämlich obige Regel einem Embedded-Entwickler entgegenbringe, dann lacht der mich mal gepflegt vor seinen Kollegen aus. In der Embedded-Entwicklung, wie auch bei sehr ressourcenintensiven Geschäftsanwendungen ist es nämlich durchaus erstrebenswert, oft NULL zurückzugeben, um damit z.B. eine leere Liste oder leere Suche zu signalisieren. Es mögen sich wenige daran erinnern, aber NIL (als Synonym für NULL) ist die Abkürzung für „<a href="http://www.mirrorservice.org/sites/www.gnu-pascal.de/gpc/nil.html">Not-In-List</a>“.</p>
<h3>Null für Hacker</h3>
<p>Ich selbst durfte schon mehrere serverseitige Komponenten von „Exception-Flut“ befreien, in dem ich sie in einigen Stellen durch NULL ersetzt habe. Danach lief der Service doppelt so schnell bei 25% weniger Ressourcenverbrauch. Bin ich jetzt ein Aussetziger, weil ich die Regel nicht befolgt habe?</p>
<p>Ich denke nein. Denn: In einigen Anwendungsszenarien ist es gang und gäbe NULL als Mittel einzusetzen. Mehr noch, es ist „normal“, soz. &#8220;die Regel&#8221;. Deswegen sage ich nach wie vor: Die Regel ist richtig, man sollte vorsichtig mit NULL umgehen und es mit bedacht einsetzen. Doch eine „Faustregel“ ist es für mich noch nicht, denn man kann es (noch) in bestimmten Anwendungsfällen vorteilhaft und stringent einsetzen.</p>
<h3>CatastrophicFailureException ??  Null</h3>
<p>Ralf schreibt: </p>
<blockquote><p>„Null-Regel #2 (von Ilker; noch zu diskutieren): In Katastophenfällen darf Null zurükgegeben werden.“</p></blockquote>
<p>Das ist keine Regel. Den Regelbedarf und die Kreativität zum Design eines Regelwerks wie Ralf habe ich (noch) nicht. Ich habe dafür aber Programme, die Probleme lösen. Bei einigen, wenigen Programmen habe ich NULL als Rückgabe für „katastrophale Fehler“ zurückgegeben. </p>
<p>Das hat mir bei der <a href="http://de.wikipedia.org/wiki/Defensives_Programmieren">defensiven Programmierung</a> geholfen, denn es ging um eine etwas kritischere Komponente, die an Schnittstellen sog. „Guards“ hatte, die alle möglichen Exceptions abgefangen haben. Im Nachhinein betrachtet hätte ich es wohl auch mit einer „CatastrophicFailureException“ oder mehreren, spezifischeren Exceptions lösen können. C&#8217;est ca!</p>
<h3>Null nur bei „gleicher Kategorie“</h3>
<p>Die dritte Regel von Ralf:<br />
<blockquote>&#8220;Null darf nur Rückgabewert sein, wenn Null zur selben Kategorie gehört wie ein Nicht-Null Rückgabewert&#8221;.</p></blockquote>
<p>Naja, streng genommen ist NULL ja nichts, und damit kann man es auch nicht kategorisieren. Antizipieren kann ich da nur, dass es um das <a href="http://blog.thomasbandt.de/39/2331/de/blog/kleiner-helper-fuer-linq-to-sql-tolistordefault-update.html">Beispiel von Thomas mit der Liste</a> gehen kann. Dem kann ich nur zustimmen. Hier ist ein Ausnahmefall zwar auch möglich, aber doch eher selten.</p>
<h3>Dein Pflock ist mein Maibaum!</h3>
<p>Ralf hatte mir zu viel &#8220;Rumgeeiere&#8221; in meinen Aussagen über NULL attestiert. Das will ich doch gerne versuchen besser zu machen und Ralf‘s „Pflock in Boden“ in meine triviale niederbayrische Welt übertragen und damit mal den „Maibaum ins Dorf“ stellen. Also, auf geht’s, Maderl &#038; Buam – mein Maibaum im Dorf „Nullinger“!</p>
<p>Ilker&#8217;s Statement zu Null als Rückgabe von Methoden:</p>
<blockquote><p>
NULL ist gefährlich, meide NULL, außer es gibt triftige Gründe. Triftige Gründe können Performance, Speicher oder dynamische Datenstrukturen sein. Solltest Du NULL als „Indikator“ für etwas verwenden (z.B. „Nicht gefundener Benutzer“), ziehe eine Vermeidungsstrategie mit Exceptions oder ReturnCodes in Erwägung. Sei auf der Hut, NULL ist überall. Prüfe, ob deine Parameter oder deine Methoden NULL zurückgeben. Prüfe besonders, wenn Du parallelisierst oder wichtige Schnittstellen bedienst. Solltest Du ein NULL finden, versuche zunächst damit umzugehen. Geht das nicht mehr, signalisiere die Ausnahme. Achte darauf, dass ein NULL die Methode nicht verlässt.
</p></blockquote>
<p>So, ich hoffe das war <a href="http://de.wikipedia.org/wiki/Kanak_Sprak_%E2%80%93_24_Mi%C3%9Ft%C3%B6ne_vom_Rande_der_Gesellschaft">konkret krass korrekt</a> genug!</p>
<h3>Immer diese Abhängigkeiten</h3>
<p>Nachdem nun der Maibaum in Django Asül-Manier aufgestellt ist, möchte ich neben dem Ausgangsthema mich noch ein wenig den neuen Themen widmen, die Ralf in seinem <a href="http://ralfw.blogspot.com/2010/05/es-hilft-nichts-dass-es-darauf-ankommt.html">Rules of Null-Post</a> erwähnt hat. Ralf regt sich dabei ganz besonders über die „It depends“-Phrase auf. Ja, „It depends“, die allmächtige und einzige Antwort auf alles, was so im Leben an Fragen auf einen zukommen kann. Die Antwort „It depends“ ist kurz, erfüllt die Aufgabe und ist hochgradig flexibel bei gleichzeitig maximaler Wiederverwendbarkeit. Geradezu traumhafte Eigenschaften aus der „Nerd-Software-Entwickler“-Perspektive, oder nicht? Vielleicht ist es deshalb auch so beliebt in unserer Banche?</p>
<p>Spaß beiseite. „It depends“ ist eine Phrase, die mehr oder minder Inhalt liefern kann. Ich stimme Ralf zu, wenn er sagt, dass dieses „Es kommt drauf an“-Getue mit der Zeit nicht mehr auszuhalten ist. Deswegen kann ich die Reaktion von Ralf auch gut verstehen. Ich selbst finde es teilweise immer wieder erschreckend, wie oft auf diese Floskel zurückgegriffen wird, ohne darüber nachzudenken. Dennoch verwende ich es &#8211; ab und an zumindest, wenn ich es für erwähnenswert erachte.</p>
<h3>Niemals ist niemals niemals</h3>
<p>Fakt ist auch, dass „It depends“ nicht nur eine Bierdeckelweisheit ist, sondern auch als Abkürzung verwendet wird. Im Stile „ich erspare mir und Dir jetzt nähere Details“. Das kann gut und schlecht interpretiert werden. So oder so, es kommt darauf an :-) Genauer gesagt, auf den, der es interpretiert.</p>
<p>Womit wir bei der <a href="http://de.wikipedia.org/wiki/Quadratur_des_Kreises">Quadratur des Kreises</a> angelangt wären: Es ist nunmal so, dass wir Systeme vereinfachen und Abstraktionen schaffen, um es zu verstehen. Dabei geht auch Genauigkeit und Wahrheit verloren. Manchmal sogar so sehr, dass die aus der Vereinfachung abgeleitete Erkenntnis nicht mehr adequat bzw. erwartungsgerecht ist. Insofern ist „It depends“ nicht nur eine Fassade oder Ausrede, sondern eine zuweilen notwendige Mahnung, den Kontext und die Erkenntnis zu hinterfragen, sich bewußt mit der Lösung und Problemstellung auseinanderzusetzen. Für die Agilisten unter uns: „It depends“ ist ein auch ein Aufruf zum „Inspect &#038; Adapt“.</p>
<p>Ich kann mich guten Gewissens Ralf anschließen, wenn es darum geht, Leitfäden und Empfehlungen über die Anwendung von NULL mit der Community zu erarbeiten. Meinungsaustausch ist Katalysator für Lernen, Entdecken, Erfahren und Bestätigen. Doch ein Regelwerk will ich nicht erstellen. Ich gebe meine Meinung und meinen Standpunkt gerne wieder. So wie ich es erfahren habe und so, wie ich es für gut empfinde.</p>
<p>Regeln habe ich auch. Ich habe meine eigenen Regeln, ich habe Teamregeln und ich habe noch eine Reihe weiterer Regeln, die ich für mich beachte und schätze. Regeln sind für mich wichtig. Ich möchte damit sagen, dass ich durchaus Ralfs Motivation nachvollziehen kann. Doch ich habe meine Beiträge nicht mit dieser Motivation mit der Community geteilt. Mein Ziel ist die Kommunikation und der Erfahrungsaustausch. Das wird auch so bleiben.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/kein-yin-ohne-yang-kein-null-ohne-pointer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Null Toleranz</title>
		<link>http://www.gmbsg.com/null-toleranz/</link>
		<comments>http://www.gmbsg.com/null-toleranz/#comments</comments>
		<pubDate>Sun, 02 May 2010 00:09:32 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[NULL]]></category>
		<category><![CDATA[Null Reference]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Tony Hoare]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=986</guid>
		<description><![CDATA[Eine angeregte Diskussion ist gestern &#8220;ent-Bandt&#8221; :-) mit den Blog-Posts über den kleinen ToListOrDefault()-Helper und die dadurch entstandende Null-Verständnis-Thematik sowie der philosophischen Ausführung über das Null oder nicht Null in Anwendungen. Man kann in den Posts wunderbar nachlesen, worum es ...]]></description>
			<content:encoded><![CDATA[<p>Eine angeregte Diskussion ist gestern &#8220;ent-Bandt&#8221; :-) mit den Blog-Posts über den kleinen <a href="http://blog.thomasbandt.de/39/2331/de/blog/kleiner-helper-fuer-linq-to-sql-tolistordefault-update.html">ToListOrDefault()-Helper</a> und die dadurch entstandende <a href="http://blog.thomasbandt.de/39/2333/de/blog/null-verstaendnis.html">Null-Verständnis-Thematik</a> sowie <a href="http://ralfw.blogspot.com/2010/05/null-oder-nicht-null-das-ist-hier-die.html">der philosophischen Ausführung über das Null oder nicht Null</a> in Anwendungen. Man kann in den Posts wunderbar nachlesen, worum es geht &#8211; deswegen hier nur eine kleine Rekapitulation.</p>
<p>Thomas stellt zur Debatte, ob man aus Repository-Methoden ab und zu auch mal null zurückgeben darf/kann/soll. So z.B. bei so einer Methode:</p>
<pre name="code" class="brush: csharp">
User GetUserByName(string name);
</pre>
<h3>Mache das Unmögliche möglich?!?</h3>
<p>Einige Leute finden das garnicht besonders gut. Sie bevorzugen lieber soetwas wie einen &#8220;nicht-existenten&#8221; User zurückzugeben. Also eine Instanz einer Klasse, die eigentlich garnicht möglich wäre (weil sie ja die nicht exsistierende Instanz darstellt). Programmtechnisch ist das sicherlich recht einfach lösbar &#8211; oftmals mit einer statischen Property, die sich wiederum eines privaten Konstruktors bedient. In dem obigen Beispiel könnte eine derartige Implementierung ungefähr so aussehen:</p>
<pre name="code" class="brush: csharp">
public User GetUserByName(string name)
{
  if (!repository.UserExists(name))
    return User.NotExistent;

  //user laden und zurückgeben
}
</pre>
<p>Eine zweite, nicht minder bevorzugte Alternative zur Rückgabe von NULL ist die beliebte Exception. Falls also kein Benutzer unter dem angefragten Namen existieren sollte, dann soll eine Ausnahme signalisiert werden. Ganz einfach implementiert:</p>
<pre name="code" class="brush: csharp">
public User GetUserByName(string name)
{
  if (!repository.UserExists(name))
    throw new UserNotFoundException(name);

  // user laden und zurückgeben
}
</pre>
<p>Beides sind sicherlich mögliche und sogar gute Alternativen zu der Implementierungsvariante, die Thomas zur Diskussion gestellt hat:</p>
<pre name="code" class="brush: csharp">
public User GetUserByName(string name)
{
  if (!repository.UserExists(name))
    return null;

  // user laden und zurückgeben
}
</pre>
<p>Um es kurz zu fassen: Alle drei Varianten sind möglich, alle drei Varianten sind gut, alle drei Varianten sind schlecht. Es kommt auf den Anwendungsfall an. Die beliebte &#8220;It-Depends&#8221;-Weisheit streckt das Thema mit geballter Kraft nieder. Dennoch ist es eine Untersuchung wert, denn ungewöhnlicherweise wird die NULL-Variante kategorisch als falsch und &#8220;böse&#8221; bewertet.</p>
<h3>Nullbivalenz</h3>
<p>NULL ist ein besonderer Wert. Er ist der Wert, der eigentlich nicht zugewiesen werden kann. Genauer genommen ist er kein Wert, sondern nichts anderes als die knapp in vier Buchstaben formulierte Aussage &#8220;Ein für eine bestimmte Werteklasse belegter Ort wurde mit keinem Wert belegt&#8221;. Ergo: Null ist kein Wert. Ja, aber ist das denn nicht genau das, was <code>GetUserByName</code> ausdrücken und zurückgeben muss, wenn es keinen Benutzer für den gegebenen Namen findet?</p>
<p>Schaut man sich die erste Alternative zu NULL an (also das <code>User.NonExistent</code>-Konstrukt), dann kann man sagen: Joa, ok &#8211; ist aber das Gleiche. User.NonExistent ist sicherlich expliziter als NULL. NULL ist aber schon da und genau für solche Dinge gedacht. Die Aufgabe von NULL ist ja genau die, keinen Wert darzustellen.</p>
<p>Und wie sieht es mit Alternative Zwei &#8211; der <code>UserNotFoundException</code> aus? Die Excpetion ist auch explizit. Mehr noch, die Exception ist flexibel und rigoros gleichermaßen. Flexibel, weil sie jederzeit aus dem Nichts auftauchen kann. Rigoros, weil sie eine Fülle von Informationen über den Kontext sammeln und mitgeben kann. Die Exception sagt hier klar und deutlich: &#8220;Es gibt keinen Wert, weil der Benutzer {name} nicht gefunden wurde.&#8221;. Scheinbar ein Vorteil gegenüber den anderen Varianten. Im Ergebnis ist es jedoch nicht wesentlich von den anderen Herangehensweisen unterscheidbar.</p>
<h3>Null Sicherheit</h3>
<p>Nun, offensichtlich ist die sprechendere Variante der Exception vorteilhaft und damit dem NULL vorzuziehen. Doch beim zweiten Blick entpuppt sich der Vorteil als nicht so deutlich als zunächst vermutet. Denn in der Praxis kann sich die &#8220;unklare&#8221; und &#8220;unexplizite&#8221; Art von NULL wieder als erwünscht erweisen. </p>
<p>So muss man bei Exceptions, um den Mehrwert zu kennen, auch deren Typ genau kennen. Man muss also Wissen, das es sich um eine <code>UserNotFoundException</code> handelt. Erst dann kann man auch erfahren, welcher ominöse Benutzer unauffindbar ist. Das kann durchaus problematisch werden, wenn man also im höheren Callstack wissen muss, um welche Exception es geht, denn schliesslich schafft man sich dadurch eine Abhängigkeit auf den niedrigeren Code.</p>
<p>Null ist also eine unsichere, uninformative, aber immer verfügbare und unabhängige Variante, dem Aufrufer zu sagen: &#8220;Es gibt keinen Wert für das, was Du von mir verlangst&#8221;. Wenn man sich mit der Anwendung von NULL jahrelang auseinandergetzt hat und auch ein wenig die ungeliebten Interna von Speichermanagement &#038; Datenstrukturen hineinblickt, dann wird NULL schnell zu einer praktikablen Lösung für schwierige Situationen. </p>
<p>Doch vor Allem bei NULL stellt man immer wieder fest: praktikabel und elegant sind zwei verschiedene paar Schuhe. Denn NULL ist genauso nichtssagend wie vielseitig. NULL zwingt den Aufrufer zum Abwägen: Soll ich das Ergebnis gleich auswerten oder lieber überprüfen? Ein wunderbares Beispiel dafür ist sicherlich der &#8220;if (x != null)&#8221;-Check &#8211; die Null-Prüfung. Das wird vor Allem dann zum Problem, wenn man mit (gewollt oder ungewollt) unbekannten Komponenten arbeitet. Im Interface oder in der Typsignatur steht es jedenfalls sehr selten erkennbar drin, ob nun in Einzelfällen NULL zurückgeliefert wird oder nicht.</p>
<h3>Null ist nicht gleich Null</h3>
<p>Für mich gibt es beim Umgang und bei der Anwendung von Null keine Faustregel. Ich gebe in einigen Methoden NULL zurück. Meistens genau dann, wenn ich wirklich damit ausdrücken möchte, dass etwas katastrophales passiert ist. Ich finde es sehr schwerwiegend, NULL als Zuweisung oder Rückgabe stehen zu lassen &#8211; aber ich mache es manchmal ganz bewusst. In einer Anwendung, in der ich z.B. Benutzer über einen Authentifizierungsdienst identifizieren muss, bevor ich überhaupt etwas anderes machen kann, kann die folgende Signatur NULL zurückliefern:</p>
<pre name="code" class="brush: csharp">
interface IAuthenticationService
{
  Account SignIn(string user, string password);
}
</pre>
<p>Es kann alles mögliche passiert sein  &#8211; keine Verbindung zum Server, falscher Server, Verbindungsfehler, Connection Timouts, Benutzer nicht gefunden, Benutzer gesperrt, Passwort abgelaufen, falsches Passwort &#8211; all dies würde ich versuchen über Exceptions oder Return-Codes zu erledigen. Die meisten der Exceptions gibt es ja schon frei Haus vom Framework. Aber für das mich Unbekannte und Unerwartete gibt es immer noch eine Rückgabe, und die heisst NULL.</p>
<h3>Null-Summen-Spiel</h3>
<p>Generell kann ich für mich nur sagen, dass ich gelernt habe mit NULL sehr vorsichtig umzugehen. Ich vermeide es so gut wie möglich. Exceptions sind ein gutes Mittel &#8211; allerdings setze ich sie auch nicht sehr oft ein. Die Bürde der Abhängigkeit ist schon da &#8211; obwohl es natürlich in der Contract-Assembly definiert ist. Bei Repositories habe ich (fast) immer Ergebnisse die nicht NULL liefern. Andererseits setze ich NULL als Rückgabe auch öfter ein, wenn ich nur eine &#8220;schwere&#8221; Ausnahme in meinem Code feststelle.</p>
<p>Im obigen Beispiel hätte ich wohl NULL als Rückgabe toleriert, vor Allem, wenn ich davon ausgehen kann, dass es oft &#8211; oder sehr oft &#8211; dazu kommen kann und diese Tatsache ein schwerwiegendes Problem darstellt. Ein schönes Beispiel sind immer wieder die Brute-Force und DOS-Attacken auf Webportale. </p>
<p>Ich hätte wahrscheinlich nicht NULL zurückgegeben, sondern eine Exception ausgelöst, wenn ich das Ganze als wiederverwendbare, allgemeine Kompontente entwickeln würde. </p>
<p>So oder so &#8211; beides ist machbar und beides hat seine Berechtigung. Klar und deutlich soll aber abschließend erwähnt sein: NULL zu vermeiden ist eine gute Sache. Es macht den Code expliziter, offensichtlicher und lesbarer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/null-toleranz/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>23 Nisan &#8211; Children&#8217;s Day</title>
		<link>http://www.gmbsg.com/23-nisan-childrens-day/</link>
		<comments>http://www.gmbsg.com/23-nisan-childrens-day/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 23:48:05 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[23 Nisan]]></category>
		<category><![CDATA[Atatürk]]></category>
		<category><![CDATA[Children]]></category>
		<category><![CDATA[Clifford Stoll]]></category>
		<category><![CDATA[Future]]></category>
		<category><![CDATA[Kemalism]]></category>
		<category><![CDATA[Kids]]></category>
		<category><![CDATA[Play]]></category>
		<category><![CDATA[Social]]></category>
		<category><![CDATA[TED]]></category>
		<category><![CDATA[Turkish]]></category>
		<category><![CDATA[World]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=974</guid>
		<description><![CDATA[I&#8217;ve never posted in English on my blog before. Since a few months my stats report that more than 1/3rd of my visitors aren&#8217;t germans, so I guess it&#8217;s time to write some stuff in English here as well. International ...]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve never posted in English on my blog before. Since a few months my stats report that more than 1/3rd of my visitors aren&#8217;t germans, so I guess it&#8217;s time to write some stuff in English here as well. International and intercultural thinking suits well today. Today, it&#8217;s April 23rd &#8211; or <strong>23 Nisan</strong>, as Turkish people would say. So what&#8217;s so special about 23 Nisan? Give me a few lines to lay this out from my personal perspective.</p>
<p>I have roots in Turkey. My parents, my uncles, aunts, nephews and quite a few friends are Turks. Though not born and not living in turkey, I am feeling as a Turk as well. I kind of love my turkish roots. I like turkish traditions like enjoying <a href="http://en.wikipedia.org/wiki/Turkish_tea">Cay</a> or going to <a href="http://en.wikipedia.org/wiki/Turkish_bath">Hamam</a>. I&#8217;m a Muslim as well. My strong belief is that religion, tolerance and respect are tightly coupled together. But one of the most imprinting thing of my turkish background surely is my relation to <a href="http://en.wikipedia.org/wiki/Kemalist_ideology">Kemalism</a>. To those (probably the most) not being familiar with it: It&#8217;s not a political kind of thing, more ideological or mental. Don&#8217;t get me wrong on this. I&#8217;m the moderate kind of guy from the next door and I love being such. But what the heck am I starting to paint background with Kemalism here?</p>
<h3>Thank you, Mr. Mustafa Kemal Atatürk</h3>
<p>There&#8217;s a turkish idiom saying &#8220;Ne mutlu türküm diyene&#8221; (&#8221;Glad who claims being Turk&#8221;). It&#8217;s a quote from <a href="http://en.wikipedia.org/wiki/Mustafa_Kemal_Atat%C3%BCrk">Mustafa Kemal Atatürk</a> &#8211; basically the guy who formed the foundation of modern Turkey as you and I know it nowadays. He didn&#8217;t meant this to be in a patriotic or fundamental way. His perspective was some sort of enlightenment through modernization at that time. His outermost and strong commitment was to <strong>establish the spirit of progress, education and humanity</strong>. And guess what, he succeeded in doing so &#8211; at least for me.</p>
<p>He was the one proclaiming this day, April 23rd, as the national and international day of children. &#8220;It&#8217;s the children being our future&#8221; he said. In order to keep people being aware about this fact, he just decided to announce Children&#8217;s Day as official holiday. Boom. It&#8217;s that easy sometimes.</p>
<h3>Celebrate Youth, Teens, Children, Kids, Babys</h3>
<p>Atatürk&#8217;s a genius. This &#8220;children being our future&#8221; statement reminds me of that incredibly admirable <a href="http://www.youtube.com/watch?v=Gj8IA6xOpSk">TED Talk of Clifford Stoll</a> a few years ago &#8211; his talk is a must see, not only because of his advice to consult kindergarten teachers when you want to know how the future would or might be. Well, back to my beloved &#8220;23 Nisan&#8221;. From the day of Atatürk&#8217;s announcement, this day has always been a day full of celebration and honor towards the younger people around us. The teens, kids and babys, you know. Yes, it&#8217;s worth. No, not only worth, it&#8217;s important, it&#8217;s <b>fundamental to honor and respect our next generation</b> as we respect and honor our parents and elder fellows as well.</p>
<h3>You are important!</h3>
<p>And hey &#8211; what&#8217;s so bad about respecting our future? Nothing. That&#8217;s why I now ask you &#8211; <strong>yes you</strong> &#8211; to take action. It&#8217;s so easy and yet powerful to celebrate 23 Nisan. Following is a rough guide with a top 10 list you can do today to celebrate Children&#8217;s day with me, the world and all children:</p>
<ul>
<li><strong>Smile!</strong><br/>An honest, respectful, warm smile transports a ton of goodness: appreciation, value, respect!</li>
<li><strong>Play a little game!</strong><br/>Something like &#8220;Noughts and Crosses&#8221; or &#8220;Spy with my little Eye&#8221;&#8230;</li>
<li><strong>Treat kids as humans!</strong><br/>They might not know all this cool things you know. But they have power and brain enough to understand it!</li>
<li><strong>Give them small presents!</strong><br/>Like a small chocolate, fancy crayons, a colorful book&#8230;</li>
<li><strong>Give answers to questions!</strong><br/>Kids love asking questions, especially why-who-what&#8217;s. Learn to love answering them (be creative with your answers :-))</li>
<li><strong>Let kids play together!</strong><br/>Give them the chance &#038; time to meet each other. Kids have a rigorous and emotional social life.</li>
<li><strong>Support children-friendliness!</strong><br/>Organizations, Kindergartens, Schools &#8211; whatever it is, it&#8217;s good to support people supporting kids!</li>
<li><strong>Take care of them!</strong><br/>Kids might be sad at times. Even a child&#8217;s life can be tough. Take care of them and help them to smile again!</li>
<li><strong>Be a kid!</strong><br/>Kids love kids. As &#8220;adult&#8221;, it&#8217;s good, refreshing and fun to adapt perspectives of children. Try it! Have fun!</li>
<li><strong>Be yourself!</strong><br/>The true power of a child is honesty. Be honest to others, be honest to kids, be honest to yourself!</li>
</ul>
<p>Come, join and celebrate <strong>23 Nisan &#8211; the Children&#8217;s Day</strong> with me!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/23-nisan-childrens-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meta-Test: NSpec &#8211; der spezifizierende BDD-Veteran</title>
		<link>http://www.gmbsg.com/meta-test-nspec-der-spezifizierende-bdd-veteran/</link>
		<comments>http://www.gmbsg.com/meta-test-nspec-der-spezifizierende-bdd-veteran/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 20:19:47 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Meta-Test]]></category>
		<category><![CDATA[NSpec]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=950</guid>
		<description><![CDATA[Einige meiner Freunde hatten schon Mutmaßungen geäußert, das xUnit wohl das nächste Framework sein wird, welches ich mit &#8220;FizzBuzz&#8221; bearbeite. Keine Sorge, xUnit ist auch auf meiner Liste, aber heute soll zunächst einmal ein etwas weniger bekanntes Framework beäugelt werden: ...]]></description>
			<content:encoded><![CDATA[<p>Einige meiner Freunde hatten schon Mutmaßungen geäußert, das <a href="http://xunit.codeplex.com/">xUnit</a> wohl das nächste Framework sein wird, welches ich mit &#8220;FizzBuzz&#8221; bearbeite. Keine Sorge, xUnit ist auch auf meiner Liste, aber heute soll zunächst einmal ein etwas weniger bekanntes Framework beäugelt werden: <a href="http://nspec.tigris.org/">NSpec</a>.</p>
<p><a href="http://codebetter.com/blogs/jeremy.miller/archive/2006/06/27/146872.aspx">NSpec ist einer der ersten &#8211; wenn nicht sogar das erste explizite &#8211; BDD-Framework für .NET</a>. Mittlerweile wird es auch nicht mehr aktiv betreut. &#8220;Schade&#8221;, denkt man sich auf der einen Seite. Andererseits jedoch nicht sooo schlimm. Schließlich war der Autor mit dieser &#8220;finalen&#8221; Version offensichtlich zufrieden. Überdies ist die NSpec-Basis auch in andere Test-Frameworks eingeflossen &#8211; dazu aber später mehr. Bleibt auch noch anzumerken, dass man NSpec und MSpec nicht miteinander verwechseln sollte. Die Frameworks unterscheiden sich massiv, obwohl die Namensähnlichkeit das nicht vermuten lässt. Auch <a href="http://github.com/machine/machine.specifications">MSpec</a> wird in meiner kleinen Serie sicherlich in der Zukunft noch seinen Platz finden. Doch nun zurück zu NSpec (N wie Nordpol) :-).</p>
<p>Bei NSpec dreht sich, wie nicht anders zu erwarten war, alles um Spezifikationen. Ich werde hier nicht näher auf die <a href="http://www.gmbsg.com/bdd-thebetterwayofunittesting/">Gemeinsamkeiten oder Unterschiede zwischen TDD und BDD</a> eingehen, werde auch nicht groß ausholen, wie und wieso BDD entstanden ist. Es sei nur kurz angerissen, dass bei BDD nicht das &#8220;testen&#8221; im Vordergrund steht, sondern die Spezifizierung des Verhaltens &#8211; Behavior Driven Design eben. Abgesehen von der Terminologie ergeben sich weitere Unterschiede, die auch am Beispiel von NSpec feststellbar sind. Genug Vorgeplänkel, auf geht&#8217;s zum Test-Training mit dem <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataFizzBuzz">FizzBuzz-Kata</a>!</p>
<h3>Der Ton macht die Musik &#8211; das Wort macht die Geschichte</h3>
<p>Visual Studio öffnen, Projekt anlegen, Referenz hinzufügen, los geht&#8217;s! Äähhh&#8230; wohl doch nicht&#8230; wie schreibt man eigentlich Spezifikationen im Code? Also Finger wieder weg von der Tastatur und überlegen, um was es eigentlich geht. Ok, es geht um FizzBuzz. FizzBuzz ist ein Spiel mit <strong>Spielregeln</strong> &#8211; das ist es im Endeffekt, worum es hier geht. So eine Spielregel ist recht einfach, denn es gibt zu einer bestimmten Spielsituation &#8211; sagen wir mal zu einem bestimmten <strong>Kontext</strong> &#8211; immer eine Regel, die man anwenden muss, damit man weiter im Spiel bleibt. Anders ausgedrückt ist bei einer Spielsituation zu prüfen, ob die Regel richtig angewendet wird &#8211; ob also die <strong>Erwartungen</strong> an das Spielverhalten erfüllt werden.</p>
<p>Aha &#8211; so ist das also. Hört sich vielleicht etwas abgedreht an, aber dieses kurze <a href="http://de.wikipedia.org/wiki/Repetitorium">Repetitorium</a> hilft beim Schreiben der ersten Spezifikation ungemein. Denn NSpec kennt zwei Attribute, namentlich <code>[Context]</code> und <code>[Specification]</code>. Mit der kleinen o.g. FizzBuzz-Geschichte macht das auch Sinn, wie man dann auch im Code sehen kann:</p>
<pre name="code" class="brush: csharp">
using NSpec.Framework;

namespace FizzBuzzNSpec.Specs
{
    [Context]
    public class when_a_number_is_a_multiple_of_three
    {
        [Specification]
        public void then_translation_should_return_fizz()
        {
            Specify.That(game.Translate(6)).ShouldEqual("Fizz");
        }

        private readonly FizzBuzz game = new FizzBuzz();
    }
}
</pre>
<h3>Anderes Framework, andere Sitten</h3>
<p>Die Konsequenz dieser Verbalisierung und Strukturierung ist zunächst einmal eine verbesserte Lesbarkeit. Weiterhin fällt auf, dass es nicht mehr eine einzige &#8220;Testklasse&#8221; gibt, sondern 4 verschiedene Spezifikationsklassen. Für jede Spielregel eine. Das Stukturierungssystem ist zwar mit klassischen Test-Frameworks auch möglich, wird aber nicht so offensichtlich &#8220;verlangt&#8221; wie es das BDD-Test-Framework NSpec hier tut.<br />
<a href="http://www.gmbsg.com/wp-content/uploads/2010/04/nspec_structure.png"><img src="http://www.gmbsg.com/wp-content/uploads/2010/04/nspec_structure.png" alt="nspec_structure" title="nspec_structure" width="353" height="235" class="alignright size-full wp-image-962" /></a><br />
Den Code für die anderen Spielregeln spare ich mir &#8211; es sieht dem o.g. Beispiel sehr ähnlich :-). Hat man erst einmal das &#8220;sprechendere&#8221; schreiben der Tests bzw. Spezifikationen verinnerlicht, geht es mit NSpec auch zügig voran. Schade ist hier die fehlende Integration und Unterstützung für Visual Studio und die üblichen Code-Assistenten. Mir blieb also nichts anderes übrig, als in der Konsole meine Tests auszuführen. Das hat mich beim implementieren schon gebremst.</p>
<h3>Bewertung</h3>
<ul>
<li><b>Dauer</b><br/>Naja, knapp 15 Minuten für FizzBuzz ist doch schon dreimal länger als mit NUnit. Die mangelnde Integration und die 4 Klassen machen schon etwas aus.</li>
<li><b>Größe</b><br/>Statt wie bei den &#8220;Klassikern&#8221; 4 Methoden sind es nun 4 Klassen. Schon etwas mehr Code &#8211; hält sich aber noch &#8220;in Grenzen&#8221;.</li>
<li><b>Tooling</b><br/>Schlecht. Der Runner ist dabei &#8211; das war&#8217;s.</li>
<li><b>Usability</b><br/>Geht so. Die Assertions mit <code>Specify</code> reichen für die gröbsten Fälle aus.</li>
<li><b>Support</b><br/>Die Entwicklung von NSpec ist eingestellt. Support damit auch. Zukunftssicherheit ist etwas anderes.</li>
</ul>
<h3>NSpec for a taste of BDD</h3>
<p>NSpec &#8211; ein Vorreiter im .NET-Bereich was BDD angeht. Man merkt dem Framework deutlich an, dass es ein &#8220;erster Wurf&#8221; von der Adaption der BDD-Methodik ist. Nichtsdestotrotz ist as Framework schlank, stabil und gut anwendbar. Es zeigt schon in der Anwendung, wie das &#8220;System BDD&#8221; die Herangehensweise an die Spezifikation und Verifikation von Code ändert. Man beschäftigt sich automatisch mehr mit Kernaussagen und ist &#8220;gezwungen&#8221;, sich deutlicher und expliziter in der Domänensprache zu artikulieren. NSpec kann diesen systematischen Aspekt transportieren, ist aber mittlerweile auf Grund der mangelnden Integration und des fehlenden Supports nicht mehr für &#8220;Real-World&#8221;-Projekte ernstzunehmen. Trotzdem hat mir der Ausflug mit NSpec Spaß gemacht. Da bekomme ich glatt Lust &#038; Laune mir schon das nächste Framework anzuschauen. Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/meta-test-nspec-der-spezifizierende-bdd-veteran/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Meta-Test: NUnit &#8211; All-Time-Hall-Of-Fame-Most-Valuable-Tester</title>
		<link>http://www.gmbsg.com/meta-test-nunit-all-time-hall-of-fame-most-valuable-tester/</link>
		<comments>http://www.gmbsg.com/meta-test-nunit-all-time-hall-of-fame-most-valuable-tester/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 21:27:01 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[NUnit]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=920</guid>
		<description><![CDATA[Der Titel ist unmißverständlich: NUnit, der Godfather der Test-Frameworks für .NET, wird heute von mir in der Reihe &#8220;Meta-Test, Test-Frameworks im Vergleich&#8221; ein wenig unter die Lupe genommen. Gestern hatte ich schon den Redmond-Test-Botschafter MS-Test im Visier. Irgendwie ist es ...]]></description>
			<content:encoded><![CDATA[<p>Der Titel ist unmißverständlich: <a href="http://nunit.com/">NUnit, der Godfather der Test-Frameworks für .NET</a>, wird heute von mir in der Reihe &#8220;<a href="http://www.gmbsg.com/meta-test-tdd-bdd-test-frameworks-im-vergleich/">Meta-Test, Test-Frameworks im Vergleich</a>&#8221; ein wenig unter die Lupe genommen. Gestern hatte ich schon den <a href="http://www.gmbsg.com/meta-test-ms-test-visual-studio-on-board-test-framework/">Redmond-Test-Botschafter MS-Test</a> im Visier. Irgendwie ist es schon komisch. Obwohl Microsoft mit MS-Test ein umfangreiches Framework für Testing der professionellen Entwicklergemeinde zur Verfügung gestellt hat, hört man unter Gleichgesinnten und Kollegen fast immer die gleiche Story: &#8220;Tests? Unit Tests? Klar! NUnit!&#8221;</p>
<h3>Der Pate unter den Test-Frameworks</h3>
<p>So ist es auch nicht weiter erstaunlich, dass man nahezu überall, wo das Wörtchen &#8220;Test&#8221; fällt, auch &#8220;NUnit&#8221; zu sehen bekommt. Sei es nun bei den Codeassistenten, bei Build- oder CI-Tools, Addins und sogar weiteren Test-Frameworks. Die <a href="http://www.google.de/search?q=nunit">Verbreitung und Unterstützung von NUnit</a> ist hier einfach nicht zu toppen. Aber auch die vielen Kontakte und Beziehungen des &#8220;Paten der Test-Frameworks&#8221; helfen nicht viel beim Meta-Test mit dem FizzBuzz-Kata! Auf geht&#8217;s!</p>
<h3>Der Code</h3>
<p>FizzBuzz ist mit NUnit und den &#8220;Standard-TDD-Regeln&#8221; schnell implementiert. Referenz hinzufügen, Testklasse inklusive Testmethode aufbauen, noch schnell ein <code>using NUnit.Framework;</code> und die beiden Attribute <code>[TestFixture]</code> (für Klassen) sowie <code>[Test]</code> hinzugefügt &#8211; und schon kann man fröhlich testen!<br />
<a href="http://www.gmbsg.com/wp-content/uploads/2010/04/nunit_guirunner1.png"><img src="http://www.gmbsg.com/wp-content/uploads/2010/04/nunit_guirunner1-300x152.png" alt="nunit_guirunner" title="nunit_guirunner" width="300" height="152" class="alignright size-medium wp-image-935" /></a><br />
Wer jetzt einen Codeassistenten wie <a href="http://www.jetbrains.com/resharper/">Resharper</a> oder <a href="http://www.devexpress.com/Products/Visual_Studio_Add-in/Coding_Assistance/">Coderush</a> hat, ist praktisch nur ein Klick bzw. Tastenschlag von der Testausführung entfernt. Doch auch ohne &#8220;Code-Beschleuniger&#8221; gehen NUnit-Tests elegant, z.B. mit dem <a href="http://www.testdriven.net/">TestDriven.NET Addin</a>. Mal von diesen &#8220;Integrationstüren&#8221; abgesehen, bietet NUnit auch eigenständige Runner für die Konsole sowie auch als Windows-Anwendung an. Passt!</p>
<pre name="code" class="brush: csharp">
using NUnit.Framework;

namespace KataFizzBuzzNUnit
{
    [TestFixture]
    public class FizzBuzzTest
    {
        private FizzBuzz target = new FizzBuzz();

        [Test]
        public void Multiples_Of_Three_Returns_Fizz()
        {
            Assert.That(target.Translate(6), Is.EqualTo("Fizz"));
        }

        [Test]
        public void Multiples_Of_Five_Returns_Buzz()
        {
            Assert.That(target.Translate(10), Is.EqualTo("Buzz"));
        }

        [Test]
        public void Multiples_Of_Three_And_Five_Returns_FizzBuzz()
        {
            Assert.That(target.Translate(15), Is.EqualTo("FizzBuzz"));
        }

        [Test]
        public void No_Multiples_Of_Three_Or_Five_Returns_Number()
        {
            Assert.That(target.Translate(7), Is.EqualTo("7"));
        }
    }
}
</pre>
<p>Bei der Implementierung fühlt man sich schon fast wie bei MS-Test, jedoch mit einem ganz gewaltigen Unterschied: Die Assert-Klasse im Allgemeinen sowie die <code>Assert.That()</code> Syntax von NUnit sind mächtig &#8211; und mächtig hilfreich. Das mit <a href="http://www.nunit.org/index.php?p=constraintModel&#038;r=2.4">NUnit 2.4 eingeführte Constraint Model</a> ist nicht nur besser lesbar, sondern auch intuitiver. Kennt man mal die wichtigsten Constraints, vergisst man sie auch nicht mehr so schnell. Alles in Allem ist TDD mit NUnit eine runde Sache. In weniger als 5 Minuten strahlten meine 4 Tests und ich uns gegenseitig an.</p>
<h3>Bewertung</h3>
<ul>
<li><b>Dauer</b><br/>Zackig, Knackig, ohne Trärä und Tamtam. FizzBuzz-Regeln in 5 Minuten. Mit Codebeschleuniger geht&#8217;s sogar noch schneller. Passt.</li>
<li><b>Größe</b><br/>Ähnlich wie bei MS-Test. Eine kompakte Testklasse mit 4 Testmethoden.</li>
<li><b>Tooling</b><br/>MS-Test war schon sehr gut &#8211; doch NUnit ist sogar noch besser! Die Verbreitung in der OSS-Gemeinde macht sich hier bemerkbar. Top.</li>
<li><b>Usability</b><br/>Sehr gut. Assert&#8217;s schön mit Constraints. Wenn man möchte sogar noch beschleunigt über das Erben von AssertionHelper. Angenehm.</li>
<li><b>Support</b><br/>Unmengen an Material im Internet. Open-Source, stabil, große Gemeinde, aktive Entwicklung. Zufrieden.</li>
</ul>
<p>Hmm, es fällt mir schon schwer, etwas &#8220;negatives&#8221; an NUnit zu finden. Es mag den einen oder anderen stören, wie die Test-Projekt-Struktur von NUnit aufgebaut ist. Auch der GUI-Runner ist jetzt nicht der Augenschmaus schlechthin. Doch die Kernkompetenzen werden von NUnit bravourös gemeistert.</p>
<h3>NUnit &#8211; Die Referenz</h3>
<p>Als kleines Fazit kann ich für mich schon mal sagen &#8211; NUnit hat die Messlatte ganz schön hochgelegt. Effektiv betrachtet ist NUnit als Test-Framework derzeit die Referenz, mit der sich alle anderen messen lassen müssen. Das ist auch gut so, denn NUnit ist durch die jahrelange, stetige Entwicklung viele Schritte gegangen &#8211; manchmal auch einige Schritte voraus. Bleibt die Frage offen: Gibt es noch bessere Test-Frameworks für C# und .NET als NUnit? Abwarten, meine Test-Serie geht in Kürze weiter. Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/meta-test-nunit-all-time-hall-of-fame-most-valuable-tester/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Meta-Test: MS Test &#8211; Visual Studio On Board Test-Framework</title>
		<link>http://www.gmbsg.com/meta-test-ms-test-visual-studio-on-board-test-framework/</link>
		<comments>http://www.gmbsg.com/meta-test-ms-test-visual-studio-on-board-test-framework/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 18:50:41 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Meta-Test]]></category>
		<category><![CDATA[MSTest]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=859</guid>
		<description><![CDATA[In meiner kleinen Blog-Serie über den Vergleich von Test-Frameworks für .NET / C# macht der &#8220;Platzhirsch&#8221;, das On Board Visual Studio Test-Framework MS-Test den Anfang. Genau zur richtigen Zeit des Launches von Visual Studio 2010 wird hier das dazugeörige Test-Framework ...]]></description>
			<content:encoded><![CDATA[<p>In meiner kleinen <a href="http://www.gmbsg.com/?p=827">Blog-Serie über den Vergleich von Test-Frameworks für .NET / C#</a> macht der &#8220;Platzhirsch&#8221;, das On Board Visual Studio Test-Framework MS-Test den Anfang. Genau zur richtigen Zeit des <a href="http://www.microsoft.com/visualstudio/en-us/products">Launches von Visual Studio 2010</a> wird hier das dazugeörige Test-Framework unter die Lupe genommen. MS-Test ist seit VS2005 integrierter Bestandteil der professionellen Versionen von Visual Studio &#8211; womit der erste Nachteil schon zwischen den Zeilen hindurchschimmert. Leider ist MS-Test bis zum heutigen Tag nicht in den <a href="http://www.microsoft.com/express/Downloads/">Visual Studio Express-Versionen</a> verankert &#8211; also quasi nicht &#8220;frei verfügbar&#8221;. Wieso das so ist, ist mir immer noch ein Rätsel.</p>
<h3>Los geht&#8217;s mit Projekten</h3>
<p>Aber zurück zur Sache. Es muss ja schließlich das mittlerweile mehr als bekannte FizzBuzz-Kata als Fingerübung implementiert werden.<br />
<img src="http://www.gmbsg.com/wp-content/uploads/2010/04/mstest_createproject_vs-300x171.png" alt="mstest_createproject_vs" title="mstest_createproject_vs" width="300" height="171" class="alignright size-medium wp-image-901" /><br />
Da tut sich schon interessantes am Anfang auf: Durch die nahtlose Integration in Visual Studio fügt man keine Referenz auf irgendeine Framework-DLL hinzu, sondern startet die Tests mit der Erstellung eines Testprojektes. Für mich persönlich ein wenig gewöhnungsbedürftig &#8211; ich schreibe man Tests und Code für gewöhnlich in der selben Assembly und lagere es nur auf ausdrücklichen Wunsch aus.</p>
<p>Nach Abschluß der durch den (eigentlich um die Arbeit zu beschleunigen konzipierten) Projekt-Wizard durchgeführten Vorbereitungen und der manuellen Abschlussvorbereitungen kann es nun endlich losgehen.</p>
<h3>Straight-Forward mit Attributen und Asserts</h3>
<p>Die Test-Methoden gehen schnell von der Hand, man braucht nur das <code>[TestMethod]</code> Attribut hinzufügen. Die <code>Assert</code>-Klasse deckt alle notwendigen Prüfungen ab, bietet aber im Vergleich zu anderen Frameworks wie z.B. NUnit wesentlich weniger &#8220;methodische Expressivität&#8221;. In unserem Fall brauchen wir nur die <code>AreEqual</code>-Methode. Schon nach dem ersten Test fällt allerdings die lange Testdauer des Testrunners ein wenig negativ auf. Das kann auch wesentlich schneller gehen.</p>
<p>Das Test-Ergebnis sieht relativ unspektakulär aus:</p>
<pre name="code" class="brush: csharp">
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace FizzBuzzMSTest
{
    [TestClass]
    public class FizzBuzzTest
    {
        [TestMethod]
        public void Multiples_Of_Three_Returns_Fizz()
        {
            FizzBuzz target = new FizzBuzz();
            string translation = target.Translate(6);
            Assert.AreEqual("Fizz", translation);
        }

        [TestMethod]
        public void Multiples_Of_Five_Returns_Buzz()
        {
            FizzBuzz target = new FizzBuzz();
            string translation = target.Translate(10);
            Assert.AreEqual("Buzz", translation);
        }

        [TestMethod]
        public void Multiples_Of_Three_And_Five_Returns_FizzBuzz()
        {
            FizzBuzz target = new FizzBuzz();
            string translation = target.Translate(15);
            Assert.AreEqual("FizzBuzz", translation);
        }

        [TestMethod]
        public void No_Multiples_Of_Three_Or_Five_Returns_Number()
        {
            FizzBuzz target = new FizzBuzz();
            string translation = target.Translate(7);
            Assert.AreEqual("7", translation);
        }
    }
}
</pre>
<h3>Bewertung</h3>
<ul>
<li><b>Dauer</b><br/>Die FizzBuzz-Implementierung ging relativ zügig von der Hand. Ich habe ca. 15 Minuten gebraucht. Der &#8220;lahme&#8221; Testrunner hat mich etwas gestört. Die meiste Zeit ging für das Projekt, die Referenzverweise und das hin und her zwischen den Projekten drauf.</li>
<li><b>Größe</b><br/>Die Testgröße ist überschaubar. Eine kompakte Testklasse mit 4 Testmethoden. Eine klassische Class-Per-Class Struktur. Das Testprojekt ist isoliert vom Code.</li>
<li><b>Tooling</b><br/>Ein regelrechtes Heimspiel mit der VS-Integration. Auch Code-Assistenten wie Resharper oder Coderush kennen den MSTest. Alles in Allem eine sehr gute Unterstützung.</li>
<li><b>Usability</b><br/>Durch den Projekt-Wizard und die entsprechende Dokumentation komfortabel für allgemeines Testing. Speziell für TDD/BDD allerdings etwas hakelig. Immer gleich die Test/Code-Separation. Die Asserts sind sicherlich ausreichend.</li>
<li><b>Support</b><br/>Was soll man hier schreiben, außer MS? Das Framework wird direkt von Microsoft mit Visual Studio ausgeliefert. Die Dokumentation ist gut, Online-Material ist sicherlich vorhanden. MSTest ist in der Community (vor allem für Open Source oder kleinere Projekte) nicht so weit verbreitet wie andere Frameworks.</li>
</ul>
<p>MS-Test ist ein solides Framework, mit dem sich sicherlich auch gut TDD betreiben lässt. Man merkt dem Featureset an, dass es nicht nur für Unit-Testing ausgelegt ist. Der integrierte Runner ist schick, das Reporting ein Highlight. Ich sollte nicht unerwähnt lassen, dass vor Allem die Kombination TFS/MSTest ein sehr gutes Reporting/Monitoring-Werkzeug darstellt. </p>
<p>Zu den Tests selbst gibt das Framework wenig Hilfestellung bzw. Guidance zur Strukturierung und Anwendung der Tests. So wird wohl am meisten die Class-Per-Class Struktur angewendet werden, mit den üblichen TDD Best Practices. </p>
<h3>MS-Test leider nur für &#8220;Profis&#8221;</h3>
<p>Ein absolutes Manko ist die nicht-freie Verfügbarkeit des Frameworks und damit auch das Fehlen des Features in der Express-Edition. <img src="http://www.gmbsg.com/wp-content/uploads/2010/04/mstest_runner_vs-300x136.png" alt="mstest_runner_vs" title="mstest_runner_vs" width="300" height="136" class="alignright size-medium wp-image-902" />Einfach mal Tests/Code schreiben und veröffentlichen ist somit unmöglich. Für bekennende TDDler ein No-Go. Mit den 15 Minuten Fizzbuzz ist die Umsetzungsgeschwindigkeit in Ordnung &#8211; wobei ich zugegebenermaßen Fizzbuzz auch schon wesentlich zügiger implementiert habe. Das bringt mich dann auch zum nächsten Test-Framework unter meiner Meta-Test-Lupe&#8230; stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/meta-test-ms-test-visual-studio-on-board-test-framework/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Meta-Test: TDD &amp; BDD Test-Frameworks im Vergleich</title>
		<link>http://www.gmbsg.com/meta-test-tdd-bdd-test-frameworks-im-vergleich/</link>
		<comments>http://www.gmbsg.com/meta-test-tdd-bdd-test-frameworks-im-vergleich/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 20:45:26 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Topthema]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Code Kata]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[MSpec]]></category>
		<category><![CDATA[MSTest]]></category>
		<category><![CDATA[NBehave]]></category>
		<category><![CDATA[NSpec]]></category>
		<category><![CDATA[NUnit]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[SpecFlow]]></category>
		<category><![CDATA[StoryQ]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[XUnit]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=827</guid>
		<description><![CDATA[Unit Testing, TDD und BDD &#8211; das alles sind zur Zeit &#8211; außer dem Visual Studio 2010 Launch natürlich &#8211; aktuelle Themen, die die .NET Community ein Stückweit bewegt. Ich z.B. habe vor ein paar Wochen angefangen, intensivere Forschungen zur ...]]></description>
			<content:encoded><![CDATA[<p>Unit Testing, TDD und BDD &#8211; das alles sind zur Zeit &#8211; außer dem <a href="http://www.microsoft.com/germany/visualstudio/default.aspx">Visual Studio 2010 Launch</a> natürlich &#8211; aktuelle Themen, die die .NET Community ein Stückweit bewegt. Ich z.B. habe vor ein paar Wochen angefangen, intensivere Forschungen zur Verwandschaft &#038; Beziehung zwischen TDD und BDD durchzuführen. Ich habe zwar schon einige TDD- und BDD-Frameworks hinter mir, doch nicht zuletzt die in jüngster Zeit individuellen, manchmal irritierenden <a href="http://www.gmbsg.com/bdd-thebetterwayofunittesting/">Aussagen zu TDD und BDD</a> geben mir Anlass genug, nachzuforschen.</p>
<p>Ein Bereich, den ich mir dabei näher angeschaut habe ist das Tooling. Ich wurde in der Vergangenheit schon öfters gefragt, welches Test-Framework ich denn einsetze. In letzter Zeit werde ich aber auch ab und an gefragt, welches Test-Framework denn jetzt besser sei. Als Hilfestellung zur Findung einer Antwort auf diese Fragen sowie einen Überblick über die gängigsten Test Frameworks soll dieser Artikel beitragen.</p>
<h3>Die Kandidaten</h3>
<p>Mit diesem Artikel beginnt die kleine Blog-Serie &#8220;Meta-Test&#8221;, die Stück für Stück die populärsten Test-Frameworks für .NET und C# unter die Lupe nimmt, sie bewertet und natürlich auch vergleichen wird. Bisher gab es schon folgende Tests:</p>
<ul>
<li><a href="http://www.gmbsg.com/?p=859">MS Test &#8211; Visual Studio On Board Test-Framework</a>
<li><a href="http://www.gmbsg.com/?p=920">NUnit &#8211; All-Time-Hall-Of-Fame-Most-Valueable-Tester</a>
<li><a href="http://www.gmbsg.com/?p=950">NSpec &#8211; der spezifizierende BDD-Veteran</a>
</ul>
<h3>Die Hypothese</h3>
<p>Vorab möchte ich allerdings noch eine &#8211; für mich wichtige &#8211; Anmerkung äußern. Beim Test der Testframeworks habe ich mehrere Code Kata&#8217;s mit allen Frameworks geschrieben. Am häufigsten habe ich wohl <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataFizzBuzz">FizzBuzz</a> geschrieben, gefolgt von <a href="http://codingdojo.org/cgi-bin/wiki.pl?KataDictionaryReplacer">Replacer</a>, <a href="http://codekata.pragprog.com/2007/01/kata_thirteen_c.html">LineCounter</a> und ein paar Mal <a href="http://stefanomasini.com/index.php/2009/10/29/code-kata-minesweeper/">Minesweeper</a>. Ich habe dabei schon deutliche Unterschiede nicht nur in den Frameworks, sondern auch in der Adaption selbst festgestellt. Für den hier gezeigten Vergleich gelten folgende Hypothesen: </p>
<ul>
<li>TDD &#038; BDD sind gleichwertig.</li>
<li>TDD &#038; BDD sind prinzipiell das Gleiche, mit Unterschieden in Benennung und Teststruktur</li>
<li>TDD &#038; BDD wendet man für die selbe Aufgabe an, zum Software-Design</li>
</ul>
<p>So, und jetzt der Disclaimer:<br />
<strong>Achtung: Die genannten Hypothesen sind nicht meine Meinung über TDD bzw. BDD!</strong></p>
<p>Ganz im Gegenteil. Ich habe zu TDD ein gefestigtes Meinungsbild. Ich habe auch Erfahrung mit BDD. Gerade deswegen bin ich sehr vorsichtig mit beiden Begriffen. Ich denke, TDD und BDD sind nicht das Gleiche. Doch eine weitere Vertiefung in das Thema lenkt nur von den Frameworks ab. Deswegen wieder schnell zurück zu den Test-Frameworks.</p>
<h3>Die Anforderungen</h3>
<p><asa>Als</asa> <role>Entwickler</role> <iwant>möchte man</iwant> <feature>ein möglichst effektives und intuitives Test-Framework als Werkzeug</feature>, <sothat>um</sothat> <benefit>testgestriebenes Softwaredesign</benefit> durchzuführen. <given>Beim</given> <context>programmieren mit Visual Studio</context> zum Beispiel, <when>wenn</when> <action>man die Tests für die gerade zu entwickelnde Klasse oder Methode formuliert</action>,
<then>da</then> <expectation>gehört die Unterstützung von Tools wie Resharper, CodeRush oder Gallio heutzutage schon zum guten Ton</expectation>. </p>
<p><emotion>Ebenso geht es bei dem Vergleich um die <goal>Anwendbarkeit und Effizienz</goal>. <desire>Also wie expressiv, wie deutlich kann ich meine Tests formulieren und wie intuitiv ist die Umsetzung der Tests</desire>. Die Umsetzungsgeschwindigkeit spielt dabei genauso eine Rolle wie die <wish>Lesbarkeit</wish>, <wish>Wartbarkeit</wish> und <wish>gutes Reporting</wish>. Dazu noch später mehr.</emotion></p>
<h3>Das Ziel</h3>
<p>Um auch eine konkrete, relativ faire Vergleichssituation zu erreichen, stelle ich alle Frameworks an einem einzigen Beispiel vor, nämlich dem <a href="<a href="http://codingdojo.org/cgi-bin/wiki.pl?KataFizzBuzz">KataFizzBuzz</a>. FizzBuzz ist eine sehr einfache Kata, die gerade genug &#8220;Widerstand&#8221; bietet, um die Grundzüge des treibenden Software-Designs sowie des Test-First zu vermitteln. Ich habe mich bei der Programmierung der Kata sogar nur auf das Teilproblem der &#8220;Fizz&#8221;- und &#8220;Buzz&#8221;-Übersetzung konzentriert. Es gibt unzählige Implementierungen von FizzBuzz. Bei dem Vergleich der Test-Frameworks habe ich mich für die &#8220;triviale&#8221; und &#8220;zügige&#8221; Implementierung entschlossen. Konkretisiert bedeutet dies, das es mein Test-Ziel war, das ich mit allen Test-Frameworks ungefähr folgenden Code produziere:</p>
<pre name="code" class="brush: csharp">
    public class FizzBuzz
    {
        public string Translate(int number)
        {
            if (number % 15 == 0)
                return "FizzBuzz";

            if (number % 5 == 0)
                return "Buzz";

            if (number % 3 == 0)
                return "Fizz";

            return number.ToString();
        }
    }
</pre>
<h3>Die Metriken</h3>
<p>Um nun die einzelnen Frameworks untereinander vergleichen zu können, braucht es nicht nur einer gemeinsamen Basis &#038; Ziels, sondern auch einer gemeinsamen Messmetrik. Um es nicht zu theoretisch zu gestalten, habe ich einige ganz einfache, aber wie ich finde dennoch aussagekräftige Metriken ausgewählt:</p>
<ul>
<li>Die <b>Dauer</b> der Implementierung</li>
<li>Die <b>Größe</b> der Test-Artefakte (Klassen usw.)</li>
<li>Das <b>Tooling</b>, also die Unterstützung durch VS / Frameworks / Codetools</li>
<li>Die <b>Usability</b>, also handbuchnachschlagefreie Handhabung der API / Tools</li>
<li>Der <b>Support</b> durch Hersteller, Community und User</li>
</ul>
<p>Doch die wichtigste Metirk ist mit Abstand die Bewertung des Ergebnisses der Test-Frameworks &#8211; also der Tests ansich. Die Tests werden unter die vier Grundmerkmale Intuitivität, Expressivität, Lesbarkeit und Wartbarkeit gestellt. Natürlich bleibt da meine eigene subjektive Note an der ein oder anderen Stelle hängen, schließlich habe ich die Frameworks eigenständig getestet und habe auch keinen Anspruch auf gestelzte Objektivität :-).</p>
<p>So, damit sollten die Vorbereitungen und Rahmenbedinungen für den ultimativen Vergleich der Test-Frameworks für das .NET Framework &#038; C# abgeschlossen sein. Dieser gigantische Vergleich von einer Unmenge an Test-Frameworks &#8211; für den ich keine Kosten und Mühen gescheut habe :-) &#8211; wird als Blog-Post-Serie in den nächsten Tagen veröffentlicht.</p>
<p>Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/meta-test-tdd-bdd-test-frameworks-im-vergleich/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ministerium für Scrum</title>
		<link>http://www.gmbsg.com/ministerium-fur-scrum/</link>
		<comments>http://www.gmbsg.com/ministerium-fur-scrum/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 10:43:30 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=806</guid>
		<description><![CDATA[Es ist unfassbar. In letzter Zeit ertappe ich mich ungewohnt oft dabei, wie ich vor dem Bildschirm die Hände über den Kopf schlage, seufze und mir selbst zuflüstere &#8220;Ich verstehe das nicht&#8221;. So geschehen gestern Abend, als ich den offenen ...]]></description>
			<content:encoded><![CDATA[<p>Es ist unfassbar. In letzter Zeit ertappe ich mich ungewohnt oft dabei, wie ich vor dem Bildschirm die Hände über den Kopf schlage, seufze und mir selbst zuflüstere &#8220;Ich verstehe das nicht&#8221;. So geschehen gestern Abend, als ich den <a href="http://borisgloger.com/2010/03/22/scrum-wurden-agiles-schwachen-geerbt-eine-antwort/">offenen Brief von Boris Gloger zu den 7 Thesen der Scrum/Agile-Schwachpunkte von Uncle Bob</a> gelesen habe. Beim Lesen dieses &#8220;offenen Briefes&#8221; konnte ich meinen Augen kaum trauen. Die Argumente und Antworten von Boris Gloger sind für mich einfach unglaublich. Nicht nur, <a href="http://www.gmbsg.com/funf-schwachpunkte-von-scrum/">weil ich die Kritikpunkte von Uncle Bob größtenteils verstehe</a>. Ich möchte meine Auffassung und Wahrnemung zu diesem Artikel hier widergeben.</p>
<h3>Antwort zu: Scrum kennt keine technischen Verfahren</h3>
<blockquote><p><i>Boris Gloger schreibt:</i> &#8220;Scrums primärer Zweck war und ist, Teams, Abteilungen und Firmen zu unterstützen, mit den Prinzipien von eigenständigen Arbeitsteams ihre Aufgaben zu bewältigen. Es war niemals geplant, Entwicklern beizubringen, wie man entwickelt. Wenn man Scrum implementiert, dann erkennt man schnell, dass die Entwickler nicht mit der Arbeitsweise von Agile vertraut sind.&#8221;</p></blockquote>
<p>Ich habe Scrum als <a href="http://www.gmbsg.com/scrum-ein-agiles-software-management-framework/">agiles Software-Management-Framework kennengelernt</a>. Spezifisch für die Domäne der Software-Entwicklung. Scrum ist kein Selbstorganisatios-Framework. Nicht umsonst ist Scrum ein Vertreter der agilen Software-Entwicklungs-Verfahren, und nicht ein &#8220;Autonomie-Team-Modell&#8221;. Insofern kann man einem agilen Software-Management-Verfahren schon abverlangen, die Software-Entwicklung als Domäne zu unterstützen und zu fördern.</p>
<h3>Antwort zu: Scrum hat zu lange Sprints</h3>
<blockquote><p><i>Boris Gloger schreibt:</i> &#8220;Es wurde NIEMALS ausdrücklich gesagt, dass ein Sprint 30 Tage lang sein muss, sondern es war nur als Vorschlag gemeint. Ken und Jeff machten vor 15 Jahren mit den 30 Tagen große Fortschritte. Nicht mehr und nicht weniger. Sprints sollten so lange sein, wie es das Team und der PO für nötig halten und 2 Wochen werden oftmals vorgeschlagen. Allerdings verkompliziert sich dadurch die Sache für die meisten Entwickler.&#8221;</p></blockquote>
<p>Das schöne an agilen Verfahren ist das <a href="http://c2.com/cgi/wiki?InspectAndAdapt">Inspect &#038; Adapt</a>. Wenn etwas nicht mehr zeitgemäß ist, oder vielleicht nicht in den Kontext hineinpasst, dann wird es eben verändert. So auch mit der Sprintdauer. Für mich ist es offensichtlich, dass <a href="http://www.gmbsg.com/scrum-die-bessere-sprintdauer/">kürzere Sprints deutliche Vorteile bieten</a> &#8211; auch bzw. gerade für Entwickler. Eine &#8220;Verkomplizierung&#8221; sehe ich da nicht.</p>
<h3>Antwort zu: ScrumMaster aka Projektmanager</h3>
<blockquote><p><i>Boris Gloger schreibt:</i> &#8220;Der ScrumMaster ist eine neue Führungsrolle. Ken hat dies vor Jahren geschrieben und für die ersten Scrum Experten, wie mich, war dies klar verständlich. Jedoch wollte dies die gesamte Agile Gemeinschaft nicht anerkennen, da es ihrem Verständnis nach nicht nötig war, dass Teams eine Führungskraft benötigen und Scrum eine neue Führungsrolle einnimmt. Ein ScrumMaster ist weder ein PM, noch ein Master des Teams. Er ist der Master innerhalb des Bezugssystems des Prozesses. Er ist der Leiter des Teams und der PO und es ist seine Aufgabe, die Organisation mittels Scrum zu verändern und Scrum als ein Paket von Tools und Grundwerten einzusetzen.&#8221;</p></blockquote>
<p>Mit Nichten. Ich habe in meinen bescheidenen paar Jahren, in denen ich mich Scrum auseinandergesetzt habe und immer noch intensiv beschäftige  den ScrumMaster niemals als Führungsrolle verstanden. Ja, es gibt das Prinzip des <a href="http://en.wikipedia.org/wiki/Servant_leadership">Servant Leaderships</a> für einen ScrumMaster. Ja, der ScrumMaster ist der Hüter des Scrum-Grals. Ja, der ScrumMaster ist ein <a href="http://de.wikipedia.org/wiki/Change_Agent">Change Agent</a>. Aber Nein, der ScrumMaster ist kein Team-Leiter. Nein, es gibt keine Position &#8220;ScrumMaster&#8221; in einem Organigramm, sondern die Rolle ScrumMaster. Nein, der ScrumMaster ist kein Entwicklungs-Alpha-Tier.</p>
<h3>Antwort zu: ScrumMaster ist kein Leader</h3>
<blockquote><p><i>Boris Gloger schreibt:</i> &#8220;Ein Entwickler hat nicht die Fähigkeiten ein Team zu leiten, eine Organisation zu ändern und sein Team vor der herkömmlichen Organisationskultur zu beschützen. In dieser Hinsicht wird die Rolle des ScrumMasters großteils missverstanden. Er ist ein Moderator, aber das ist Teil seiner Führungsrolle als ScrumMaster. Ein ScrumMaster zu sein, das bedeutet, sich ein Set and Fähigkeiten anzueignen, die erlernt und geübt werden müssen. Dies kann 10000 Stunden in Anspruch nehmen, bevor man davon ausgehen kann, dass man diese Disziplin auch beherrscht.&#8221;</p></blockquote>
<p>Mit Verlaub, Herr Gloger, das geht zu weit. Es tut mir leid Ihnen entgegnen zu müssen, dass Ihre Auffassung für mich nichts anderes als protektionistischer <a href="http://de.wikipedia.org/wiki/Mumpitz">Mumpitz</a> ist! Sie haben gerade die Entwickler, also mich, meine Kollegen und meine gesamte Berufszunft gekränkt. Was fällt Ihnen ein, sich so herablassend über einen Entwickler und seine Fähigkeiten zu äußern? Zugegeben, nicht jeder Entwickler hat das Zeug zum Teamleiter. Nicht jeder Entwickler kann sich eloquent und zielsicher vor Führungsriege oder Investoren artikulieren. </p>
<p>Doch das heisst noch lange nicht, dass alle Entwickler per se nicht geeignet sind, die Rolle des ScrumMasters zu übernehmen. Sie tun mit Ihrer Aussage den vielen Entwicklern da draussen Unrecht, die tagtäglich lernen, die versuchen ihre Entwicklung und ihre Organisation zu verbessern, die ihre Teams und Kollegen leiten. Ja genau, die Entwickler, die sogar auf Kurse von ScrumCoaches wie Ihnen gehen, um das System Scrum sowie die Rolle ScrumMaster zu verstehen und sich dafür zu zertifizieren.</p>
<p>Ihr Verständnis des ScrumMasters als &#8220;allwissende, allmächtige&#8221; Instanz kann ich nicht teilen. Sie beschreiben den ScrumMaster ja geradezu als den Robin Hood der Scrum-Gemeinde, der sich für die armen bekehrten Entwickler einsetzt und sich mutig und stark vor die etablierte, elitäre Wasserfall-Adelschaft stellt. Nein, Herr Gloger. Sowohl die klassische als auch moderne Software-Entwicklung ist erfolgreich mit Teamgeist, dem verständnisvollen &#038; respektvollen Umgang miteinander und dem gemeinsamen Verständnis für das Ziel. Allesamt Eigenschaften, die ich in Ihrer Aussage kläglich vermisse.</p>
<h3>Antwort zu: Mangelhafte Struktur des Backlogs</h3>
<blockquote><p><i>Boris Gloger schreibt: </i>&#8220;Mike Cohn hat uns das beigebracht und ich habe es in meinem Buch beschrieben. Scrum war nicht als ein Set von Tools geplant, das alles beschreiben kann. Der Backlog ist sehr unternehmens-/team-/produktspezifisch und Scrum kann in dieser Hinsicht keine Anleitungen liefern. Nur Best Practises können das.&#8221;</p></blockquote>
<p>Richtig. Zumindest was die Strukturierung des Backlogs angeht, bin ich der Meinung dass dies sehr stark von Projekt zu Projekt variieren kann. Genau hier ist es gut, eine allgemeine, flexible Aussage zu liefern, die da heißt: Es muss ein Backlog geben. Wie das dann aussieht, bleibt im Ermessen der Projektbeteiligten, spezifischer des PO&#8217;s und des Teams. Es ist etwas ganz anderes, ein Backlog für ein Webportal aufzubauen als ein Backlog für ein kritisches Leitsystem. Best Practices können da einen guten Leitfaden darstellen.</p>
<h3>Antwort zu: Scrum skaliert nicht</h3>
<blockquote><p><i>Boris Gloger schreibt: </i>&#8220;Ich kann euch versichern, dass Scrum auch auf Ebenen oberhalb eines Teams erwiesenermaßen angewendet werden kann. Ich habe dies hunderte Male erfolgreich durchgeführt. Scrum Anwender wie ich haben Möglichkeiten entwickelt, Scrum in Organisationen einzusetzen, genauso wie auf Unternehmensebene. Gut, es wurde nicht in Ken&#8217;s erstem Buch beschrieben und viele Scrum Consultants haben keine Ahnung, wie das gemacht werden kann. Wenn ihr euch allerdings an Leute wendet, die Scrum seit 2003 einsetzen und Scrum auf Unternehmensebene angewandt haben, dann könnt ihr erfahren, wie das geht. Zu diesen Leuten gehören: Bas Voode, Mike Cohn, Stacia Broderick, Boris Gloger, Andreas Schliep, und viele mehr. Wie gesagt, man kann dazu nichts in den frühen Büchern finden, sondern in den Köpfen der Leute, die das bereits mehrmals gemacht haben.&#8221;</p></blockquote>
<p>Eine für mein Dafürhalten argumentativ etwas schwachbrüstige Aussage. Mit irgendwelchen Mitteln, ein paar &#8220;Scrum Of Scrums&#8221;, einem Company Backlog und ein paar Chief Product Owners ist die Skalierungsaufgabe &#8220;Scrum&#8221; noch lange nicht gelöst. Wenn es funktioniert, ist es gut. Doch die Aussage bezieht sich auf Scrum als Rahmen- und Richtwerk. Dort ist von Skalierung nicht die Rede. Man muss auch mal zugeben können das Scrum einfach nicht für größere Konstrukte &#8220;designed&#8221; wurde.</p>
<h3>Embrace Change!</h3>
<p>Alles in Allem interpretiere ich den offenen Brief mit kritischen Augen. Irgendwie kommt es mir so vor, als ob sich in dem Brief das &#8220;Ministerium für Scrum&#8221; gemeldet hat und ein paar Statements in den Raum wirft, um Scrum als System sowie auch das Ministerium selbst zu schützen. Scrum ist unbestritten ein hilfreiches agiles Management-Werkzeug. Scrum hat in der agilen Bewegung auch zweifelsohne große Beiträge geleistet. Dennoch ist dies kein Grund, konstruktiver Kritik mit derartig pauschalisierten Floskeln zu entgegnen.</p>
<p>Ich glaube an die Vorteile von Scrum, erkenne aber auch Gefahren und Schwachstellen. Alles hat seine Vor- und Nachteile. Wichtig ist für mich der &#8220;Agile Spirit&#8221;, der im agilen Manifest und vielen agilen Best Practices verankert ist. Inspect &#038; Adapt, Embrace Change, People over Processes, Collaborate. All das sind die essentiellen Werte agiler Software-Entwicklung &#8211; und auch von Scrum.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/ministerium-fur-scrum/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>#BDD #TheBetterWayOfUnitTesting</title>
		<link>http://www.gmbsg.com/bdd-thebetterwayofunittesting/</link>
		<comments>http://www.gmbsg.com/bdd-thebetterwayofunittesting/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 16:52:50 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=791</guid>
		<description><![CDATA[Der Titel sagt alles, oder? Ich möchte den Tweet von @SimonHoh zum Anlaß nehmen, den Publikumsjoker zu Rate zu ziehen. Um den Joker so gut wie möglich auszuschöpfen, werde ich vorab aus strategischen Gründen keine Äusserungen dazu abgeben ;-).
Um beim ...]]></description>
			<content:encoded><![CDATA[<p>Der Titel sagt alles, oder? Ich möchte den <a href="http://twitter.com/SimonHoh/status/10708643753">Tweet von @SimonHoh</a> zum Anlaß nehmen, den <a href="http://de.wiktionary.org/wiki/Publikumsjoker">Publikumsjoker</a> zu Rate zu ziehen. Um den Joker so gut wie möglich auszuschöpfen, werde ich vorab aus strategischen Gründen keine Äusserungen dazu abgeben ;-).</p>
<p>Um beim Bild der <a href="http://de.wikipedia.org/wiki/Wer_wird_Million%C3%A4r%3F">Rateshow</a> zu bleiben, muss es natürlich auch eine Frage und vier Auswahlantworten geben.</p>
<div style="clear:both"></div>
<p><strong><big>Was verstehen Sie unter BDD ?</big></strong></p>
<ul>
<li><strong>A:</strong> BDD ist TDD, nur besser</li>
<li><strong>B:</strong> BDD ist etwas anderes als TDD</li>
<li><strong>C:</strong> BDD ist TDD, und noch viel mehr</li>
<li><strong>D:</strong> BDD ist der Bundesverband Deutscher Detektive</li>
</ul>
<p>Ich bin gespannt auf die Bewertung des Publikums (gerne auch mit Begründung). <strong>Deine Meinung zählt!</strong> Ach ja, Frei nach <a href="http://www.youtube.com/watch?v=C3vMRQCcdT0">Sigi Schwarz</a> kann natürlich auch jede Antwort genannt werden, die nicht in der Auswahl genannt wurde (also &#8216;was zum Naschen!)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/bdd-thebetterwayofunittesting/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Re: Was hast Du vor 10 Jahren programmiert?</title>
		<link>http://www.gmbsg.com/re-was-hast-du-vor-10-jahren-programmiert/</link>
		<comments>http://www.gmbsg.com/re-was-hast-du-vor-10-jahren-programmiert/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 20:41:05 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Nostalgie]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[VB6]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=686</guid>
		<description><![CDATA[Es ist zwar schon ein wenig her, als Dariusz, Alex, Thomas und Thomas sich selbst diese Frage gestellt und beantwortet haben. Dennoch ist es für mich Anlaß genug, auch mal in den Archiven nachzukramen und zu schauen, was ich denn ...]]></description>
			<content:encoded><![CDATA[<p>Es ist zwar schon ein wenig her, als <a href="http://blogs.msdn.com/dparys/archive/2010/03/05/was-hast-du-vor-ber-zehn-jahren-programmiert.aspx">Dariusz</a>, <a href="http://blog.alexonasp.net/post/2010/03/05/Was-hast-Du-vor-uber-zehn-Jahren-programmiert.aspx">Alex</a>, <a href="http://blog.thomasbandt.de/39/2324/de/blog/re-was-hast-du-vor-ueber-zehn-jahren-programmiert.html">Thomas</a> und <a href="http://thomas.mentzel.name/2010/03/05/was-hast-du-vor-uber-zehn-jahren-programmiert/">Thomas</a> sich selbst diese Frage gestellt und beantwortet haben. Dennoch ist es für mich Anlaß genug, auch mal in den Archiven nachzukramen und zu schauen, was ich denn so vor 10 Jahren an Software &#8220;verbrochen&#8221; habe.</p>
<p>Nun, vor genau 10 Jahren (Frühjahr 2000) habe ich erstaunlich vielschichtiges getan. Da bin ich selbst schon überrascht. Ich habe z.B. einen HTML-Editor (versucht) in VB6 zu programmieren. Und habe ich einen PDF-Scanner in C geschrieben (um Bilder bzw. 2D-Polygone aus dem PDF zu &#8220;extrahieren&#8221;). Doch beides möchte ich hier nicht vorstellen, sondern ein ganz anderes Programm, mit vorerst letztem CVS-Commit am 15.03.2000: <strong>ScanDirNavian</strong>.</p>
<p>ScanDirNavian ist ein kleines Ameisenprogramm in VB6. Es durchforstet einen gesamten Verzeichnisbaum auf bestimmte Dateien (mit bestimmten Patterns im Dateinamen) und listet diese in einer Logdatei auf. Als Zusatzfeature kann es nicht nur die Dateiinformationen loggen, sondern auch einfache Transformationsaufgaben erledigen. Z.B. &#8220;Nehme die ersten 3 Zeichen des Dateinamens, falls es eine Zahl ist, stelle Sie an das Ende des Dateinamens.&#8221;</p>
<p><img src="http://www.gmbsg.com/wp-content/uploads/2010/03/scandirnavian.png" alt="scandirnavian" title="scandirnavian" width="542" height="314" class="aligncenter size-full wp-image-693" /></p>
<p>Ich bin mir nicht mehr sicher, welchen Zweck ich damit eigentlich bedient habe. Ich kann mich vage daran erinnern, dass ich tausende von Logdateien (von Linux, Raytracern und diversen anderen Programmen) irgendwie umstrukturieren bzw. in andere Verzeichnisstrukturen überführen wollte. Ein Codeschnipsel gefällig? Bitte gerne:</p>
<pre style="brush: vb">
Private Sub CommandScan_Click()
    Dim StartDirectory As String
    Dim ScanTimeString As String
    AllFileCounter = 0
    AllScanTime = 0

    StartDirectory = DirSource.Path
    LabelInfo.Caption = "Scanning Directory" &#038; vbCrLf &#038; vbCrLf &#038; _
        StartDirectory &#038; vbCrLf &#038; vbCrLf &#038; _
        "Please wait until scan is complete."
    TabLog.Tabs(3).Selected = True
    FormMain.MousePointer = 11
    TimerScanDuration.Enabled = True
    DoEvents

    If InStr(TextHeader.Text, LogTypeCommand(7)) > 0 Then
        TextHeader.Text = _
            Left(TextHeader.Text, _
            InStr(TextHeader.Text, LogTypeCommand(7)) - 1) &#038; _
            DirSource.Path &#038; _
            Right(TextHeader.Text, Len(TextHeader.Text) - _
            InStr(TextHeader.Text, LogTypeCommand(7)) - _
            Len(LogTypeCommand(7)) + 1)
    End If
    If InStr(TextHeader.Text, LogTypeCommandShortCut(7)) > 0 Then
        TextHeader.Text = _
            Left(TextHeader.Text,
            InStr(TextHeader.Text, LogTypeCommandShortCut(7)) - 1) &#038; _
            DirSource.Path &#038; _
            Right(TextHeader.Text, Len(TextHeader.Text) - _
            InStr(TextHeader.Text, LogTypeCommandShortCut(7)) - _
            Len(LogTypeCommandShortCut(7)) + 1)
    End If

    If Len(TextLog.Text) = 0 And Len(TextHeader.Text) > 0 Then _
        TextLog.Text = TextHeader.Text &#038; vbCrLf &#038; _
        String(Len(TextHeader.Text), "-") &#038; vbCrLf &#038; vbCrLf

    ScanDirectory DirSource.Path, TextOutput.Text
    DirSource.Path = StartDirectory
    TimerScanDuration.Enabled = False

    FormMain.MousePointer = 0
    ScanTimeString = Trim(Str(AllScanTime / 10))
    If Left(ScanTimeString, 1) = "." Then ScanTimeString = "0" &#038; ScanTimeString
    LabelInfo.Caption = "Scan complete !" &#038; vbCrLf &#038; vbCrLf &#038; _
        "Successfully passed through " &#038; Trim(Str(AllFileCounter)) &#038; " files." &#038; _
        vbCrLf &#038; "Elapsed time: " &#038; ScanTimeString &#038; " seconds."
End Sub
</pre>
<p>Oh je, da habe ich mich nicht gerade mit Ruhm bekleckert :-) Funktioniert hat es &#8211; Ja. Aber lange zufrieden war ich auch nicht damit. Immerhin hat es seinen Zweck erfüllt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/re-was-hast-du-vor-10-jahren-programmiert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrum: Die bessere Sprintdauer</title>
		<link>http://www.gmbsg.com/scrum-die-bessere-sprintdauer/</link>
		<comments>http://www.gmbsg.com/scrum-die-bessere-sprintdauer/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 08:35:57 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=661</guid>
		<description><![CDATA[Vor einiger Zeit hatte ich über die Fünf Schwachpunkte von Scrum gebloggt. Am Ende des Artikels hatte ich versprochen, mir Gedanken darüber zu machen, wie man diese Schwierigkeiten besser meistern kann. Mein erstes &#8220;Scrum-Schwachstellenthema&#8221; ist heute die Sprintdauer. Eingangs möchte ...]]></description>
			<content:encoded><![CDATA[<p>Vor einiger Zeit hatte ich über die <a href="http://www.gmbsg.com/funf-schwachpunkte-von-scrum/">Fünf Schwachpunkte von Scrum</a> gebloggt. Am Ende des Artikels hatte ich versprochen, mir Gedanken darüber zu machen, wie man diese Schwierigkeiten besser meistern kann. Mein erstes &#8220;Scrum-Schwachstellenthema&#8221; ist heute die Sprintdauer. Eingangs möchte ich noch einmal kurz erläutern, was denn nun an der Sprintdauer so schwierig ist und wieso es meiner Meinung nach eine Schwachstelle ist.</p>
<p>In vielen Fachblättern und Artikeln wird <a href="http://de.wikipedia.org/wiki/Scrum#Zyklusmodell">eine Sprintdauer von 30 Tagen</a> (4 Wochen) vorgeschlagen. Manchmal findet man auch <a href="http://www.scrumalliance.org/learn_about_scrum">2-4 Wochen als empfohlene Sprintdauer</a>. In jedem Fall aber sollte die Sprintdauer stabil über Sprints hinweg bleiben.</p>
<p>Mein Einwand: Die Sprintdauer ist eine Schwachstelle in Scrum. Besser gesagt: lange Sprintzyklen sind eine Gefahrenquelle für den Erfolg von Scrum-Teams. Denn gerade lange Sprintzyklen sind für die meisten Teams der erste große Fallstrick. Die meisten Teams, die mit Scrum beginnen, fangen mit langen Sprints von 4 Wochen und z.T. sogar mehr an. Schwierig in mehrfacher Hinsicht, denn dadurch berauben sie sich eigenmächtig der Vorteile agiler Verfahren. Die Flexibilität wird eingeschränkt, die Feedbackschleife des Inspect &#038; Adapt wird verlängert und dem Team wird hohe Planungskompetenz bzw. -verantwortung aufgebürdet.</p>
<p>Was kann man tun um diesen Risiken entgegenzuwirken? Ganz einfach: Kurze Sprints! Mit kurzen Sprints meine ich auch kurze Sprints. Aus meiner Sicht ist die ideale Sprintdauer eine Woche lang. Ja, richtig gelesen, nur 5 Werktage! Jede Woche Planung, jede Woche Review, jede Woche Retro.</p>
<h3>Daily Scrum, Weekly Sprint</h3>
<p>Was erreicht man dadurch? Zunächst einmal schafft man durch so eine kurze Sprintdauer eine hohe Planungsfrequenz. Das ist für fast alle Beteiligten nur von Vorteil. Der PO hat hohe Flexibilität, während das Team einen sehr überschaubaren Planungszeitraum hat. Das Team geht genauer auf die Stories und das Design ein, bricht in der Planung genauer Tasks auf. Dadurch ergeben sich quasi automatisch verbesserte Schätzung und stabiles Commitment. Das wiederum stärkt die Vorausplanung und Releaseabstimmung auf der Product Owner-Seite.</p>
<p>Ein-Wochen-Sprints bedeuten aber auch schnelleres Inspect &#038; Adapt. Jede Woche gibt es eine Retrospektive, das wichtigste agile Gremium in Scrum. Jede Woche eine Retrospektive zu haben ist ein wenig wie &#8220;und wöchentlich grüßt das Scrumeltier&#8221; &#8211; es kommen Anfangs immer wieder die gleichen Themen ins Gespräch. Das liegt vor Allem daran, dass es viel einfacher ist, wöchentlich &#8220;inspect&#8221; zu betreiben, als effektiv &#8220;adapt&#8221; durchzuführen. Doch genau das ist das schöne am schnellen, wöchentlichen Sprint-Puls. Es wird die Agilität förmlich &#8220;antrainiert&#8221;. Das Team lernt wesentlich schneller, wirklich zu adaptieren, anstatt es irgendwie auf die lange Bank zu schieben.</p>
<h3>&#8220;Accelerate&#8221; für eine gute &#8220;Velocity&#8221;</h3>
<p>Ein nicht ganz auf den ersten Blick erkennbarer Vorteil der Wochensprints ist der schnelle &#8220;Ramp-up&#8221; des Teams zur stabilen Velocity. Während ein Team mit 4-Wochen-Sprints nach den ersten 3-5 Sprints (also nach 3-5 Monaten!) erst so halbwegs stabile Produktivität und Schätzkompetenz aufweisen kann, gelingt einem Team mit Wochensprints nach der gleichen Sprintzahl (also nach 3-5 Wochen) noch mehr. Ergo: Ein zügiges Teaming wird erreicht.</p>
<p>Gerade Wochensprints haben meiner Meinung nach die Bezeichnung &#8220;Sprint&#8221; verdient. Denn wöchentliche Iterationen &#8220;fühlen&#8221; sich nicht nur wie ein Sprint an, sondern sind auch so intensiv und ergiebig wie ein Sprint. Das liegt nicht nur am höheren Takt, sondern auch an einer ganz lapidaren Tatsache: Die Arbeitswoche.</p>
<p>Unsere gesamte Lebens- und Arbeitskultur tickt in diesem &#8220;Wochentakt&#8221;. Viele denken, planen und organisieren in Wochenzyklen. Das kommt auch dem wöchentlichen Scrumsprint zu Gute. Teams mit Wochensprints kommen mit dem Wochentakt &#8220;einfach besser zurecht&#8221; &#8211; wissentlich oder unwissentlich. Höchstwahrscheinlich ist dies dem Fakt geschuldet, dass die gesamte Arbeitswelt sich an diesem Takt orientiert. Egal ob nun Scrum oder nicht, die Kalenderwoche ist und bleibt eine präsente Zeiteinheit, die für Planung, Vereinbarung und Organisation angewendet wird.</p>
<h3>Kurz und Knackig</h3>
<p>Bei all den Vorteilen, die eine kurze, nach meinem Ermessen am Besten wöchentliche Sprintdauer hat &#8211; es gibt auch hier wieder einige Dinge, die man vor der Einführung oder beim &#8220;Sprinten&#8221; beachten sollte. Ein allgemeiner Fallstrick kann es werden, die Planung des Sprints auf den Montag zu legen, und die Retrospektive auf den Freitag. So wie es bei klassischen <a href="http://de.wikipedia.org/wiki/Jour_fixe">Jour-Fixe Meetings</a> zum guten Ton gehört Planungsgespräche an das Ende der Woche zu legen, ist das bei Wochensprints auch förderlich. Eine mögliche Variante wäre es, die Planung auf den Freitag zu legen und Review/Retro auf Montag.</p>
<p>Damit ist der nächste Achtungspunkt schon implizit genannt: Nicht versuchen, alle &#8220;Scrum-Meetings&#8221; in einen Tag zu quetschen. Ganz im Gegenteil, die Planung kann Freitag vormittags erfolgen. Der Nachmittag ist reserviert für Konzentrationsarbeit, Tageskommunikation, Vorbereitung des Boards und des Reviews / Retro&#8217;s. </p>
<p>Montag ist vormittags &#8220;Tabu&#8221; &#8211; denn genau dann befindet man sich in der &#8220;Twilight Zone&#8221;. Ende des letzten Sprints oder Anfang des nächsten Sprints &#8211; schon durch die Planung oder noch im Review &#8211; noch Montagsmüde oder schon im Tatendrang &#8211; ein Montag Morgen eben. Der späte Nachmittag kann dann nach dem üblichen Daily für die kurze Review/Retro investiert werden. Bei Wochensprints ist eine 4 stündige Planung angemessen, eine Review/Retro von einer Stundes komfortabel ausreichend.</p>
<p>Fazit: <strong>Kurz &#038; Knackig &#8211; das ist die bessere Sprintdauer in Scrum!</strong><br />
Es gibt natürlich noch mehr Aspekte als die aufgeführten, um zu einer ausgewogenen Sprintdauer für sein Team zu kommen. Für mich bleibt jedoch die in den meisten Fällen zutreffende Erkenntnis: Kurz &#038; Knackig ist besser als Lang &#038; Weilig. Was denken Sie? Ihre Meinung ist gefragt!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/scrum-die-bessere-sprintdauer/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
