<?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>Gerrit Beine</title>
	<atom:link href="http://gerritbeine.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gerritbeine.com</link>
	<description>Software-Architektur &#38; Agile Methoden</description>
	<lastBuildDate>Sat, 18 May 2013 10:54:27 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Virtual Box VDI unter Mac OS X mounten</title>
		<link>http://gerritbeine.com/2013/05/virtual-box-vdi-unter-mac-os-x-mounten/</link>
		<comments>http://gerritbeine.com/2013/05/virtual-box-vdi-unter-mac-os-x-mounten/#comments</comments>
		<pubDate>Sat, 18 May 2013 10:53:50 +0000</pubDate>
		<dc:creator>gbeine</dc:creator>
				<category><![CDATA[Technisches]]></category>
		<category><![CDATA[FreeDOS]]></category>
		<category><![CDATA[MacOS X]]></category>
		<category><![CDATA[Virtual Box]]></category>

		<guid isPermaLink="false">http://gerritbeine.com/?p=679</guid>
		<description><![CDATA[Diese Woche hatte ich mal wieder einen Grund, mit FreeDOS zu arbeiten. Viele Leute hassen DOS, ich fühle mich jedes Mal an meine ersten Gehversuche am PC erinnert&#8230; Auf jeden Fall ist die Installation von FreeDOS unter Virtual Box eine &#8230; <a href="http://gerritbeine.com/2013/05/virtual-box-vdi-unter-mac-os-x-mounten/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Diese Woche hatte ich mal wieder einen Grund, mit <a href="http://www.freedos.org/" title="FreeDOS">FreeDOS</a> zu arbeiten.<br />
Viele Leute hassen DOS, ich fühle mich jedes Mal an meine ersten Gehversuche am PC erinnert&#8230;</p>
<p>Auf jeden Fall ist die <a href="http://sourceforge.net/apps/mediawiki/freedos/index.php?title=VirtualBox" title="Installation in Virtual Box">Installation von FreeDOS unter Virtual Box</a> eine wahre Freude.</p>
<p>Anschließend hatte ich aber das Problem, die Daten, die ich in der virtuellen Maschine benötige, auch hinein zu bekommen.<br />
Unter Unix gibt&#8217;s ja N+1 Möglichkeiten, wer aber schon mal versucht hat, unter DOS TCP/IP zu betreiben, weiß, dass das <a href="http://www.computerworld.com/s/article/9101699/The_640K_quote_won_t_go_away_but_did_Gates_really_say_it_" title="No one will need more than 637 kb of memory for a personal computer.">wenig Spaß macht</a>.</p>
<p>Also habe ich mich nach Alternativen umgeschaut und bin auf die Möglichkeit gestoßen, VDIs mit hdutil unter MacOS X zu mounten.<br />
<span id="more-679"></span><br />
Zunächst muss man &#8211; aus welchem Grund auch immer &#8211; die .VDI-Datei in .IMG umbenennen. .VDI-Dateien führen bei hdiutil immer zu Fehlern, endet die Datei auf .IMG funktioniert alles wunderbar. Es sollte sich auch um eine .VDI mit fester Größe handeln, nicht um einen dynamisch wachsenden Container.</p>
<p>Dann benötigt man einen Hex-Editor z.B. hexdump. Mit diesem muss man nun den Wert an Offset 0&#215;0158 (Zeile 6) aus der .IMG-Datei auslesen. In meinem Fall ist das 0&#215;2000.</p>
<pre class="brush: plain; title: ; notranslate">
mbpgb:~ $ hexdump system.img | less
0000000 3c 3c 3c 20 4f 72 61 63 6c 65 20 56 4d 20 56 69
0000010 72 74 75 61 6c 42 6f 78 20 44 69 73 6b 20 49 6d
...
0000140 95 d1 6c 91 ff 7f 00 00 08 5f 12 00 01 00 00 00
0000150 d0 17 c3 03 00 10 00 00 00 20 00 00 00 00 00 00
0000160 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00
</pre>
<p>Der Wert ist ein <a href=" https://web.ivy.net/carton/rant/virtualbox-macos-hdiutil.html">32 bit Little Edian Integer</a>, also kann man mit folgendem Script das Offset für hdiutil berechnen:</p>
<pre class="brush: plain; title: ; notranslate">
mbpgb:~ $ bc
obase=16;ibase=16;2000/200;
10
</pre>
<p>Das Offset für hdiutil ist also 0&#215;10, so dass die Kommandozeile für hdiutil folgendermaßen ausschaut:</p>
<pre class="brush: plain; title: ; notranslate">
mbpgb:~ $ hdid -section 0x10 -nomount system.img
/dev/disk4          	FDisk_partition_scheme         	
/dev/disk4s1        	DOS_FAT_16                     	
</pre>
<p>Damit steht der VDI-Container als /dev/disk4 zur Verfügung und die Partition disk4s1 kann gemountet werden:</p>
<pre class="brush: plain; title: ; notranslate">
mbpgb:~ $ sudo mkdir /Volumes/VDI
mbpgb:~ $ sudo mount -t msdos /dev/disk4s1 /Volumes/VDI/
</pre>
<p>Jetzt kann man ganz normal mit /Volumes/VDI/ arbeiten und Daten hin- und herkopieren.</p>
<p>Am Ende sollte man den Container wieder als Festplatte abmelden:</p>
<pre class="brush: plain; title: ; notranslate">
mbpgb:~ $ hdiutil detach /dev/disk4
&quot;disk4&quot; unmounted.
&quot;disk4&quot; ejected.
</pre>
<p>Quellen:</p>
<ul>
<li><a href="https://web.ivy.net/carton/rant/virtualbox-macos-hdiutil.html" title="Mounting VirtualBox VDI images on a Mac OS X host">Mounting VirtualBox VDI images on a Mac OS X host</a></li>
<li><a href="http://nerdbynature.de/s9y/?189" title="Mounting VirtualBox VDI images on a MacOS X host">Mounting VirtualBox VDI images on a MacOS X host</a></li>
<li><a href="http://blog.newsyland.com/mac-os-x/mac-os-x-mounting-fat32-external-hard-drive-via-terminal-command-line" title="Mac OS X: Mounting FAT32 external hard drive via Terminal command line">Mac OS X: Mounting FAT32 external hard drive via Terminal command line</a>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://gerritbeine.com/2013/05/virtual-box-vdi-unter-mac-os-x-mounten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse Mirror anlegen</title>
		<link>http://gerritbeine.com/2013/05/eclipse-mirror-anlegen/</link>
		<comments>http://gerritbeine.com/2013/05/eclipse-mirror-anlegen/#comments</comments>
		<pubDate>Thu, 02 May 2013 06:46:09 +0000</pubDate>
		<dc:creator>gbeine</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Mirror]]></category>
		<category><![CDATA[P2]]></category>

		<guid isPermaLink="false">http://gerritbeine.com/?p=666</guid>
		<description><![CDATA[Man kenn es ja, ab und an braucht&#8217;s ein Update der Eclipse Plugins. Dann werden 23 mal die JBoss Tools runtergeladen und 47 mal die Juno-Updates für die Scala IDE. Kann man so machen, muss man aber nicht. Die Eclipse &#8230; <a href="http://gerritbeine.com/2013/05/eclipse-mirror-anlegen/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Man kenn es ja, ab und an braucht&#8217;s ein Update der Eclipse Plugins.<br />
Dann werden 23 mal die JBoss Tools runtergeladen und 47 mal die Juno-Updates für die Scala IDE.</p>
<p>Kann man so machen, muss man aber nicht.</p>
<p>Die Eclipse stellt mit P2 nämlich einen ziemlich coolen Mechanismus bereit, um Update Sites zu spiegeln.<br />
Das habe ich mir gestern mal hergenommen und ein Script gebaut, dass sämtliche (mir) wichtigen Update Sites spiegelt und auf meinem internen Web Server bereitstellt.<br />
Ich will auch meinen Beitrag zur <a href="http://www.heise.de/newsticker/meldung/Bandbreiten-Drossel-Telekom-kappt-Festnetz-Flatrates-1847224.html" title="Bandbreitendrosselung @ heise.de">Bandbreitenschonung</a> leisten <img src='http://gerritbeine.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><span id="more-666"></span></p>
<p>Der Mechanismus ist recht einfach:<br />
Ich habe einen virtuellen Web Server namens <em>http://eclipse/</em> eingerichtet.<br />
Dieser hat drei Verzeichnisse, nämlich <em>releases</em>, <em>updates</em> und <em>tools</em>.<br />
Releases und Updates werden als Spiegel der <a href="http://wiki.eclipse.org/Eclipse_Project_Update_Sites" title="Project Update Sites">Project Update Sites</a> angelegt.<br />
Und Tools sind alle 3rdparty Features, die man immer mal wieder braucht.</p>
<p>Das Script ist relativ trivial.<br />
Man muss nur den Pfad zur Eclipse konfigurieren und als Parameter das Zielverzeichnis übergeben.</p>
<p>Und hier kommt das Script:</p>
<pre class="brush: bash; collapse: true; light: false; title: ; toolbar: true; notranslate">
#!/bin/bash

#
# Eclipse P2 mirroring script
#
# (c) 2013 Gerrit Beine &lt;gerrit.beine@gmx.de&gt;
#
# See
# http://wiki.eclipse.org/Equinox_p2_Repository_Mirroring
# http://wiki.eclipse.org/Eclipse_Project_Update_Sites
#

# Specify path to Eclipse executable
eclipse=&quot;/Applications/eclipse-indigo/eclipse&quot;

# Mirror repository metadata
function mirror_metadata()
{
    local source=$1
    local target=$2
    run_mirror ${source} ${target} &quot;org.eclipse.equinox.p2.metadata.repository.mirrorApplication&quot;
}

# Mirror repository content
function mirror_artifacts()
{
    local source=$1
    local target=$2
    run_mirror ${source} ${target} &quot;org.eclipse.equinox.p2.artifact.repository.mirrorApplication&quot;
}

# Execute Eclipse mirror
function run_mirror()
{
    local source=$1
    local target=$2
    local application=$3
    local options=$4
    echo
    echo
    echo &quot;--------------------------------------------------------------------------------&quot;
    echo
    echo &quot;Mirroring ${source}&quot;
    echo
    ${eclipse} -nosplash -verbose \
        -application ${application} \
        -source ${source} \
        -destination ${target}
    echo
    echo &quot;--------------------------------------------------------------------------------&quot;
    echo
}

target=$1

if [ ! -d ${target} ]; then
    echo &quot;Specificy target directory&quot;
    exit 1
fi

while read LINE; do
	if [[ -z ${LINE} || &quot;${LINE}&quot; == &quot;#&quot;* ]]; then
		continue
	fi
    SOURCE=${LINE%%#&gt;&gt;#*}
    TARGET=${LINE##*#&gt;&gt;#}
    mirror_metadata ${SOURCE} ${target}/${TARGET}
    mirror_artifacts ${SOURCE} ${target}/${TARGET}
done &lt; eclipse-update-sites.map
</pre>
<p>Damit das ganze funktioniert, braucht man noch die <em>eclipse-update-sites.map</em>.<br />
Deren Prinzip ist eigentlich auch einfach:<br />
Leere Zeilen und Zeilen, die mit # beginnen, werden ignoriert.<br />
Alle anderen Zeilen werden so interpretiert, dass der erste Teil die Quelle ist, die gespiegelt werden soll und der zweite Teil das Zielverzeichnis unterhalb des Pfades, der dem Script als Parameter übergeben wurde.<br />
Getrennt werden die beiden Teile mit der magischen Zeichenkombination #>>#.</p>
<p>Und hier ist dann meine Map &#8211; ohne Garantie dafür, dass alles läuft.</p>
<pre class="brush: plain; collapse: true; light: false; title: ; toolbar: true; notranslate">
# Eclipse Maintenance Update Sites

http://download.eclipse.org/eclipse/updates/4.2#&gt;&gt;#updates/e4.2

#http://download.eclipse.org/eclipse/updates/3.8#&gt;&gt;#updates/e3.8
#http://download.eclipse.org/eclipse/updates/3.7#&gt;&gt;#updates/e3.7
#http://download.eclipse.org/eclipse/updates/3.6#&gt;&gt;#updates/e3.6
#http://download.eclipse.org/eclipse/updates/3.5#&gt;&gt;#updates/e3.5
#http://download.eclipse.org/eclipse/updates/3.4#&gt;&gt;#updates/e3.4

# Eclipse Release Update Sites

http://download.eclipse.org/releases/juno#&gt;&gt;#releases/e4.2

#http://download.eclipse.org/releases/indigo#&gt;&gt;#releases/e3.7
#http://download.eclipse.org/releases/helios#&gt;&gt;#releases/e3.6
#http://download.eclipse.org/releases/galileo#&gt;&gt;#releases/e3.5
#http://download.eclipse.org/releases/ganymede#&gt;&gt;#releases/e3.4

# Oracle Enterprise Pack for Eclipse
#http://download.oracle.com/otn_software/oepe/12.1.1.2.1/juno/repository#&gt;&gt;#tools/oracleenterprise/e4.2
#http://download.oracle.com/otn_software/oepe/12.1.1.1.1/indigo#&gt;&gt;#tools/oracleenterprise/e3.7
#http://download.oracle.com/otn_software/oepe/helios#&gt;&gt;#tools/oracleenterprise/e3.6
#http://download.oracle.com/otn_software/oepe/galileo#&gt;&gt;#tools/oracleenterprise/e3.5
#http://download.oracle.com/otn_software/oepe/ganymede#&gt;&gt;#tools/oracleenterprise/e3.4

# AspectJ Development Tools

http://download.eclipse.org/tools/ajdt/42/update#&gt;&gt;#tools/ajdt/e4.2


http://download.eclipse.org/tools/ajdt/37/update#&gt;&gt;#tools/ajdt/e3.7


http://download.eclipse.org/tools/ajdt/36/update#&gt;&gt;#tools/ajdt/e3.6


http://download.eclipse.org/tools/ajdt/35/update#&gt;&gt;#tools/ajdt/e3.5

# http://archive.eclipse.org/tools/ajdt/34/update#&gt;&gt;#tools/ajdt/e3.4 # Frozen, no longer maintained

# Scala IDE

http://download.scala-ide.org/sdk/e38/scala210/stable/site#&gt;&gt;#tools/scalaide/2.10/e4.2


http://download.scala-ide.org/sdk/e38/scala29/stable/site#&gt;&gt;#tools/scalaide/2.9/e4.2


http://download.scala-ide.org/sdk/e37/scala210/stable/site#&gt;&gt;#tools/scalaide/2.10/e3.7


http://download.scala-ide.org/sdk/e37/scala29/stable/site#&gt;&gt;#tools/scalaide/2.9/e3.7

# http://download.scala-ide.org/releases-28/stable/site#&gt;&gt;#tools/scalaide/2.8/e3.7 # Frozen, no longer maintained

# Google Plugin for Eclipse

http://dl.google.com/eclipse/plugin/4.2#&gt;&gt;#tools/googleplugin/e4.2


http://dl.google.com/eclipse/plugin/3.7#&gt;&gt;#tools/googleplugin/e3.7


http://dl.google.com/eclipse/plugin/3.6#&gt;&gt;#tools/googleplugin/e3.6

# Spring Tool Suite

http://dist.springsource.com/release/TOOLS/update/e4.2#&gt;&gt;#tools/springtoolsuite/e4.2


http://dist.springsource.com/release/TOOLS/update/e3.8#&gt;&gt;#tools/springtoolsuite/e3.8


http://dist.springsource.com/release/TOOLS/update/e3.7#&gt;&gt;#tools/springtoolsuite/e3.7

# ANTLR IDE

http://antlrv3ide.sourceforge.net/updates#&gt;&gt;#tools/antlrv3/e3.7

# http://antlrv3ide.sourceforge.net/updates/3.6#&gt;&gt;#tools/antlrv3/e3.6 # Frozen, no longer maintained
# http://antlrv3ide.sourceforge.net/updates/2.0.2#&gt;&gt;#tools/antlrv3/e3.5 # Frozen, no longer maintained

# subclipse

http://subclipse.tigris.org/update_1.8.x#&gt;&gt;#tools/subclipse/1.8.x

# http://subclipse.tigris.org/update_1.6.x#&gt;&gt;#tools/subclipse/1.6.x # Frozen, no longer maintained
# http://subclipse.tigris.org/update_1.4.x#&gt;&gt;#tools/subclipse/1.4.x # Frozen, no longer maintained

# MoreUnit

http://moreunit.sourceforge.net/update-site#&gt;&gt;#tools/moreunit/2.x.x

# http://moreunit.sourceforge.net/org.moreunit.updatesite/#&gt;&gt;#tools/moreunit/1.x.x # Frozen archive

# Eclipse Metrics Plugin

http://metrics2.sourceforge.net/update#&gt;&gt;#tools/metrics2

# http://metrics.sourceforge.net/update#&gt;&gt;#tools/metrics # Frozen, no longer maintained

# Plugins by Andrei Loskutov

http://andrei.gmxhome.de/eclipse#&gt;&gt;#tools/loskutov

# Plugins by Markus Junginger

http://www.junginger.biz/eclipse#&gt;&gt;#tools/junginger

# EclEmma Code Coverage

http://update.eclemma.org/#&gt;&gt;#tools/eclemma

# CheckStyle integration

http://eclipse-cs.sourceforge.net/update#&gt;&gt;#tools/checkstyle

# Useful addons for CheckStyle

http://sevntu-checkstyle.github.com/sevntu.checkstyle/update-site#&gt;&gt;#tools/sevntu.checkstyle

# PMD

http://sourceforge.net/projects/pmd/files/pmd-eclipse/update-site#&gt;&gt;#tools/pmd

# FindBugs

http://findbugs.cs.umd.edu/eclipse#&gt;&gt;#tools/findbugs

# ShellEd

http://downloads.sourceforge.net/project/shelled/shelled/ShellEd%202.0.2/update#&gt;&gt;#tools/shelled

# WickedShell

http://www.wickedshell.net/updatesite#&gt;&gt;#tools/wickedshell

# Jupiter Code Review

http://jupiter-eclipse-plugin.googlecode.com/svn/trunk/site/#&gt;&gt;#tools/jupiter

# soapUI

http://www.soapui.org/eclipse/update#&gt;&gt;#tools/soapui

# TestNG

http://beust.com/eclipse#&gt;&gt;#tools/testng/e3.4

# http://beust.com/eclipse1#&gt;&gt;#tools/testng/e3.3 # Frozen archive

# Eclipse Perl Integration

http://e-p-i-c.sf.net/updates#&gt;&gt;#tools/epic/0.5.x


http://e-p-i-c.sf.net/updates/testing#&gt;&gt;#tools/epic/0.6.x

# PyDev

http://pydev.org/updates#&gt;&gt;#tools/pydev

# Unnecessary Code Detector

http://ucdetector.sourceforge.net/update#&gt;&gt;#tools/ucdetector

# JadClipse Java Decompiler plugin

http://jadclipse.sf.net/update#&gt;&gt;#tools/jadclipse

# JD-Eclipse

http://jd.benow.ca/jd-eclipse/update#&gt;&gt;#tools/jd-eclipse

# JBoss Tools

http://download.jboss.org/jbosstools/updates/stable/juno#&gt;&gt;#tools/jbosstools/e4.2


http://download.jboss.org/jbosstools/updates/stable/indigo#&gt;&gt;#tools/jbosstools/e3.7


http://download.jboss.org/jbosstools/updates/stable/indigo/soa-tooling#&gt;&gt;#tools/soatools/e3.7


http://download.jboss.org/jbosstools/updates/stable/helios#&gt;&gt;#tools/jbosstools/e3.6


http://download.jboss.org/jbosstools/updates/JBossTools-3.1.1.GA#&gt;&gt;#tools/jbosstools/e3.5


http://download.jboss.org/jbosstools/updates/JBossTools-3.0.3.GA#&gt;&gt;#tools/jbosstools/e3.4

</pre>
]]></content:encoded>
			<wfw:commentRss>http://gerritbeine.com/2013/05/eclipse-mirror-anlegen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vortrag auf der Agile World 2013</title>
		<link>http://gerritbeine.com/2013/05/vortrag-auf-der-agile-world-2013/</link>
		<comments>http://gerritbeine.com/2013/05/vortrag-auf-der-agile-world-2013/#comments</comments>
		<pubDate>Wed, 01 May 2013 09:40:17 +0000</pubDate>
		<dc:creator>gbeine</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Konferenz]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Vortrag]]></category>

		<guid isPermaLink="false">http://gerritbeine.com/?p=661</guid>
		<description><![CDATA[Das Programm für die Agile World 2013 wurde gestern vorgestellt und mein Vortrag wurde angenommen. Am 28.06.2013 spreche ich im Track Transformation &#8211; Erfahrungen und Konzepte über Agile Softwareentwicklung im Tien Shan. Der Vortrag dreht sich um interkulturelle Einflüsse bei &#8230; <a href="http://gerritbeine.com/2013/05/vortrag-auf-der-agile-world-2013/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Das Programm für die Agile World 2013 wurde gestern vorgestellt und mein Vortrag wurde angenommen.</p>
<p>Am 28.06.2013 spreche ich im Track <a href="http://agileworld.de/block/transformation-erfahrungen-und-konzepte" title="Transformation - Erfahrungen und Konzepte">Transformation &#8211; Erfahrungen und Konzepte</a> über <a href="http://agileworld.de/content/agile-development-im-tien-shan-auswirkungen-kultureller-unterschiede-bei-distributed-scrum" title="Agile Softwareentwicklung im Tien Shan">Agile Softwareentwicklung im Tien Shan</a>.<br />
Der Vortrag dreht sich um interkulturelle Einflüsse bei verteilter Softwareentwicklung und Möglichkeiten, räumliche Distanzen zu überwinden.<br />
Natürlich erkläre ich die Konzepte basierend auf Scrum <img src='http://gerritbeine.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Ich freue mich schon sehr auf die Agile World und viele weitere spannende Vorträge.</p>
]]></content:encoded>
			<wfw:commentRss>http://gerritbeine.com/2013/05/vortrag-auf-der-agile-world-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mike Cohn: Agile Estimating and Planning</title>
		<link>http://gerritbeine.com/2013/04/mike-cohn-agile-estimating-and-planning/</link>
		<comments>http://gerritbeine.com/2013/04/mike-cohn-agile-estimating-and-planning/#comments</comments>
		<pubDate>Sat, 27 Apr 2013 09:17:44 +0000</pubDate>
		<dc:creator>gbeine</dc:creator>
				<category><![CDATA[Rezensionen]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Estimating]]></category>
		<category><![CDATA[Mike Cohn]]></category>
		<category><![CDATA[Planning]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Projektplanung]]></category>
		<category><![CDATA[Rezension]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[User Stories]]></category>

		<guid isPermaLink="false">http://gerritbeine.com/?p=165</guid>
		<description><![CDATA[Wer immer wieder Projekte sieht, in denen das Chaos regiert, in denen die Projektleitung nur reagiert statt zu steuern, dem sei Mike Cohns Agile Estimating and Planning ans Herz gelegt. Ein Buch, das dem Leser eine neue Perspektive darauf gibt, &#8230; <a href="http://gerritbeine.com/2013/04/mike-cohn-agile-estimating-and-planning/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><div id="attachment_197" class="wp-caption alignleft" style="width: 237px"><a href="https://gerritbeine.com/wp-content/uploads/2012/03/Mike-Cohn-Agile-Estimating-and-Planning.jpg"><img src="https://gerritbeine.com/wp-content/uploads/2012/03/Mike-Cohn-Agile-Estimating-and-Planning-227x300.jpg" alt="Mike Cohn: Agile Estimating and Planning" title="Mike Cohn: Agile Estimating and Planning" width="227" height="300" class="size-medium wp-image-197" /></a><p class="wp-caption-text">Mike Cohn: Agile Estimating and Planning</p></div> Wer immer wieder Projekte sieht, in denen das Chaos regiert, in denen die Projektleitung nur reagiert statt zu steuern, dem sei Mike Cohns Agile Estimating and Planning ans Herz gelegt.<br />
Ein Buch, das dem Leser eine neue Perspektive darauf gibt, wie Projekte funktionieren können, wenn man nur endlich beginnt, Projekte und ihre Plannung besser zu verstehen.<br />
Das Buch macht einem Lust darauf, Projekte nur noch agil zu planen. Zwar merkt man Cohns deutliche Vorliebe für User Stories und Scrum, aber die Ideen und Konzepte aus diesem Buch sind auch Problemlos mit anderen Methoden des Requirement Engineering oder agilen Vorgehensweisen kompatibel.<br />
Zum Einstieg erfährt der Leser, warum Planung notwendig ist und warum sie so oft daneben liegt. Aus den Gründen für letzteres leitet Cohn ab, dass Planung eigentlich nur agil funktionieren kann &#8211; eine Erkenntnis der man unweigerlich zustimmen muss, wenn man neben der agilen auch die Welt des V-Modells kennt.<br />
Im zweitel Teil des Buches nimmt Cohn dem Leser die Angst, zu schätzen. Es wird klar, dass Schätzen inhärenter Bestandteil von Planung ist und die einzige Möglichkeit, besser zu planen, darin besteht, besser zu schätzen. Dazu muss man mit dem Schätzen allerdings erst einmal beginnen. Mit echtem Schätzen, versteht sich. Cohn erklärt, wie man im Team schätzen kann, wann man neu schätzen muss und wann Story Points oder Ideal Days die bessere Grundlage sind.<br />
Der dritte Teil des Buches geht auf die Fragen ein, anhand welcher Werte man priorisieren sollte. Steht das Budget im Vordergrund? Oder eher die Funktionalität? Man erfährt, wie man beides gewichten kann und den Kunden zufrieden stellt. Zum Abschluss des dritten Teils erfährt der Leser noch einiges wichtige über das Splitten von Stories, wie man anhand von Datenstrukturen, Geschäftsprozessen oder Cross-Cutting-Concerns splittet um ein Projekt beherrschbar &#8211; und damit planbar &#8211; zu machen.<br />
Wie man einen agilen Plan mit einer Zeitplanung versieht, wird im vierten Teil des Buches erklärt. Ausgehend vom Release-Plan geht es zum Plan für Iterationen, entweder basierend auf der Velocity oder basierend auf Commitments. Auch die Unterschiede zwischen Release- und Iterationsplan werden erklärt. Interessant ist auch das Thema Schätzen der Verlocity und wie man in agilen Plänen mit Puffern umgeht. Ein kurzes Kapitel widment sich der Frage, wie man agile Pläne für Projekte mit mehr als einem Team aufstellen kann.<br />
<iframe src="http://rcm-de.amazon.de/e/cm?t=thefreshfeeli-21&#038;o=3&#038;p=8&#038;l=as1&#038;asins=0131479415&#038;ref=qf_sp_asin_til&#038;fc1=000000&#038;IS2=1&#038;lt1=_blank&#038;m=amazon&#038;lc1=0000FF&#038;bc1=000000&#038;bg1=FFFFFF&#038;f=ifr" style="width:120px;height:240px;float:right;padding:10px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> Da auch in agilen Projekten gefragt wird, wie weit das Projekt den voran gekommen ist, erklärt Cohn im fünften Teil des Buches, wie man Release- und Iterationsplänge beobachten kann und Maßnahmen ableitet. Es wird auch darauf eingegangen, wie man über und mit agilen Plänen kommuniziert.<br />
Die beiden letzten Teile widmen sich zum einen der Frage, warum agile Planung funktioniert und einer Fallsstudie zum Thema agile Planung.<br />
Fazit: Agile Estimating and Planning ist die konsequente Fortsetzung von <a href="http://gerritbeine.com/2013/04/mike-cohn-user-stories-applied/" title="Mike Cohn: User Stories Applied">User Stories Applied</a>. Wer Projekte plant, egal ob agil oder klassisch, für den ist dieses Buch ein Muss.</p>
]]></content:encoded>
			<wfw:commentRss>http://gerritbeine.com/2013/04/mike-cohn-agile-estimating-and-planning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mike Cohn: User Stories Applied</title>
		<link>http://gerritbeine.com/2013/04/mike-cohn-user-stories-applied/</link>
		<comments>http://gerritbeine.com/2013/04/mike-cohn-user-stories-applied/#comments</comments>
		<pubDate>Thu, 25 Apr 2013 17:58:59 +0000</pubDate>
		<dc:creator>gbeine</dc:creator>
				<category><![CDATA[Rezensionen]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Mike Cohn]]></category>
		<category><![CDATA[Rezension]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[User Stories]]></category>

		<guid isPermaLink="false">http://gerritbeine.com/?p=276</guid>
		<description><![CDATA[User Stories Applied ist nach wie vor das Standard-Werk, wenn es um das Erstellen, Verwalten und Schätzen von User Stories geht. Mike Cohns Buch ist für Anfänger, die gerade beginnen, sich mit User Stories zu beschäftigen, ebenso gut geeignet wie &#8230; <a href="http://gerritbeine.com/2013/04/mike-cohn-user-stories-applied/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><div id="attachment_293" class="wp-caption alignleft" style="width: 235px"><a href="http://gerritbeine.com/wp-content/uploads/2012/05/Mike-Cohn-User-Stories-Applied.png"><img src="http://gerritbeine.com/wp-content/uploads/2012/05/Mike-Cohn-User-Stories-Applied-225x300.png" alt="Mike Cohn; User Stories Applied" title="Mike Cohn; User Stories Applied" width="225" height="300" class="size-medium wp-image-293" /></a><p class="wp-caption-text">Mike Cohn; User Stories Applied</p></div> User Stories Applied ist nach wie vor das Standard-Werk, wenn es um das Erstellen, Verwalten und Schätzen von User Stories geht. Mike Cohns Buch ist für Anfänger, die gerade beginnen, sich mit User Stories zu beschäftigen, ebenso gut geeignet wie als Inspriration für alte Hasen.</p>
<p>Im ersten, einführenden Teil erklärt der Cohn, was User Stories und Akzeptanztests eigentlich sind. Dabei erklärt er das Schreiben von Stories anhand des <a href="http://xp123.com/articles/invest-in-good-stories-and-smart-tasks/" title="INVEST in Good Stories, and SMART Tasks">INVEST</a> Paradigmas von Bill Wake. Wichtig fand ich das Kapitel 3 über die Benutzerrollen, denn das ist in meinen Augen der ideale Einstieg in einen Story-Workshop. Der Story-Workshop wird in Kapitel 4 als eine Möglichkeit vorgestellt, zu Ideen für User Stories zu kommen. Andere beschriebene Alternativen sind Fragebögen, Interviews und Beobachten von Benutzern.<br />
In Kapitel 5 erklärt Cohn, welche Rollen als User Proxy zum Einsatz kommen können und welche Stärken und Schwächen diesen Rollen anhaften. Ein wichtiges Kapitel, denn leider gibt es zu häufig keinen Kontakt zwischen den Entwicklungsteams und den Nutzern.<br />
Wie man Akzeptanztests für die User Stories erstellt, wie viele man benötigt und was sie beinhalten sollten wird im darauf folgenden Kapitel erklärt. Beendet wird der erste Teil des Buches einem Kapitel, das zusammenfasst, wie man gute User Stories schreibt. Man sollte mit klaren Zielen anfangen, große Stories aufteilen, das User Interface erst sehr spät beschreiben und noch einiges mehr.</p>
<p>Der zweite Teil des Buches beschäftigt sich mit Fragen rund um das Planen mit und das Schätzen von Stories.<br />
Zunächst geht Mike Cohn auf die Idee der Story Points ein. Er erklärt, warum es wichtig ist, dass das Team die User Stories gemeinsam schätzt. In Kapitel 9 wird erklärt, wie man ein Release mit User Stories plant. Kapitel 10 macht deutlich, wie die Arbeit mit User Stories in Interationen erfolgen kann (z.B. Sprints in Scrum).<br />
Zum Abschluß des zweiten Teils erklärt Cohn noch, wie die Velocity gemessen werden kann, wie sie bei der Planung hilft und wozu Burn Down Charts eingesetzt werden können.</p>
<p><iframe src="http://rcm-de.amazon.de/e/cm?t=thefreshfeeli-21&#038;o=3&#038;p=8&#038;l=as1&#038;asins=0321205685&#038;ref=qf_sp_asin_til&#038;fc1=000000&#038;IS2=1&#038;lt1=_blank&#038;m=amazon&#038;lc1=0000FF&#038;bc1=000000&#038;bg1=FFFFFF&#038;f=ifr" style="width:120px;height:240px;padding:10px;float:right;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> Alle Themen, die nicht in die beiden ersten Teile passen, aber wichtig sind, werden im dritten Teil &#8220;Frequently Discusses Topics&#8221; besprochen. Das erste dieser Themen ist in Kapitel 12 die Frage, was User Stories nicht sind, gefolgt von einem Kapitel zur Frage, warum man User Stories benutzen sollte. Kapitel 14 stellt einige Story Smells vor, die leider immer wieder passieren und in Kapitel 15 geht Cohn kurz auf das &#8220;Dream-Team&#8221; User Stories mit Scrum ein. Abgeschlossen wird der dritte Teil mit verschiedenen Randthemen wie der Frage, nach den Zusammenhängen von Bugs und User Stories aus Anforderungs- und Planungssicht.</p>
<p>Das Buch wird durch einen vierten Teil abgerundet, in dem in mehreren Kapiteln ein Beispiel durchgesprochen wird. Dieser Teil ist im Wesentlichen für Einsteiger interessant, die Orientierung für das Handwerk benötigen.</p>
<p>Wie eigentlich alles, was Mike Cohn schreibt, kann ich auch dieses Buch wärmstens empfehlen.</p>
]]></content:encoded>
			<wfw:commentRss>http://gerritbeine.com/2013/04/mike-cohn-user-stories-applied/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Das I in INVEST &#8211; wie unabhängig können User Stories sein?</title>
		<link>http://gerritbeine.com/2013/03/das-i-in-invest-wie-unabhangig-konnen-user-stories-sein/</link>
		<comments>http://gerritbeine.com/2013/03/das-i-in-invest-wie-unabhangig-konnen-user-stories-sein/#comments</comments>
		<pubDate>Sun, 31 Mar 2013 17:46:13 +0000</pubDate>
		<dc:creator>gbeine</dc:creator>
				<category><![CDATA[User Story Pattern]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[User Stories]]></category>

		<guid isPermaLink="false">http://gerritbeine.com/?p=539</guid>
		<description><![CDATA[Heute hatte ich eine sehr spannende Diskussion. Es ging um das INVEST-Paradigma für User Stories, speziell um das I in INVEST. Das I steht für independent, also unabhängig. Gute Stories sollen genau das sein: unabhängig. Während der Diskussion ist mir &#8230; <a href="http://gerritbeine.com/2013/03/das-i-in-invest-wie-unabhangig-konnen-user-stories-sein/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Heute hatte ich eine sehr spannende Diskussion. Es ging um das <a href="http://xp123.com/articles/invest-in-good-stories-and-smart-tasks/" title="INVEST in Good Stories">INVEST</a>-Paradigma für User Stories, speziell um das I in INVEST. Das I steht für <em>independent</em>, also <em>unabhängig</em>.<br />
Gute Stories sollen genau das sein: unabhängig.</p>
<p>Während der Diskussion ist mir bewusst geworden, dass das I in INVEST mindestens ebenso häufig falsch interpretiert wird, wie das zweite Wertepaar im <a href="http://www.agilemanifesto.org/iso/de/" title="Agile Manifest">Agilen Manifest</a>.</p>
<p>Unabhängigkeit bei User Stories kann nämlich als die Möglichkeit einer beliebigen Reihenfolge verstanden werden. Wenn sich dieses Verständnis für Unabhängigkeit festgesetzt hat, führt das häufig zu künstlich unabhängigen oder zu großen User Stories und langwierigen Diskussionen über die Qualität der User Stories.<br />
Künstliche Unabhängigkeit versucht um jeden Preis zu vermeiden, dass eine Story A implementiert sein muss, bevor eine Story B umgesetzt werden kann. Damit einher gehen häufig ziemlich schräge Akzeptanzkriterien oder es gibt eine Story-Explosion, weil versucht wird, so lange gemeinsame Teilaspekte aus den beiden Stories heraus zu splitten, bis die Abhängigkeit aufgelöst ist. Was aber nie passieren wird, Abhängigkeiten lassen sich manchmal vielleicht verstecken, aber nicht eliminieren.<br />
Die zweite Variante, die ich beobachtet habe, führt dazu, dass Story B, die von Story A abhängt eben zu einer Story AB zusammengefasst werden. Die Story Points werden schnell addiert und man ist fein raus &#8211; glaubt man.<br />
Meistens passt die Story dann nicht mehr in einen Sprint oder man erkennt erst, nach der Umsetzung von A und B, dass B überflüssig war. Bei zwei einzelnen Stories wäre diese Erkenntnis billiger zu haben gewesen.</p>
<p>Ich bin der Überzeugung, dass es völlig OK ist, wenn eine Story die Erledigung einer anderen Story voraussetzt. Insbesondere große und komplexe Systeme lassen sich gar nicht anders aufbauen. Die Unabhängigkeit von User Stories bedeutet eben gerade nicht, dass sie in beliebiger Reihenfolge realisiert werden können. Vielmehr bedeutet die Unabhängigkeit von User Stories, dass der Product Owner die Möglichkeit hat, im aktuellen Sprint das in Story A beschriebene Feature von einem Team realisieren zu lassen, ohne dass das von Story B beschriebene Feature auch realisiert werden muss. Story B kann zu einem beliebigen späteren Zeitpunkt von einem anderen Team realisiert werden. Genau das ist die Unabhängigkeit, die mit User Stories erreicht werden soll und die sowohl den Teams als auch dem Product Owner nützt.<br />
Dazu ist es natürlich notwendig, dass die Story A in sich abgeschlossen ist. Hier spielen das T (Testable) und das V (Valuable) in INVEST mit der Unabhängigkeit zusammen. Insofern muss es in jedem größeren System Stories geben, die Vorbedingung für andere Stories sind.<br />
Die Unabhängigkeit bezieht sich auf die Entscheidungsfreiheit des Product Owner, Features neu einzuplanen und neu zu priorisieren &#8211; nicht auf die notwendige technische Reihenfolge.</p>
]]></content:encoded>
			<wfw:commentRss>http://gerritbeine.com/2013/03/das-i-in-invest-wie-unabhangig-konnen-user-stories-sein/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Story Pattern: Teile und Herrsche</title>
		<link>http://gerritbeine.com/2013/03/user-story-pattern-teile-und-herrsche/</link>
		<comments>http://gerritbeine.com/2013/03/user-story-pattern-teile-und-herrsche/#comments</comments>
		<pubDate>Sun, 24 Mar 2013 13:05:35 +0000</pubDate>
		<dc:creator>gbeine</dc:creator>
				<category><![CDATA[Methodisches]]></category>
		<category><![CDATA[User Story Pattern]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Story Pattern]]></category>
		<category><![CDATA[User Stories]]></category>

		<guid isPermaLink="false">http://gerritbeine.com/?p=530</guid>
		<description><![CDATA[In meinem zweiten Artikel zum Thema Story Pattern möchte ich auf ein Problem eingehen, das mir vor kurzem bei einem Kunden begegnet ist. Es gibt eine große Menge von auf den ersten Blick eher klein erscheinenden Änderungen an meinem Produkt, &#8230; <a href="http://gerritbeine.com/2013/03/user-story-pattern-teile-und-herrsche/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>In meinem zweiten Artikel zum Thema Story Pattern möchte ich auf ein Problem eingehen, das mir vor kurzem bei einem Kunden begegnet ist. </p>
<p>Es gibt eine große Menge von auf den ersten Blick eher klein erscheinenden Änderungen an meinem Produkt, die bis zu einem bestimmten Zeitpunkt, z.B. einem Messeauftritt, fertig gestellt sein müssen. Die Liste der Änderungen kommt zu mir als Product Owner in Form einer Excel-Tabelle oder einer Powerpoint-Präsentation. Mit der Qualität der Beschreibungen können sowohl mein Team als auch ich gut leben. Wir wissen aber alle, dass die Menge der Änderungen zu groß ist, als dass sie bis zum gesetzten Termin umgesetzt werden können.<br />
<span id="more-530"></span><br />
Es ist mir schon oft passiert, dass der Product Owner in solchen Fällen eine Story erstellt mit dem Inhalt &#8220;Setzt so viele Änderungen wie möglich aus der Liste um&#8221; und den Aufwand aus der aktuellen Velocity seines Teams anhand des Enddatums berechnet oder einfach die Timebox hinnimmt.</p>
<p>Ich gehe mit solchen Fällen anders um. Genau das sind Situationen, in denen ich die Aufgaben des Product Owner besonders ernst nehme. Da mich mein Team ohnehin fragen wird, womit sie beginnen sollen, muss ich mich mit den Prioritäten der einzelnen Änderungen beschäftigen. Nur habe ich, wenn ich das in eine Story packe, keine Möglichkeit den Aufwand der für die einzelnen Änderungen notwendig ist, in meiner Priorisierung zu berücksichtigen. Deshalb erstelle ich aus den einzelnen Änderungen einzelne, vermutlich sehr kleine User Stories. Da stöhnt man als Product Owner schon mal, weil das eine lästige und aufwendige Arbeit ist. Aber die Mühe lohnt sich.<br />
Ich kann die USer Stories dann nämlich nach meinen Vorstellungen priorisieren und in der von mir erdachten Reihenfolge von meinem Team schätzen lassen. Sind Stories dabei, deren Kosten/Nutzen-Verhältnis mir nicht gefällt, sortiere ich sie aus. Und wenn die kumulierte Schätzung des Teams bei seiner aktuellen Velocity das Zeitfenster bis zum Endtermin ausfüllt, kann ich das Schätzen abbrechen. Alles weitere wird nämlich bis zum Termin ohnehin nicht fertig, also muss sich damit auch niemand weiter beschäftigen.</p>
<p>Nach dem ganzen Aufwand, den ich dafür getrieben habe, möchte ich als Product Owner natürlich einen Vorteil gegenüber der Nur-Eine-Story-Variante. Das Positive ist: Es gibt nicht nur einen Vorteil.</p>
<ul>
<li>Weil das Team die Stories geschätzt hat, wird seine Velocity nicht verfälscht. Damit bleibt meine Planungsgrundlage für die nächsten Sprints stabil.</li>
<li>Weil ich eine Priorisierung der Stories festgelegt habe, muss das Team mich nicht nach einer Abarbeitungsreihenfolge innerhalb einer großen Story fragen. Ich kann mich also schon um die Inhalte für die nächsten Sprints kümmern.</li>
<li>Weil ich das Team nur so viel habe schätzen lassen, wie es schaffen kann, bekomme ich ein Maximum an Output. Das Team muss sich nicht mit Dingen beschäftigen, die für mich nicht relevant sind &#8211; die habe ich ja aussortiert.</li>
<li>Und ich bekomme nur die Änderungen, die ich auch als wertvoll hinsichtlich ihres Aufwand/Nutzen-Verhältnisses erachte.</li>
</ul>
<p>Ich habe dieses Pattern unter dem Aspekt Zeitbegrenzung beschrieben, weil es im letzten Szenario, in dem es mir begegnete genau dieses Ziel verfolgte. Ich kann aber auch das Ziel einer Nutzenmaximierung oder einer Aufwandsbegrenzung damit erreichen, je nachdem was mir als Product Owner gerade wichtig ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://gerritbeine.com/2013/03/user-story-pattern-teile-und-herrsche/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New, In Progress, Done &#8211; mehr nicht?</title>
		<link>http://gerritbeine.com/2013/03/new-in-progress-done-mehr-nicht/</link>
		<comments>http://gerritbeine.com/2013/03/new-in-progress-done-mehr-nicht/#comments</comments>
		<pubDate>Sun, 17 Mar 2013 23:02:56 +0000</pubDate>
		<dc:creator>gbeine</dc:creator>
				<category><![CDATA[Methodisches]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Scrum Board]]></category>
		<category><![CDATA[Sprint]]></category>
		<category><![CDATA[Sprint Backlog]]></category>

		<guid isPermaLink="false">http://gerritbeine.com/?p=574</guid>
		<description><![CDATA[Ein Scrum Board kennt drei Zustände für Aufgaben, die im Sprint ausgeführt werden müssen. Nach dem Sprint Planning sind alle Aufgaben im Zustand „New“. Die so überschriebene Spalte des Scrum Boards repräsentiert das Sprint Backlog. Von links nach rechts sind &#8230; <a href="http://gerritbeine.com/2013/03/new-in-progress-done-mehr-nicht/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ein Scrum Board kennt drei Zustände für Aufgaben, die im Sprint ausgeführt werden müssen. Nach dem Sprint Planning sind alle Aufgaben im Zustand „New“. Die so überschriebene Spalte des Scrum Boards repräsentiert das Sprint Backlog. Von links nach rechts sind die Aufgaben themenweise gruppiert und von oben nach unten sind die Themen priorisiert.<br />
Sobald jemand eine Aufgabe beginnt, wandert diese Aufgabe in den Zustand „In Progress“. Ein guter Zeitpunkt um das zu machen ist das Daily Standup Meeting, aber natürlich kann man auch zu anderen Zeiten Aufgaben beginnen. Das Daily dient nur dazu, das Team zu informieren, was man an einem Tag alles tun möchte. „In Progress“ ist die Aufgabe erst, wenn man sie wirklich beginnt.<br />
Den letzten Zustand „Done“ erreicht eine Aufgabe erst, wenn sie komplett abgeschlossen ist. Aufgaben von „In Progress“ nach „Done“ zu verschieben ist ebenfalls etwas, das im Daily Standup passieren sollte. Während es zumeist kein Problem ist, außerhalb des Daily Standup eine Aufgabe „In Progress“ zu nehmen, kann man mit dem Zustandswechsel auf „Done“ eigentlich problemlos bis zum nächsten Daily Standup warten.<br />
<span id="more-574"></span><br />
Ein Team, das ich als Scrum Master begleite, ist da ziemlich pfiffig. Die Teammitglieder hängen Aufgaben, die am nächsten Tag nach „Done“ geschoben werden können an den rechten Rand der „In Progess“ Spalte.<br />
Damit wissen im nächsten Daily Standup alle Bescheid, auch wenn ein Teammitglied ausserplanmäßig ausfällt.</p>
<p>Warum ist es wichtig, dass das Scrum Board genau drei Spalten hat?<br />
Die Antwort ist ganz einfach: eine Aufgabe kann nur in diesen drei Zuständen sein. Solange sie noch nicht erledigt ist, ist sie „In Progess“ und wenn sie noch nicht „In Progress“ ist, ist sie „New“.</p>
<p>In den letzten vier Monaten bin ich drei Scrum Teams begegnet, deren Boards zusätzliche Spalten hatten. Ich habe diese Teams gefragt, wozu sie diese Spalten benötigen. Der häufigste Vertreter von Spalte Vier+N war „QA“. Diese Spalte wird immer dann angewendet, wenn jemand den Mitgliedern des Teams nicht zutraut, selbst Verantwortung für die Qualität ihrer Arbeit zu übernehmen und eine Kontrollinstanz einbauen wollte. Das widerspricht aber einem Grundprinzip agiler Softwareentwicklung. Vertraue dem Team und behandle die Teammitglieder wie erwachsene Menschen.</p>
<p>Die Spalte „QA“ und ähnliche Konstruktionen führt in allen Teams, die ich beobachten konnte, zu zwei Anti-Pattern die in agiler Softwareentwicklung vermieden werden sollten. Das erste Anti-Pattern ist, dass die Leute abstumpfen. Es gibt ja für alles noch eine Kontroll-Instanz. Und je besser die ist, desto schlechter droht die Qualität der Tasks zu werden. Man entzieht damit dem einzelnen Teammitglied die Verantwortung für die eigene Arbeit.</p>
<p>Das zweite Anti-Pattern ist, dass Aufgaben nicht bis zu ihrem tatsächlichen Ende gebracht werden. Der Idealfall: ein Teammitglied, angenommen ein Junior Developer, ist irgendwann der Meinung, fertig zu sein. Wenn sich der Junior Developer unsicher ist, ob die Aufgabe korrekt bearbeitet wurde, wird er sich selbst an einen Senior Developer wenden*. Der macht vielleicht noch ein paar Anmerkungen und nach deren Einarbeitung ist die Aufgabe erledigt.<br />
Gibt es die Spalte Vier, wird der Junior Developer sich geistig von der Aufgabe lösen, sobald er sie dorthin schiebt. Es ist dann nicht mehr seine Aufgabe. Das ist ungünstig, weil die Aufgabe ja noch nicht „Done“ ist. Sie ist nach wie vor „In Progress“. Das Teammitglied, das eine Aufgabe in Spalte vier schiebt, wendet sich der nächsten Aufgabe zu und gibt damit die Verantwortung für seine Arbeit ab. Irgendwann wird sind jemand um „QA“ kümmern &#8211; völlig entkoppelt von der vorherigen Bearbeitung.<br />
Und was dann? Die Aufgabe geht wieder zurück auf „In Progress“?<br />
Dazu müsste der vorherige Bearbeiter entweder seine neue Aufgabe unterbrechen oder aber er stapelt Aufgaben, die aus „QA“ zurückkommen.<br />
Geht die Aufgabe wieder auf „New“? Wie soll dann der Junior Developer lernen, was er falsch gemacht hat? Dazu müsste dann zu jeder Aufgabe die Historie gepflegt werden. Das wiederum ist bei der Kurzlebigkeit von Scrum Board Tasks Zeitverschwendung.<br />
Alles in allem sind Spalte Vier und weitere keine gute Lösung bei einem Scrum Board, weil man die Verantwortung der einzelnen Teammitglieder reduziert und die Menge der tatsächlich in Bearbeitung befindlichen Aufgaben verschleiert. Oft wird diese Spalte sogar zu einem Bottleneck, weil zu wenige Teammitglieder als würdig befunden werden, QA zu betreiben. Dann kommt es kurz vor Sprint-Ende zu einem hektischen QA-Tag &#8211; was nichts anderes bewirkt, als dass die Qualität sinkt.</p>
<p>Immer wenn jemand von mir verlangt, eine Spalte Vier wie z.B. „QA“ auf einem Scrum Board einzuführen, antworte ich, dass Qualität nicht gesichert, sondern produziert wird. In einem agilen Team sind Spalte-Vier-Tätigkeiten wie „QA“ eben nicht zusätzliche Spalten eines Scrum Boards zwischen „In Progress“ und „Done“, sondern werden kontinuierlich von allen Teammitgliedern verantwortungsbewusst ausgeführt. „QA“ ist immer „In Progress“.</p>
<p>* Wenn nicht ohnehin Pair Programming praktiziert wird.</p>
]]></content:encoded>
			<wfw:commentRss>http://gerritbeine.com/2013/03/new-in-progress-done-mehr-nicht/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code-Reviews, ganz persönlich</title>
		<link>http://gerritbeine.com/2013/03/code-reviews-ganz-personlich/</link>
		<comments>http://gerritbeine.com/2013/03/code-reviews-ganz-personlich/#comments</comments>
		<pubDate>Mon, 11 Mar 2013 20:31:27 +0000</pubDate>
		<dc:creator>gbeine</dc:creator>
				<category><![CDATA[Methodisches]]></category>
		<category><![CDATA[Code-Reviews]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Softwarequalität]]></category>

		<guid isPermaLink="false">http://gerritbeine.com/?p=569</guid>
		<description><![CDATA[Immer wieder begegne ich Entwicklern, die Tools für Code-Reviews benutzen. Ich tue das nicht mehr. Bisher ist mir kein einziges Review-Tool begegnet, das es mir ermöglicht, einen Review in der Qualität durchzuführen, die ich anstrebe. Weder Crucible, noch Jupiter oder &#8230; <a href="http://gerritbeine.com/2013/03/code-reviews-ganz-personlich/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Immer wieder begegne ich Entwicklern, die Tools für Code-Reviews benutzen. Ich tue das nicht mehr. Bisher ist mir kein einziges Review-Tool begegnet, das es mir ermöglicht, einen Review in der Qualität durchzuführen, die ich anstrebe. Weder <a href="http://www.atlassian.com/software/crucible/overview" title="Crucible">Crucible</a>, noch <a href="http://code.google.com/p/jupiter-eclipse-plugin/" title="Jupiter">Jupiter</a> oder mein Namensvetter <a href="http://code.google.com/p/gerrit/" title="Gerrit">Gerrit</a>.<br />
<span id="more-569"></span><br />
Das Resultat vieler Reviews, die in solchen Tools gemacht werden ist, dass sie die Qualität einer minimalen PMD- oder CheckStyle-Konfiguration aufweisen. Dazu ist mit die Zeit von Entwicklern zu wertvoll.</p>
<p>Die meisten solcher Review-Tools arbeiten entweder auf Datei- oder Patchset-Ebene und vorgesehen sind nur Kommentare für Zeilen oder Dateien. Die besseren können Blöcke. Assoziationen, Packages, Klassen, eben die Ebene auf der man beim Codieren denkt, unterstützen sie alle nicht. Nun ist es aber für das Verstehen von Code unerlässlich über die Grenzen von Dateien hinweg zu denken und Strukturen zu erkennen und zu hinterfragen, die auf Zeilenebene nur schwer zu verstehen und zu kommentieren sind. Das ist mit einem solchen Tool aber extrem schwierig. Deshalb setze ich mich für Code-Reviews immer neben den Entwickler und lasse mir erklären, was er da warum gemacht hat und hinterfrage das dann. Ich habe festgestellt, dass die Leute beim Erklären oft Schwachstellen in ihrem eigenen Code entdecken, die ich mit Zeilenkommentaren nie hätte erläutern können. Einige davon hätte ich sogar selbst nie entdeckt. Bei solch einem Gespräch können immer zwei lernen.</p>
<p>Abgesehen davon verleiten die meisten solcher asynchronen Tools auch dazu, Reviews zu machen, wenn gerade Zeit ist. Das ist dann meist eine Weile nachdem der vielleicht schlechte Code im Repository gelandet ist. Dabei will man den dort gar nicht haben. Der Review muss meiner Meinung nach vor dem Commit stattfinden. Idealerweise als Gespräch zwischen zwei erwachsenen Leuten. Damit erspart man dem Entwickler auch die Zeit, sich wieder in den Code von vor ein paar Tagen reinzudenken, was eigentlich immer länger dauert, als ihn direkt vor dem Commit kurz durchzugehen.</p>
<p>Software-Architektur und Software-Qualität kann man nicht auf Ebene von Dateien oder Code-Zeilen offline diskutieren &#8211; genau das ist aber das Ziel eines Reviews: ein kritisches Gespräch über Architektur und Qualität von Quellcode. Man braucht dazu einen Gegenüber, einen Menschen der einen in seine Gedanken einweiht, dessen Spiegel man sein kann. Nur auf diese Weise besteht die Möglichkeit, Entwicklern Erfahrung und Wissen zu vermitteln, nur auf diese Weise kann man nachhaltig lernen.</p>
]]></content:encoded>
			<wfw:commentRss>http://gerritbeine.com/2013/03/code-reviews-ganz-personlich/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Story Pattern: Teilen nach Schnittstellen</title>
		<link>http://gerritbeine.com/2013/03/user-story-pattern-teilen-nach-schnittstellen/</link>
		<comments>http://gerritbeine.com/2013/03/user-story-pattern-teilen-nach-schnittstellen/#comments</comments>
		<pubDate>Mon, 04 Mar 2013 21:04:18 +0000</pubDate>
		<dc:creator>gbeine</dc:creator>
				<category><![CDATA[User Story Pattern]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Planning]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Story Pattern]]></category>
		<category><![CDATA[User Stories]]></category>

		<guid isPermaLink="false">http://gerritbeine.com/?p=524</guid>
		<description><![CDATA[Dass User Stories dem INVEST-Prinzip genügen sollen, ist keine Neuigkeit und leicht zu verstehen. Wie man es in der Praxis erreichen kann, dass Stories diesen Prinzipien entsprechen, ist schon schwieriger. Sucht man bei Google nach Pattern für Story Schnitt findet &#8230; <a href="http://gerritbeine.com/2013/03/user-story-pattern-teilen-nach-schnittstellen/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Dass User Stories dem <a title="INVEST in Good Stories, and SMART Tasks" href="http://xp123.com/articles/invest-in-good-stories-and-smart-tasks/">INVEST</a>-Prinzip genügen sollen, ist keine Neuigkeit und leicht zu verstehen. Wie man es in der Praxis erreichen kann, dass Stories diesen Prinzipien entsprechen, ist schon schwieriger. Sucht man bei Google nach Pattern für Story Schnitt findet man eine ganze Reihe von Ideen und Empfehlungen.<br />
Ich möchte in einigen kurzen Artikeln einige Pattern vorstellen, die mir in Projekten begegnet sind &#8211; oder die ich mir gewünscht hätte <img src='http://gerritbeine.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Beginnen möchte ich mit dem Pattern <em>Teilen nach Schnittstellen</em> (Split along interfaces).</p>
<p>Eine Änderung im System bedingt, dass eine Reihe von Schnittstellen, z.B. Web Services, angepasst werden müssen. Das kann z.B. bei Anpassungen am Datenmodell der Fall sein, wenn die gleichen Daten von verschiedenen Web Services für unterschiedliche Kontexte oder Anwendungsfälle benutzt werden.</p>
<p>Hier würde ich für jede Schnittstelle immer eine separate Story erstellen. Das wirkt vielleicht zunächst sehr aufwändig, weil vielleicht jede Story die gleiche Änderung beschreibt. Tatsächlich vereinfacht es aber meine Aufgaben als Product Owner.</p>
<p>Der Vorteil einer Story pro Schnittstelle liegt darin, dass ich als Product Owner die Möglichkeit habe, zu priorisieren. Habe ich nur ein Entwicklungsteam, kann ich entscheiden, welche Schnittstellen am wichtigsten sind und die Stories in eine entsprechende Reihenfolge zu bringen. Habe ich mehr als ein Team zur Verfügung kann ich bei getrennten Stories eine höhere Parallelisierung erreichen.</p>
<p>Ein gutes Schnittstellen-Design vorausgesetzt, sind sämtliche Stories isoliert voneinander testbar. Neben der Priorisierung schafft dieses Pattern auch Transparenz für mich als Product Owner. Ich kann jederzeit erkennen, wie weit mein Team mit den Änderungen fortgeschritten ist. </p>
]]></content:encoded>
			<wfw:commentRss>http://gerritbeine.com/2013/03/user-story-pattern-teilen-nach-schnittstellen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
