<?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>Sterk blanding &#187; Smidig</title>
	<atom:link href="http://sterkblanding.no/blog/tag/smidig/feed/" rel="self" type="application/rss+xml" />
	<link>http://sterkblanding.no</link>
	<description>– Sterke meninger om IT og ledelse</description>
	<lastBuildDate>Wed, 11 Jan 2012 10:00:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Tre tips til hvordan du kan dele opp brukerhistoriene dine</title>
		<link>http://sterkblanding.no/blog/2011/06/30/tre-tips-til-hvordan-du-kan-dele-opp-brukerhistoriene-dine/</link>
		<comments>http://sterkblanding.no/blog/2011/06/30/tre-tips-til-hvordan-du-kan-dele-opp-brukerhistoriene-dine/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 12:34:36 +0000</pubDate>
		<dc:creator>Finn-Robert Kristensen</dc:creator>
				<category><![CDATA[Smidig]]></category>
		<category><![CDATA[spesifikasjon]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=1185</guid>
		<description><![CDATA[I smidige prosjekter jeg har deltatt i dukker det ofte opp problemer med å splitte opp brukerhistorier. Enten er de for store til å kunne estimeres eller til å passe inn i en iterasjon. Spørsmålet mange stiller er hvordan kan jeg splitte opp brukerhistorien min?]]></description>
			<content:encoded><![CDATA[<p>I smidige prosjekter jeg har deltatt i dukker det ofte opp problemer med å splitte opp brukerhistorier. Enten er de for store til å kunne estimeres eller til å passe inn i en iterasjon. Spørsmålet mange stiller er hvordan kan jeg splitte opp brukerhistorien min?</p>
<p>Her er tre ting du kan gjøre:</p>
<p><span id="more-1185"></span></p>
<p><strong>Splitt opp på domene</strong></p>
<p>Dette er kanskje den vanligste og enkleste måten å splitte opp brukerhistorier på. I domenet ditt vil du gjerne finne flere type kategorier av for eksempel produkter. Disse er ideelle å dele opp historiene dine på. La oss tenke oss et forsikringsselskap som tilbyr en rekke forskjellige forsikringsprodukter. Mye av tiden går til å behandle forsikringssaker og man skal lage et nytt system for å forbedre saksbehandlingstiden.</p>
<p>Eksempel:<br />
Som en saksbehandler<br />
Ønsker jeg å behandle en forsikringssak<br />
Slik at ..</p>
<p>Hva slags type forsikring er dette? Er det en skadeforsikring eller kanskje en livsforsikring? Her kan vi dele brukerhistorien opp på de forskjellige produktkategoriene.</p>
<p>Som en saksbehandler,<br />
Ønsker jeg å behandle en <strong>skadeforsikringssak</strong>,<br />
Slik at..</p>
<p>Hvis 70% av alle forsikringssaker er skadeforsikring vil jeg anta at denne vil ha en høyere prioritet enn en livsforsikringssak som kanskje gjelder 5% av alle sakene. Dette hjelper deg til å prioritere brukerhistoriene dine bedre.</p>
<p><strong>Splitt opp på operasjon</strong></p>
<p>Mange brukerhistorier handler om å skrive eller lese noe data. Dette kan vi dele opp i fire operasjoner: opprett, oppdater, slett og les.</p>
<p>Som en administrator,<br />
Ønsker jeg å administrere brukere<br />
Slik at jeg har kontroll på hvem som har tilgang til systemet</p>
<p>Etter samtaler med administratoren finner vi ut at han har behov for å opprette, endre og slettte brukere. Og ikke minst vise en brukerprofil som da blir les operasjonen. Du har nå mulighet til å dele opp en brukerhistorien i fire nye brukerhistorier.</p>
<p>Eksempel på å opprette:<br />
Som en administrator,<br />
Ønsker jeg å <strong>opprette en ny bruker</strong><br />
Slik at jeg enkelt kan gi nye brukere tilgang</p>
<p><strong>Splitt opp på roller</strong></p>
<p>Når vi diskuterer en brukerhistorie handler den som oftest om flere type brukere. Det kan være alt fra brukere som skal ha begrenset tilgang til brukere som bruker funksjonaliteten mer enn andre. Det kan lønne seg å identifisere hva slags type brukere som skal bruke funksjonaliteten og ut i fra dette bryte opp historien som beskriver hvem disse brukerene er og hva de trenger å kunne gjøre.</p>
<p>Som en kunde,<br />
Ønsker jeg å angi en leveringsadresse,<br />
Slik at …</p>
<p>Du har sikkert mange forskjellig typer kunder. Noen er kanskje innom daglig? Kanskje har du noen gode kunder som du ønsker å gjøre brukeropplevelsen bedre for?</p>
<p>Som en jevnlig kunde,<br />
Ønsker jeg å kunne velge en leveringsadresse fra mine tidligere ordre,<br />
Slik at jeg sparer tid på å fylle ut adressen min hver gang</p>
<p><strong>Konklusjon</strong></p>
<p>Ved å bryte ned historiene så får du noe som er enklere å prioritere innenfor en leveranse. Bryter du ned historiene dine vil du også ha mulighet til å implementere den viktigste funksjonaliteten først og unngå å bruke tid på å implementere funksjonalitet som sjelden blir brukt.</p>
<p>Her var tre eksempler på hvordan du kan bryte ned brukerhistoriene dine. Det er ikke alle brukerhistorier dette vil fungere på, men stort sett de fleste av dem.</p>
<p>Hvilke teknikker bruker du på å bruker historiene dine?</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2011/06/30/tre-tips-til-hvordan-du-kan-dele-opp-brukerhistoriene-dine/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Et godt retrospektiv</title>
		<link>http://sterkblanding.no/blog/2011/05/26/et-godt-retrospektiv/</link>
		<comments>http://sterkblanding.no/blog/2011/05/26/et-godt-retrospektiv/#comments</comments>
		<pubDate>Thu, 26 May 2011 18:46:49 +0000</pubDate>
		<dc:creator>Rikard Eriksen</dc:creator>
				<category><![CDATA[Samhandling]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[samarbeid]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=1165</guid>
		<description><![CDATA[Retrospektiv er en av de tre seremoniene i Scrum, og kanskje den viktigste. På retrospektiv evaluerer vi iterasjonen som har vært. Vi snakker om hva som har fungert godt, hva vi skal ta med oss videre og hva vi skal fortsette å gjøre. Og vi diskuterer hvor vi trenger å forbedre oss, hva vi skal [...]]]></description>
			<content:encoded><![CDATA[<p>Retrospektiv er en av de tre seremoniene i Scrum, og kanskje den viktigste. På retrospektiv evaluerer vi iterasjonen som har vært. Vi snakker om hva som har fungert godt, hva vi skal ta med oss videre og hva vi skal fortsette å gjøre. Og vi diskuterer hvor vi trenger å forbedre oss, hva vi skal endre på og hva vi skal slutte å gjøre.</p>
<p><span id="more-1165"></span></p>
<p><strong>Rutinepreget evaluering</strong><br />
Å evaluere seg selv er selvsagt viktig også i andre prosesser enn Scrum. Det å stadig forbedre seg, for å kunne jobbe mer effektivt, levere bedre kvalitet og trives bedre som team, er en nøkkelfaktor for suksess i de fleste prosjekter. Dessverre kan retrospektivmøter etterhvert bli rutinepregede; En aktivitet man gjør iterasjon etter iterasjon, uten egentlig å få fram de tingene som betyr noe, eller tenke nytt om temaer som går igjen gang etter gang. Da kan det ofte hjelpe å bryte opp mønstrene og gjøre noe nytt, for å skape variasjon og nytt engasjement rundt retrospektivet.</p>
<p>Her er et referat fra et retrospektiv jeg nylig hadde sammen med teamet jeg er Scrum Master på. Kanskje kan disse øvelsene inspirere deg til å skape ny glød neste gang du skal delta på et retrospektiv.</p>
<p><strong>Første øvelse: Tidslinja</strong><br />
Først tegnet vi opp ei tidslinje som illustrerte de tre ukene som iterasjonen hadde vart. Det var ei rett linje med helgene og andre fridager markert. På denne linja tegnet vi inn viktige hendelser. For eksempel måtte vi i slutten av første uke endre løsningsbeskrivelsen på flere av oppgavene på iterasjonskøen, fordi de var basert på en forutsetning som viste seg å være feil. I uke to måtte vi gjøre noen uplanlagte feilrettinger på en tidligere leveranse, og i uke tre fikk vi et nytt medlem på teamet.</p>
<p>Dette er noen eksempler på ting som kan tegnes inn på tidslinja. Det er ingen regler for hva som er riktig eller feil å tegne inn. Stort og smått kan tas med. Poenget med denne øvelsen er rett og slett å friske opp hukommelsen til teamet. Vi hjelper hverandre med å huske hva vi skal evaluere.</p>
<p><strong>Andre øvelse: Happygraf</strong><br />
Under tidslinja fikk så hvert teammedlem anledning til å tegne sin Happygraf. En Happygraf er en kurve som viser hvor fornøyd/glad eller misfornøyd vedkommende har vært i løpet av iterasjonen. Jo høyere kurve, jo mer fornøyd er du. Skalaen bestemmer dere selv. Dette er en morsom måte å uttrykke hvordan du har hatt det de siste tre ukene. Og det gir en fin innfallsvinkel til å kommunisere om følelser, uten å bruke ord.</p>
<p><strong>Tredje øvelse: Stikkordslotto</strong><br />
I den siste øvelsen fikk hvert teammedlem utdelt grønne og røde lapper. På de grønne lappene skrev vi ting som hadde fungert godt i iterasjonen, ting vi ville fortsette med å gjøre. På de røde lappene skrev vi forbedringspunkter, ønsker om endring. Her brukte vi stikkordsform, slik at vi bare skrev et ord eller et uttrykk på hver lapp. Setninger var forbudt.</p>
<p>Deretter samlet vi inn alle lappene og blandet dem sammen. De grønne lappene i en haug, og de røde i en annen. Så trakk vi etter tur en og en lapp fra en bunke, og leste stikkordet på den høyt. (Fikk vi en av våre egne lapper la vi den tilbake og trakk en ny.) Den som trakk en lapp måtte prøve å tolke hva stikkordet betydde. Da kunne hun gjerne bruke sine egne erfaringer fra iterasjonen til å forklare hva vedkommende hadde ment, og hva hun selv ville legge i ordet.</p>
<p>Etter at hun hadde sagt hva hun tenkte stikkordet betydde, skulle den som hadde skrevet lappen forklare hva han egentlig hadde ment. På denne måten fikk vi minst to forskjellige vinklinger på samme tema, og svært ofte gode diskusjoner som følge av det. En av oss hadde samtidig rolle som sekretær, og førte et referat av hva som ble sagt.</p>
<p><strong>Tiltak og ambisjoner</strong><br />
Sammen fikk disse tre øvelsene fram flere lærdommer  fra de siste ukene. Vi diskuterte flere vinklinger enn vi tidligere har gjort på samme tema, og gravde dypere i noen enkeltsaker. Til sammen brukte vi ca to timer på øvelsene. Vi kombinerte det med lunch, og hadde kjøpt inn mat.</p>
<p>I begynnelsen av den påfølgende iterasjonen tok vi en gjennomgang av referatet fra retrospektivet. Vi valgte ut de tre viktigste punktene hvor vi ønsket å sette oss konkrete mål for forbedring. Vi ble enige om tiltak og ambisjoner for hvilke resultater vi ønsket å oppnå. Denne gjennomgangen brukte vi ca en time på.</p>
<p><strong>Dine erfaringer</strong><br />
Hvilke erfaringer har du med retrospektiver? Har du opplevd noe som har fungert spesielt godt, eller har du tips til øvelser som er morsomme og gir gode resultater?</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2011/05/26/et-godt-retrospektiv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hvor moden er din test organisasjon?</title>
		<link>http://sterkblanding.no/blog/2011/03/03/hvor-moden-er-din-test-organisasjon/</link>
		<comments>http://sterkblanding.no/blog/2011/03/03/hvor-moden-er-din-test-organisasjon/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 09:18:44 +0000</pubDate>
		<dc:creator>rafaelsegarra</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[moden]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[TMMi]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=1085</guid>
		<description><![CDATA[Du må ikke nødvendigvis vite hvor moden den er. Men det er kanskje en god idé å gi dine testhelter litt pusterom ved å forvandle din organisasjon til en med definerte testaktiviteter. Test Maturity Model integrated (TMMi) viser deg veien. Torsdag 17. februar deltok jeg i en TMMI workshop på et hotell i landet som [...]]]></description>
			<content:encoded><![CDATA[<p>Du må ikke nødvendigvis vite hvor moden den er. Men det er kanskje en god idé å gi dine testhelter litt pusterom ved å forvandle din organisasjon til en med definerte testaktiviteter. Test Maturity Model integrated (TMMi) viser deg veien.</p>
<p>Torsdag 17. februar deltok jeg i en TMMI workshop på et hotell i landet som holder rekorden i verden på å være uten regjering: Belgia. Vi var ikke så mange, så jeg fikk god kontakt med foredragsholderen. Dette til tross for at han hadde en infeksjon i øret og hørte seg selv mens han pratet, og jeg for min egen del hørte veldig lite på det ene øret etter en heftig flytur dagen før.</p>
<p>Foredragsholderen, Brian Wells, er en hyggelig engelsk TMMi-rådgiver som bor i Lille i Frankrike og jobber for Experimentus. Han har 25 års erfaring innenfor testbransjen og han har blant annet vært ansatt for hennes majestet Elizabeth, Queen of England. Likevel tror jeg ikke at han vil definere seg selv som en testhelt.</p>
<p>Experimentus har utviklet en metode som følger TMMis sin referansemodell og fått den godkjent. Det vil si at Brian Wells kan hjelpe organisasjoner med å vurdere hvor gode de er på test i følge TMMi, og gi dem råd om hvordan det er mulig å bli enda bedre.</p>
<p><span id="more-1085"></span></p>
<p>Det finnes flere liknende modeller. Det som gjør denne litt spesiell er at den er tilgjengelig for offentligheten. Altså kan du utvikle din egen metode basert på den offentlige referansemodellen. Ved å gjøre dette kan dine resultater sammenliknes med andre som også bruker TMMi.</p>
<p>Flere egenskaper av TMMi modellen som jeg ville understrekke blant de mange som ble nevnt er følgende:</p>
<ul>
<li>Smidighet: Modellen støtter alle utviklingsmetoder.</li>
<li>Internasjonal standard: Det finnes to bedrifter som leverer testtjenester og er TMMi-sertifisert på nivå 3. Det ene i Sør-Korea og det andre i Spania. Nivå 3 betyr at disse er i stand til å styre testaktiviteter, men også at disse aktivitetene er tydelige definert og gjenbrukes.</li>
<li>Risiko: TMMi er veldig tydelig på at test er en aktivitet som styres av risikoanalyse.</li>
</ul>
<p>Du kan prøve deg men en gratis gransking fra Experimentus:<br />
<a href="http://www.experimentus.com/services-intelligentProcessImprovementiPI.html">http://www.experimentus.com/services-intelligentProcessImprovementiPI.html</a></p>
<p>Resultatene som er samlet hittil sier at ca. 72,5% av bransjen ligger på nivå 1 mens resten ligger på nivå 2.</p>
<p>Det er bare å gratulere prosjektet du jobber i dersom du får et bra resultat.  Fikk dere ikke det, må prosjektet passe ekstra godt på at deres testhelter er tilgjengelige når det gjelder. I hvert fall frem til test organisasjonen er moden nok.</p>
<p>Til slutt, et gratis råd fra Brian: Pass på å vite hvor organisasjonen din ligger i forhold til testaktiviteter før du prøver å gjøre den bedre, uansett hvilken modell du velger!</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2011/03/03/hvor-moden-er-din-test-organisasjon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Min supre produkteier</title>
		<link>http://sterkblanding.no/blog/2010/11/14/min-supre-produkteier/</link>
		<comments>http://sterkblanding.no/blog/2010/11/14/min-supre-produkteier/#comments</comments>
		<pubDate>Sun, 14 Nov 2010 19:58:49 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[produkteier]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[Smidig]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=996</guid>
		<description><![CDATA[Dette er en oppsummering av foredraget mitt på Smidig 2010 konferansen Jeg har vært så heldig å være på et prosjekt med en produkteier som har sørget for at vår innsats har blitt brukt til å effektivt skape verdi for brukerne av systemet. Jeg vil trekke fram mine observasjoner om hvordan produkteieren på dette prosjektet [...]]]></description>
			<content:encoded><![CDATA[<p><em>Dette er en oppsummering av foredraget mitt på <a href="http://smidig2010.no">Smidig 2010 konferansen</a></em></p>
<p>Jeg har vært så heldig å være på et prosjekt med en produkteier som har sørget for at vår innsats har blitt brukt til å effektivt skape verdi for brukerne av systemet. Jeg vil trekke fram mine observasjoner om hvordan produkteieren på dette prosjektet brukte produktkøen, hvordan han skapte dialog med brukerne og hvordan han kommuniserte effektivt med utviklerne.</p>
<p><span id="more-996"></span></p>
<h3>Produktkøen</h3>
<p>Produktkøen er produkteiers fremste verktøy for å styre prosjektet dit han ønsker. Det viktigste med <em>produktkøen er derfor at den er representert i et verktøy produkteieren er komfortabel med</em> å bruke. Vår produkteier brukte Excel, noe som fungerte godt for dette prosjektet. Hver brukerhistorie var en rad i et regneark. Når vi skulle endre prioritet, kunne vi dra og slippe en brukerhistorie til riktig sted. (Dette er et lurt knep å lære i Excel).</p>
<p>Etter hver iterasjon gikk jeg som Scrum master og produkteieren gjennom alt som var levert i iterasjonen. Vi markerte i produktkøen hva som var levert og hva som ikke var levert. I iterasjon 4, 5 og 6 skjedde noe merkelig. Iterasjon 4 hadde vi planlagt 7 brukerhistorie-poeng, men leverte 4. I iterasjon 5 hadde vi planlagt 7 og leverte 7. I iterasjon 6 hadde vi planlagt 7 og leverte 10. Det som skjedde var et en stor brukerhistorie var nesten ferdig på slutten av iterasjon 4. En ny stor brukerhistorie var nesten ferdig på slutten av iterasjon 5, og denne brukerhistorien fikk vi endelig levert i iterasjon 6. Produkteier insisterte på at en <em>brukerhistorie var enten ikke ferdig (0%) eller helt ferdig (100%)</em>. Dette gjorde at det aldri var noen skjønnsvurdering om hva vi hadde levert.</p>
<p>I prosjektet vårt skulle vi erstatte et eksisterende system. Produkteieren var veldig bevisst på å <em>prioritere et sammenhengende sett med brukerhistorier</em> som gjorde at brukerne kunne benytte de leveransene vi ble ferdig med i løpet av prosjektet. Det var to viktige vurderinger som produkteier tok: For det første må brukerne kunne utføre en arbeidsoppgave i den nye systemet, og ikke måtte hoppe mellom det nye og det gamle. For det andre må leveransene inneholde funksjonalitet som er interessant for brukerne.</p>
<h3>Personer og samspill</h3>
<p>Men produktkøen er den minst viktige delen av produkteiers jobb. Det smidige manifestet sier det selv: &#8220;Vi verdsetter personer og samspill over prosesser og verktøy.&#8221; Det er to viktige grupper som produkteieren må forholde seg til: Brukerne og utviklerne.</p>
<h3>Involvere brukere</h3>
<p>Før prosjektet startet, hadde <em>produkteieren involvert brukerne i prosjektet</em>. Mange brukere var blitt spurt om hva de mente var viktig med det nye systemet og noen brukere var valgt ut til en fokusgruppe. De to mest involverte brukerne deltok hele veien i prosjektet. Produkteieren identifiserte to brukere som de andre brukerne respekterte faglig, som forsto dagens system godt, som hadde meninger om hvordan ting burde være, og som ikke var redd for å si disse meningene.</p>
<p>Så snart vi hadde et produkt som kunne vises fram, satt vi dette i drift i <em>demoversjon som brukerne kunne teste ut</em>. Det viste seg å være vanskelig å få brukerne til å prioritere å teste det nye systemet. Det hjalp litt når produkteieren ga dem en oppgave de skulle utføre med det nye systemet (hjemmelekse). Det hjalp veldig når brukerne kunne bruke det nye systemet mot produksjonsdata som en del av jobbe sin.</p>
<p><em>Ekspertbrukerne deltok på alle demoer</em>. Ettersom en av de bodde i Rogaland og en i Hedmark, var det vanskelig for dem å reise til Oslo for hver eneste to-ukers iterasjon. De første iterasjonene var de alltid til stede, men etter dette kjørte vi kun demo annen hver iterasjon. Etter et halvt år i prosjektet forsøkte vi også å kjøre noen demoer med screen sharing (go-to-meeting, tror jeg) og telefonkonferanse. Det fungerte ok, men vi fikk mye nyttigere feedback når vi møttes ansikt til ansikt. Ekspertbrukerne hjalp oss å bli flinkere og validerte arbeidet vårt når et var bra.</p>
<h3>Kommuniserer med programmere</h3>
<p>For å ha framdrift, var prosjektet avhengig av at <em>produkteier og utviklere møtes hver dag</em>. Produkteier deltok på standup-møtene hver morgen. Etter standup-møtene hadde han satt av opp til en time der en utvikler kan vise fram ny funksjonalitet og få tilbakemeldinger, der produkteier kan gi tilbakemeldinger til en utvikler på funksjonalitet han testet i går og der produkteier kan forklare detaljene rundt nye brukerhistorier.</p>
<p>Når produkteieren forklarte brukerhistorier, var han flink til å være konkret. Dette er alfa og omega når en produkteier snakker med utviklere. Forskjellen på å vise fram en skjermbildeskisse og å forsøke å beskrive et abstrakt behov er gigantisk. Forskjellen på å fortelle et eksempel og å forklare en abstrakt arbeidsprosess er enorm. Ved å <em>bruke eksempler til å forklare brukerhistorier</em> var produkteiers forklaringer gode for utviklerne.</p>
<p>Til slutt var produkteieren vår <em>rask til å bestemme seg</em>. Dersom det var et uklart valg, fikk vi ofte en avgjørelse der og da. Når produkteier måtte sjekke med andre, tok det en eller to dager før han kunne gi oss en beslutning. Noen ganger fant han senere ut at han måtte ombestemme seg. Da utførte vi ganske enkelt den endelig løsningen i en senere iterasjon. Det er mye mer effektivt å utvikle noe som er en rimelig hypotese, få tilbakemelding og så utvikle det riktige, enn det er å vente på en beslutning.</p>
<p><em>For å lykkes som produkteier, må du kunne bruke produktkøen effektivt, du må involvere brukerne dine gjennom hele prosjektet og du må kommunisere med utviklerne hver dag. Da vil du ha et vellykket Scrum-prosjekt!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/11/14/min-supre-produkteier/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Slik lykkes du med smidig utvikling</title>
		<link>http://sterkblanding.no/blog/2010/10/29/slik-lykkes-du-med-smidig-utvikling/</link>
		<comments>http://sterkblanding.no/blog/2010/10/29/slik-lykkes-du-med-smidig-utvikling/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 10:17:57 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[produkteier]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[prosjektledelse]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[Smidig]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=946</guid>
		<description><![CDATA[Har du startet å bruke smidige metoder, men lurer på hvordan du skal få det til å fungere bedre? I denne artikkelen kan du få konkrete tips om hvordan å forbedre kommunikasjonen, kvaliteten og forretningsfokus på ditt smidige eller ikke-smidige utviklingsprosjekt. Bedre kommunikasjon Inkluder produkteier på morgenmøtene: Daglig kommunikasjon mellom kunde og leverandør har en [...]]]></description>
			<content:encoded><![CDATA[<p>Har du startet å bruke smidige metoder, men lurer på hvordan du skal få det til å fungere bedre? I denne artikkelen kan du få konkrete tips om hvordan å forbedre kommunikasjonen, kvaliteten og forretningsfokus på ditt smidige eller ikke-smidige utviklingsprosjekt.</p>
<p><span id="more-946"></span></p>
<h3>Bedre kommunikasjon</h3>
<ul>
<li><strong>Inkluder produkteier på morgenmøtene</strong>: Daglig kommunikasjon mellom kunde og leverandør har en dokumentert enorm effekt på hvor vellykket et prosjekt blir. Teamets fokus blir mye bedre dersom det er noen på de daglige standup møtene som er interessert i å prøve ut det som har blitt laget i går, som er interessert i å komme med innspill på det som lages i dag og som har myndighet til svare på avklaringer angående dagens oppgaver.</li>
<li><strong>Programmér sammen</strong>: Utviklere på prosjekter innehar enorm kunnskap, både om de delene av systemet man lager og om programmering generelt. Når man programmerer i par og roterer hvem som jobber sammen hyppig, blir denne kunnskapen spredt til alle. Spe også gjerne på med seanser der hele teamet går gjennom deler av koden på storskjerm.</li>
<li><strong>Bruk en Scrum-tavle</strong>: For å hjelpe alle å huske på hva som er målet med sprinten, er det lurt om teamet holder standup møtene rundt en tavle med lapper for alle aktiviteter teamet har planlagt i iterasjonen. Lappene henger i kolonner &#8220;venter&#8221;, &#8220;under arbeid&#8221; og &#8220;ferdig&#8221;. Hver lapp bør ha et så lite omfang at teamet flytter flere lapper til &#8220;ferdig&#8221; hver dag.</li>
</ul>
<h3>Bedre kvalitet</h3>
<ul>
<li><strong>Verifiser krav med funksjonelle tester</strong>: Når teamet skal jobbe med en oppgave i en iterasjon, er det viktig at alle har konkret forståelse av oppgaven. Produkteier bør beskrive eksempler for å gjøre oppgavene konkrete. Om mulig, bør produkteier uttrykke eksemplene i et verktøy for automatisert funksjonell testing (for eksempel FitNesse eller Cucumber). Teamet kan da kjøre testene og automatisk sjekke at de oppfyller produkteiers forventning</li>
<li><strong>Skriv enhetstester før koden den tester</strong>: For å kunne utvikle funksjonalitet inkrementelt, må man kunne endre på kode som allerede har vært ferdigstilt, samtidig som man er (rimelig) sikker på at endringen ikke ødelegger noe som har virket før. De funksjonelle testene kan gi et sikkerhetsnett, men det tar typisk lang tid å kjøre dem og de gir ofte ikke en eksakt indikasjon av hva som er feil når noe ikke virker. Derfor bør teamet skrive raske tester som verifiser at klassene i systemet fungerer, gjerne før man skriver koden.</li>
<li><strong>Integrer endringer kontinuerlig og automatisk</strong>: Automatiske tester er kun verdifulle dersom de kjøres! Sett derfor opp en Continuous Integration server som sjekker ut og tester alle endringer hver gang en utvikler har sjekket inn en endring til kildekodekontroll. Om mulig bør dette systemet også automatisk installere den siste versjonen av programvaren til et egnet testmiljø, slik at produkteier alltid kan se hva som er siste versjon av systemet.</li>
</ul>
<h3>Bedre forretningsfokus</h3>
<ul>
<li><strong>Inkluder alle oppgaver i en prioritert produktkø</strong>: Mange team lurer på hvilke oppgaver som skal puttes på produktkøen. Dersom noe gir forretningsverdi og tar betydelig tid å utføre, bør produkteier inkludere oppgaven på produktkøen. Ikke-funksjonelle krav må som regel testes. Det tar tid å sette opp testene og rette opp eventuelle mangler. Ikke-funksjonelle krav skal på produktkøen. Brukerdokumentasjon må skrives og kvalitetsikres. Det tar tid å skrive god brukerdokumentasjon. Brukerdokumentasjon skal på produktkøen.</li>
<li><strong>Bli helt ferdig med funksjonalitet</strong>: Teamet får kun &#8220;poeng&#8221; for helt dønn ferdig utført arbeid. Etter en iterasjon bør alt som tilhører en oppgave være så ferdig at det er greit dersom man aldri mer bruker tid på koden. Koden, tester og dokumentasjon må være i en akseptabel tilstand. Det betyr ikke at koden er frosset. Dersom man for eksempel utfører en oppgave for å verifisere responstid, må teamet oppdatere eksisterende kode slik at den støtter tidsmålinger og at man korrigerer eventuelle ytelsesproblemer man oppdager. Dette arbeidet tilhører det å implementere responstidskravet &#8211; den originale funksjonen er ferdig.</li>
<li><strong>Ta med brukere på demo</strong>: Dersom du lager et system som interesserer dine (fremtidige) brukere, bør teamet ha noe spennende å vise dem på demo etter hver iterasjon. Bruk demo-møtet til å involvere brukerne. Sørg for at input fra brukerne blir tatt hensyn til, og at de får beskjed om innspill som har blitt implementert, slik at de fortsetter å interessere seg.</li>
</ul>
<p>Gjort riktig kan et smidig prosjekt levere ferdig funksjonalitet for hver iterasjon. Men det krever fortløpende kommunikasjon, kvalitet og fokus på forretningsverdi. Dét er hvordan du lykkes med smidige prosjekter.</p>
<p><em>Jeg planlegger å publisere en Steria 3-minuttersguide basert på denne artikkelen. Innspill til forbedringer mottas med stor takk!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/10/29/slik-lykkes-du-med-smidig-utvikling/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Size matters</title>
		<link>http://sterkblanding.no/blog/2010/10/18/size-matters/</link>
		<comments>http://sterkblanding.no/blog/2010/10/18/size-matters/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 07:23:01 +0000</pubDate>
		<dc:creator>christingorman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[arkitektur]]></category>
		<category><![CDATA[Smidig]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=936</guid>
		<description><![CDATA[Hvordan skal jeg løse dette problemet på mest mulig effektiv måte? Det er når man kan stille seg dette spørsmålet at det er gøy å være programmerer. Men altfor ofte blir spørsmålet heller: Hvordan i helvetet får jeg løst dette problemet innenfor arkitektur-rammene som har blitt bestemt? Her er det mindre morro å være programmerer. Man har haugevis av potensielt gode løsninger, men får ikke lov til å implementere dem pga arkitekturbestemmelser.

Hvordan havner man i slike situasjoner? Kan de unngås?]]></description>
			<content:encoded><![CDATA[<p>Hvordan skal jeg løse dette problemet på mest mulig effektiv måte? Det er når man kan stille seg dette spørsmålet at det er gøy å være programmerer. Men altfor ofte blir spørsmålet heller: Hvordan i helvetet får jeg løst dette problemet innenfor arkitektur-rammene som har blitt bestemt? Her er det mindre morro å være programmerer. Man har haugevis av potensielt gode løsninger, men får ikke lov til å implementere dem pga arkitekturbestemmelser.</p>
<p>Hvordan havner man i slike situasjoner? Kan de unngås?<span id="more-936"></span></p>
<p><strong>Er det arkitekten sin skyld?</strong></p>
<p>Det er lett å skylde på arkitekten og kalle ham (eller henne) for en idiot og et stabeist, men er dette rettferdig? Både ja og nei. Stabeist er kanskje korrekt, men idiot er vedkomne neppe. Intelligens er evnen til å finne gode generiske modeller som kan brukes til å finne løsninger i en kaotisk hverdag. Idioter pugger tallene i boka og ser ikke sammenhenger. Intelligente mennesker lærer seg reglene for å regne seg frem til alle mulige tall – ikke bare de i boka. En god og intelligent arkitekt er en som kan finne enkle overordnede strategier som gjør applikasjonen som helhet ryddig og pen. Fra et kaos av brukerhistorier og kundekrav skal han eller hun finne enkle og elegante strategier som kan brukes til å løse alt. Hvis alle programmerere kunne gjøre akkurat som de ville for hver brukerhistorie, hadde koden endt opp i kaos. Alle hadde funnet opp sine egne hjul, og noen av dem hadde nok vært ganske kantete og skjeve. I vedlikeholdbarhetens navn om ikke annet er det klart at arkitekten ønsker seg felles løsninger og forutsigbare implementasjoner. Men finnes det alltid én løsning som passer overalt? «Gjør alt så enkelt som mulig, men ikke enklere» sa Einstein. IQ-tester måler evnen til å finne enklere løsninger, men de måler ikke nødvendigvis evnen til å se når nok er nok.</p>
<p><strong>Maks antall personer = 150</strong></p>
<p>Når utviklernes hoved-utfordring er å få løsningen til å passe inn i arkitekturen er det klart at noe har gått galt. Min teori er at disse situasjonene er et tegn på at prosjektet har blitt for stort. Akkurat som at store firmaer gjerne er mye tregere enn mindre firmaer, blir store prosjekter tregere enn små. Tregere både når det gjelder utførelse av eksisterende oppgaver, og enda mer når det gjelder innføring av nye prosesser. Antropologen Robin Dunbar har oppdaget at 150 mennesker det meste folk klarer å holde styr på. Det militære og flere firmaer har tatt dette med i betraktning og passer på at organisasjons-enheter aldri inneholder mer enn 150 mennesker. Selv om man ikke kjenner alle, så vet man hvem de er og hvor de jobber. Hvis man trenger noe gjort, kan man bare gå bort til den man vet man bør snakke med, og få det gjort der og da. Når organisasjonen vokser over 150 mennesker vet man ikke lenger hvem det er man må kontakte for å løse problemene sine. Man må da henvende seg til sjefen sin, eller en helpdesk på andre siden av kloden eller noe slikt, og håpe på at de igjen klarer å finne frem til den som kan hjelpe. Jo større og bedre organisert bedriften er, jo mindre effektiv blir kommunikasjonen. Når IT-support sitter i Jakarta, lønningskontoret er i Stavanger og markedsføringen foregår i Dubai, så blir det dårligere kommunikasjon enn om alle var i samme bygg. Mange mener at slik må det bare være når firmaet vokser, for man kan da ikke ha lønnskontor, IT-support og markedsføring i hvert eneste kontor når man har hundrevis av kontorer verden over. Jeg er ikke enig. I smidige prosjekter utvikler man ikke database-koden, business-logikken og GUI-koden hver for seg. Man utvikler brukerhistorier hver for seg. GUI, business-logikk og database-greier samtidig. Jeg tror noen store firmaer kunne lære mye her. Istedenfor å samle alle IT-avdelinger under ett tak, tror jeg det lønner seg å heller samle alle som har med samme produkt under ett tak. Design, produksjon, markedsføring, IT-support og alt som hører med til et produkt. Hver business-enhet bør være istand til å tjene penger. Slik organisering koster kanskje mer, men den vil også produsere og tjene mer.</p>
<p><strong>Maks antall klasser i et prosjekt = ?</strong></p>
<p>Mye av det samme skjer i store software-prosjekter. Når prosjektet vokser og vokser ender man fort med å gruppere koden etter «software tier» og ikke etter bruksområde. Man lager regler som at «slik snakker vi med databasen» og «slik skriver vi rapporter». Og reglene gjelder for alle uansett. Jeg tror man med fordel heller burde dele prosjektet inn i separate produkter. Produktene vil bestå av en samling av brukerhistoriene som passer sammen på et vis. Disse produktene trenger ikke ha samme regler for bruk av database eller noe som helst. Arkitekten og utviklerne står fritt til å finne løsninger som passer best for akkurat dette produktet. Jeg tror ikke denne typen tankegang kommer naturlig for folk med høy IQ. IQ driver folk til å se mønster og finne fellestrekk og dermed gruppere alt som likner. Her var det oppkobling mot database, der var det oppkobling mot database – da slår vi dem sammen! Her var det et lønnskontor, der var det et lønnskontor – da slår vi dem sammen! Det føles godt og opp til et visst nivå er det selvsagt det rette å gjøre. Men et sted går grensen. Hvor da? Når bør man begynne å tenke på splitting? I business-verden er 150 et tall å huske på. Har vi tilsvarende tall for software-utvikling? Hvor mange klasser kan et prosjekt ha? Er det antall klasser vi burde telle? Siden det er så fristende å finne fellestrekk og lage felles løsninger, tror jeg det hadde vært greit å ha noen konkrete tall og grenser å forholde seg til. Når man disse grensene kan man begynne å tenke seg om: Har prosjektet blitt for stort? Kan jeg dele det inn i mindre enheter? Kanskje svarene er nei, men det er viktig å stille seg spørsmålene like vel.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/10/18/size-matters/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Planlegging eller kommunikasjon?</title>
		<link>http://sterkblanding.no/blog/2010/09/14/planlegging-eller-kommunikasjon/</link>
		<comments>http://sterkblanding.no/blog/2010/09/14/planlegging-eller-kommunikasjon/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 06:29:52 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Smidig]]></category>
		<category><![CDATA[kommunikasjon]]></category>
		<category><![CDATA[planleggging]]></category>
		<category><![CDATA[produkteier]]></category>
		<category><![CDATA[Samhandling]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=852</guid>
		<description><![CDATA[&#8220;Skjer &#8216;a?&#8221; Det er nesten vanskelig å tenke tilbake på tiden før mobiltelefon. Tiden da man måtte planlegge &#8220;vi møtes ved kinoen klokken 20:00, og dersom noe går galt, så møtes vi i stedet ved billettluka 21:00&#8243;. Tiden da man måtte legge igjen en beskjed, eller låne en telefon for å ringe hjem for, ja [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Skjer &#8216;a?&#8221; Det er nesten vanskelig å tenke tilbake på tiden før mobiltelefon. Tiden da man måtte planlegge &#8220;vi møtes ved kinoen klokken 20:00, og dersom noe går galt, så møtes vi i stedet ved billettluka 21:00&#8243;. Tiden da man måtte legge igjen en beskjed, eller låne en telefon for å ringe hjem for, ja nettopp, høre om noen hadde lagt igjen beskjed. Normalen i dag er at man har en omtrentlig plan &#8220;og så ringes vi når jeg er på vei til byen.&#8221; Fordelen er at man kan tilpasse seg. &#8220;Jeg har hørt at Ole feirer 35 år. Skal vi stikke innom i stedet for å gå på bar?&#8221;</p>
<p>Dette er et eksempel på hvordan kommunikasjon erstatter planlegging. Slik kan det også være i prosjekter. Man må være enige om hva målet med prosjektet er, men dersom man kommuniserer underveis, kan de nøyaktige midlene bli til underveis.</p>
<p><span id="more-852"></span></p>
<h3>Nesten daglig sitt-ned-møte</h3>
<p>Mange bruker &#8220;daglige stå-opp møter&#8221; i Scrum. Teamet står rundt tavla og koordinerer utførte, pågående og kommende oppgaver. På mitt forrige prosjekt ble vi inspirert av en blogpost til å utvide stå-opp møtet med et &#8220;nesten daglig sitt-ned møte&#8221; når det var hensiktsmessig.</p>
<p>På stå-opp møtet gikk vi gjennom hvilke oppgaver utviklerne hadde gjort ferdig, og hvilke oppgaver produkteier hadde sett gjennom. Etter stå-opp møtet satt produkteieren og utviklerne seg sammen og gikk inn i detaljene:</p>
<ul>
<li>Produkteier hadde med seg en liste med forbedringer fra tidligere funksjoner. De forbedringene som tok under 2 minutter å utføre gjorde utvikleren der og da. Oppgaver som ville ta litt lengre tid noterte utvikleren seg. Oppgaver som var for omfattende ble tatt inn i fremtidige planer.</li>
<li>Utvikleren viste produkteieren de tingene som var &#8220;ferdige&#8221; i går. Produkteieren kom med direkte feedback der og da, og noterte seg hva han skulle seg gjennom på egen hånd.</li>
<li>Produkteieren gikk gjennom detaljene for funksjonalitet som utvikleren skulle starte på og besvarte spørsmål</li>
</ul>
<h3>&#8220;Jeg vet det når jeg ser det&#8221;</h3>
<p>&#8220;Measure twice, cut once&#8221; er det noen som sier. Men på utviklingsprosjekter er det slettes ikke sikkert at det å beskrive noe ekstra grundig forbedrer sjansene for å lykkes. De eneste gangene jeg har opplevd at en kunde ikke kommer med tilbakemelding første gang hun ser produktet er når jeg har en kunde som egentlig ikke bryr seg. Eller når jeg hadde brukt alt for lang tid på å dekke alle eventualiteter, inkludert de som ikke var kostnadeffektive.</p>
<p>I et vellykket prosjekt vil prøving, visning og tilpasning være normalen. Jo tidligere prosjektet får tilbakemeldingene, desto bedre og billigere blir prosjektet. Og jo mer nøyaktige planer vi legger i prosjektet, desto vanskeligere blir det å tilpasse seg tilbakemeldingene.</p>
<p>Felles mål, daglig kontakt, daglig tilbakemelding og daglig tilpasning vinner over grundige planer.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/09/14/planlegging-eller-kommunikasjon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Husk å melde deg på Smidig 2010</title>
		<link>http://sterkblanding.no/blog/2010/09/13/husk-a-melde-deg-pa-smidig-2010/</link>
		<comments>http://sterkblanding.no/blog/2010/09/13/husk-a-melde-deg-pa-smidig-2010/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 19:58:57 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Smidig]]></category>
		<category><![CDATA[konferanse]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=858</guid>
		<description><![CDATA[Smidig 2010: Norges største smidige konferanse Har du fått med deg at Smidig 2010 arrangeres 16.-17. November på Radisson BLU, Holberg plass i Oslo? Konferansen har åpnet for foredrag. Early bird prisen på billetter varer KUN TIL TORSDAG, så det gjelder å bestemme seg fort! Opplev vårt unike format, med over 70 lyntaler og 100 [...]]]></description>
			<content:encoded><![CDATA[<h3>Smidig 2010: Norges største smidige konferanse</h3>
<p>Har du fått med deg at Smidig 2010 arrangeres 16.-17. November på Radisson BLU, Holberg plass i Oslo? Konferansen har åpnet for foredrag. Early bird prisen på billetter varer KUN TIL TORSDAG, så det gjelder å bestemme seg fort!</p>
<p>Opplev vårt unike format, med over 70 lyntaler og 100 diskusjonsgrupper! Smidigkonferansen er den årlige nasjonale hendelsen som samler mennesker fra alle typer roller i IT-bransjen; prosjektledere, produkteiere, utviklere, bedriftsledere og testere og flere.</p>
<ul>
<li><a href="http://smidig2010.no/users/new">Meld deg på som deltager eller foredragsholder</a></li>
<li><a href="http://events.linkedin.com/Smidig-2010/pub/388694">Meld deg på LinkedIn-gruppa vår</a></li>
<li><a href="http://groups.google.com/group/smidigkonferansen">Meld deg på mailingslista for de som er interessert i Smidig 2010</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/09/13/husk-a-melde-deg-pa-smidig-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hold stø kurs med autotesting!</title>
		<link>http://sterkblanding.no/blog/2010/05/31/hold-st%c3%b8-kurs-med-autotesting/</link>
		<comments>http://sterkblanding.no/blog/2010/05/31/hold-st%c3%b8-kurs-med-autotesting/#comments</comments>
		<pubDate>Mon, 31 May 2010 19:14:04 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=643</guid>
		<description><![CDATA[Unit-tester er nyttig for de fleste systemutviklere. Noen av oss kjører strikt, metodisk testdrevet utvikling. Andre bruker bare automatiserte tester nå og da som sikkerhetsnett for å unngå regress-feil. Hvor ofte fyrer du selv av testene dine? Kjører du testsuiten din en gang i ny og ne, eller strikt for hver metode du implementerer? Jeg [...]]]></description>
			<content:encoded><![CDATA[<p>Unit-tester er nyttig for de fleste systemutviklere.</p>
<p>Noen av oss kjører strikt, metodisk testdrevet utvikling. Andre bruker bare automatiserte tester nå og da som sikkerhetsnett for å unngå regress-feil. <strong>Hvor ofte fyrer du selv av testene dine?</strong> Kjører du testsuiten din en gang i ny og ne, eller strikt for hver metode du implementerer?</p>
<p>Jeg liker å kjøre testene mine <strong>ofte</strong> mens jeg arbeider. Det jeg liker enda bedre er å la utviklingsmiljøet mitt kjøre dem for meg, automatisk. Poenget med yrket vårt er jo nettopp å automatisere og effektivisere arbeidsprosesser &#8211; dette forsøker jeg å gjøre også med mine egne rutiner og verktøy. La oss se hvordan vi kan få til dette.</p>
<p><span id="more-643"></span></p>
<p>Mange av oss bruker allerede <a href="http://martinfowler.com/articles/continuousIntegration.html">Continuous Integration</a> for å oppdage feil i den felles kodebasen. Personlig autotesting er det neste, logiske steget: enhetstestene våre burde kjøre i bakgrunnen hver gang vi endrer noe, og gi oss umiddelbar tilbakemelding når vi knekker funksjonalitet. På denne måten oppdager vi våre egne feil før resten av teamet blir påvirket av dem.</p>
<p>Det finnes flere verktøy som gjør dette for deg:</p>
<ul>
<li><span style="font-family: arial, sans-serif"><a href="http://improvingworks.com/products/infinitest/">Infinitest</a> (Java)</span></li>
<li><span style="font-family: arial, sans-serif"><a href="http://www.zenspider.com/ZSS/Products/ZenTest/">Autotest / ZenTest</a> (Ruby)</span></li>
<li><span style="font-family: arial, sans-serif"><a href="http://github.com/lacostej/nosyd">Nosyd</a> (Python)</span></li>
</ul>
<p><strong>Det er imidlertid ikke vanskelig å lage et enkelt autotest-verktøy på egen hånd</strong>. Jeg synes at det er en god ide å bruke litt tid her og der på å forbedre sitt eget utviklingsmiljø. Vi har jo muligheten til å lage våre egne verktøy (<a href="http://no.wikipedia.org/wiki/Smed">smeden</a> er en av få håndverkere som kan si det samme). Som utvikler bør man iallfall klare å slipe sine egne kniver, for å si det sånn. Og dette er en god anledning!</p>
<p><a href="http://sterkblanding.no/files/2010/05/smedVerktoy.jpg"><img class="alignleft size-full wp-image-669" style="margin-top: 0px;margin-bottom: 0px;margin-left: 10px;margin-right: 10px" title="smedVerktoy" src="http://sterkblanding.no/files/2010/05/iStock_000012701407Small.jpg" alt="" width="211" height="296" /></a></p>
<p><strong>Et naivt script for autotesting implementerer du på en ettermiddag.</strong> Alt du trenger er et lite program som reagerer på endringer i prosjektfilene dine, og kjører testene etter behov.</p>
<p>Algoritmen er enkel: La scriptet kjøre regelmessig, f.eks hvert sekund. Kontroller &#8220;forrige endring&#8221;-klokkeslettet for alle filene i prosjektet. Dersom klokkeslettet på en eller flere filer har endret seg siden forrige kontroll, så kjør enhetstestene til prosjektet. Analyser output fra testkjøringen, og se hvorvidt noen tester feilet eller kode knakk helt (exceptions). <strong>Gi så klar tilbakemelding om testene er ok eller feilet.</strong></p>
<p>Tilbakemeldingen kan være litt grafikk og lyd på desktopen (for eksempel med <a href="http://growl.info/">Growl</a> eller <a href="http://www.fullphat.net/index.php">Snarl</a>), en <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=67492">lavalampe</a> på pulten, <a href="http://marketplace.eclipse.org/content/eclipse-xps">blinkende LED-lamper</a> på laptopen&#8230; vær kreativ<strong>!</strong> Bare sørg for er at du får en tydelig tilbakemelding på hvorvidt testene feiler eller ikke.</p>
<p><strong>Filmklippet under viser hvordan mitt eget autotest-miljø fungerer.</strong> Koden er i dette tilfellet skrevet i et språk som heter <a href="http://clojure.org">Clojure</a> og ser derfor kanskje litt pussig ut, men ikke heng deg opp i det: det som demonstreres er at jeg knekker og fikser tester, og får automatisk godt synlig feedback på dette underveis.</p>
<p style="text-align: center"><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=11633909&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="640" height="480" src="http://vimeo.com/moogaloop.swf?clip_id=11633909&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p>Ikke spesielt komplisert.</p>
<p><strong>&#8220;Dette ser jo genialt ut! Hvorfor bruker ikke alle autotest-verktøy allerede?&#8221;</strong></p>
<p>Vel, det finnes dessverre noen utfordringer.</p>
<p>Dersom autotesting skal fungere hensiktsmessig må testsuiten som kjøres kun bestå av raske enhetstester, ikke tunge integrasjonstester. Og enhetstestene må gå kjapt! En test-run må ta sekunder, ikke minutter, ellers mister du gevinsten ved den umiddelbare feedbacken.</p>
<p>Problemet med trege tester er betydelig. Det finnes workarounds: man kan analysere avhengigheter mellom tester og kode, kun kjøre de berørte testene, kjøre raske tester først, feilende tester først, nylig feilende tester først&#8230; Men mange av oss har dessverre erfart at det er vanskelig å få til et godt fungerende opplegg for dette i et vanlig moderat stort utviklingsprosjekt.</p>
<p>Så er ikke autotesting nyttig likevel, da? Jo! Autotesting fungerer <strong>knallbra</strong> i<strong> små prosjekter</strong> (som ikke har samlet på seg så mye kode ennå) og <strong>egenopplæring</strong> (når du lærer nye verktøy og språk og ønsker å ta små steg med kjapp feedback). Det kan kanskje også fungere i større prosjekter <strong>dersom</strong> du har muligheten til å segmentere koden og testene dine i mindre moduler på en hensiktsmessig måte.</p>
<p>I bunnen av denne artikkelen har jeg vedlagt et eksempel på hvordan et enkelt autotest-script kan se ut, implementert i <a href="http://ruby-lang.org/">Ruby</a>. Scriptet er skrevet for OS X-miljø, men koden bør være relativt lesbar og enkel å porte til ditt eget favorittspråk og utviklingsmiljø.</p>
<p><strong>Happy testing!</strong></p>
<p><em>Eksempel:</em></p>
<p><code> </code></p>
<p><code> </code></p>
<p><code></p>
<pre># Command line command which launches all unit tests
RUN_TESTS_CMD = "mvn clean test"

# Pick up any changes in files matching this filepath
FILES_TO_MONITOR = "**/*.java"

# Determine test outcome by scraping test output for #telltale signs of failure or exceptions</pre>
<pre>def test_failed?(test_output)
  return (test_output["FAIL in"] != nil) # Any 'FAIL in' strings in test result indicates failure
end

def exception_occurred?(test_output)
  return (test_output["EXCEPTION in"] != nil)
end

# Indicate test state by turning the background color of the test terminal
# a different color - yellow red og green. Currently uses Mac AppleScripts, but could be
# an audible signal, lava lamp, or anything else instead.

def indicate_tests_running
  `osascript bin/autotest/make-term-yellow`
  puts "\n\n\n----------------------------------"
  puts "TESTRUN STARTED #{Time.now}"
  puts "----------------------------------\n\n\n"
end  

def indicate_test_success(description)
  `osascript bin/autotest/make-term-green`
  puts description
end  

def indicate_test_errors(description)
  `osascript bin/autotest/make-term-red`
  puts description
end  

$monitored_files = {} # Stores the last changed time of each file    

def files_changed? # Check if any files have been touched/saved since last check
  file_changed = false;  

  Dir[FILES_TO_MONITOR].each do |filepath|
    if(!File.new(filepath).ctime.eql?($monitored_files[filepath]))
      file_changed = true;
      $monitored_files[filepath] = File.new(filepath).ctime
    end
  end  

  return file_changed
end  

def run_test
  indicate_tests_running
  result = `#{RUN_TESTS_CMD}`  #Run the tests, pipe resulting console output back
  display_results(result)
end    

def display_results(testOutput)
  if test_failed?(testOutput)
    indicate_test_errors("SOME TEST(S) FAILED\n"+testOutput)
  elsif exception_occurred?(testOutput)
    indicate_test_errors("EXCEPTIONS OCCURRED\n"+testOutput)
  else
    indicate_test_success("ALL TESTS SUCCEED\n"+testOutput)
  end
end  

def test_loop
  while true
    if files_changed?
      run_test
    end
    sleep(1) #seconds between each poll for file changes
  end
end  

test_loop # Start testing!</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/05/31/hold-st%c3%b8-kurs-med-autotesting/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Lean eller agile, hva passer best for deg?</title>
		<link>http://sterkblanding.no/blog/2010/05/24/lean-eller-agile/</link>
		<comments>http://sterkblanding.no/blog/2010/05/24/lean-eller-agile/#comments</comments>
		<pubDate>Mon, 24 May 2010 16:11:21 +0000</pubDate>
		<dc:creator>Rikard Eriksen</dc:creator>
				<category><![CDATA[Samhandling]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=575</guid>
		<description><![CDATA[Lean og Agile er to prosesser som ofte blir plassert i samme bås, som &#8220;smidige&#8221; måter å jobbe på. Men selv om de har mange likhetstrekk, er sannheten at de er to veldig forskjellige tilnærminger til veldig forskjellige problemstillinger, og har sine opphav i helt ulike kulturer. Lean kommer fra en asiatisk kultur, der det [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Lean_software_development">Lean</a> og <a href="http://en.wikipedia.org/wiki/Agile_software_development">Agile</a> er to prosesser som ofte blir plassert i samme bås, som &#8220;smidige&#8221; måter å jobbe på. Men selv om de har mange likhetstrekk, er sannheten at de er to veldig forskjellige tilnærminger til veldig forskjellige problemstillinger, og har sine opphav i helt ulike kulturer. <span id="more-575"></span></p>
<p>Lean kommer fra en asiatisk kultur, der det kollektive og prosessen i seg selv er det sentrale. Lean er laget for å strømlinjeforme en spesiell måte å løse en kjent oppgave på. Agile på sin side kommer fra USA, der individet fremheves over alt annet (<a href="http://agilemanifesto.org/">&#8220;Individuals and interactions over processes and tools&#8221;</a>). Agile er først og fremst en effektiv måte å jobbe på når vi ikke kjenner veldig godt til omfanget og innholdet i oppgaven, og er nødt til å finne veien samtidig som vi går den.</p>
<p>I et foredrag på <a href="http://www.scan-agile.org/">Scandinavian Agile Conference</a> 2009 presenterte <a href="http://en.wikipedia.org/wiki/Jim_Coplien">Jim Coplien</a> disse 9 punktene der Lean og Agile er motstykker:</p>
<table>
<tr>
<th>Lean</th>
<th>Agile</th>
</tr>
<tr>
<td>Invitasjonsbasert</td>
<td>Inkluderende</td>
</tr>
<tr>
<td>Tenke</td>
<td>Gjøre</td>
</tr>
<tr>
<td>Feed forward</td>
<td>Feedback</td>
</tr>
<tr>
<td>High throughput</td>
<td>Low latency</td>
</tr>
<tr>
<td>Monokromisk, planlagt</td>
<td>Polykromisk, reaktiv</td>
</tr>
<tr>
<td>Utvikle modeller av verden</td>
<td>Dele modeller av verden</td>
</tr>
<tr>
<td>Prosess</td>
<td>Mennesker</td>
</tr>
<tr>
<td>Håndtere kompliserte problemer</td>
<td>Håndtere komplekse problemer</td>
</tr>
<tr>
<td>Standardisere</td>
<td>Inspect and adapt</td>
</tr>
</table>
<p>En gjennomgang av disse punktene kan være tema for et senere innlegg. Det jeg vil presentere denne gangen, er to praktiske øvelser som illustrerer noen av forskjellene og styrkene ved Lean og Agile. Øvelsene tar ca 5 minutter hver.</p>
<h1>Øvelse 1: Agile</h1>
<p>Finn en gruppe på ca 10-15 personer, og la de stå i et åpent område som de kan bevege seg rundt i. Hver person skal tenke på to andre personer i gruppa. Når alle har valgt ut sine to personer (uten å avsløre til noen hvem de har valgt), så er oppgaven som følger: Hver og en person skal nå plassere seg slik i rommet at han eller hun har nøyaktig like stor avstand til de to personene vedkommende tenkte på.</p>
<p>Før de får begynne å løse oppgaven, så er dette et morsomt spørsmål å stille til eventuelle prosjektledere i rommet: Hvis man skulle benytte klassisk prosjektledelse til å lede gruppa i denne øvelsen, hvordan skulle man gå frem da? Hvilke planer og retningslinjer kunne man lage som ville hjelpe dem fram til et raskt og godt resultat? De fleste vil snart komme fram til den konklusjonen at det er en ganske vanskelig (kompleks) oppgave.</p>
<p>Om vi benytter Scrum som eksempel på en smidig måte å løse dette på, hva ville en god Scrum master eller coach da si? Bare gjør det! Vi lar gruppa være selvorganiserende, og lar hvert enkelt individ ta ansvar for å på en selvstendig måte løse sin del av oppgaven, men i tett samarbeid med de andre i gruppa. Resultatet vil bli at etter en kort tid med tilsynelatende kaotiske og uorganiserte bevegelser, vil alle ha funnet likevektspunktene sine som til sammen løser oppgaven. Et resultat som ville være svært mye mer krevende å oppnå med en sentralt styrt prosess.</p>
<h1>Øvelse 2: Lean</h1>
<p>Hva så med Lean, hvordan kan det illustreres ved hjelp av en øvelse? Her trenger vi litt færre personer, ca 10 er fint. Gi en tilfeldig person i gruppa en gjenstand han kan holde i handa (ei tom flaske er et godt alternativ), og presenter dem for følgende utfordring: Gjenstanden skal nå sendes fra person til person i alfabetisk rekkefølge basert på fornavn. Det skal skje så raskt som mulig, og de vil bli tatt tiden på!</p>
<p>Ved første forsøk vil gruppa bruke litt tid på dette. De må fortelle navnene sine for å finne riktig rekkefølge. De vil typisk bruke et halvt til to minutter på å bestemme rekkefølgen og sende gjenstanden rundt. Fortell dem resultatet, og spør så om de kan gjøre det igjen, raskere. Det vil de naturlig nok klare, etter som de nå bedre kjenner navnene til hverandre.</p>
<p>Etter å ha fortalt dem tiden for forsøk nummer to, la dem forsøke en gang til, og be dem tenke på måten de står plassert på. De vil oppdage at det å stå på rekke eller i en sirkel, i alfabetisk rekkefølge, vil gjøre det enklest mulig å sende gjenstanden fra person til person. Vi <a href="http://en.wikipedia.org/wiki/Lean_software_development#Eliminate_waste">eliminerer waste</a>!</p>
<p>Hvor raskt er det mulig å klare det? Om de står i en tett sirkel, og hver enkelt så vidt berører gjenstanden før nestemann gjør det, kan de klare øvelsen på under et sekund. Det vil være en ganske dramatisk forbedring fra det første forsøket! Det viser hvor effektiv Lean kan være på denne typen oppgaver.</p>
<h1>Oppsummering</h1>
<p>Lean og Agile er laget for å løse forskjellige typer oppgaver. De kommer fra forskjellig bakgrunn, og selv om de virker like, så skiller de seg vidt fra hverandre på noen sentrale områder. Øvelsene over demonstrerer noen av de spesielle styrkene til de to prosessene. Disse styrkene er det viktig å huske på når man skal velge tilnærming til et prosjekt eller andre arbeidsoppgaver som krever en god prosess.</p>
<p>Hvilke erfaringer har du som leser gjort deg med Lean og Agile? Har du opplevd oppgaver eller prosjekter der de har passet spesielt godt eller spesielt dårlig?</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/05/24/lean-eller-agile/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>En øvelse for å finne et felles mål for teamet ditt</title>
		<link>http://sterkblanding.no/blog/2010/05/11/en-%c3%b8velse-for-a-finne-et-felles-mal-for-teamet-ditt/</link>
		<comments>http://sterkblanding.no/blog/2010/05/11/en-%c3%b8velse-for-a-finne-et-felles-mal-for-teamet-ditt/#comments</comments>
		<pubDate>Tue, 11 May 2010 11:35:22 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[visjon]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=549</guid>
		<description><![CDATA[En gruppe som skal nå et mål sammen trenger å ha en felles forståelse av målet. Og de trenger å stole på at resten av gruppen også har samme mål. Derfor har mange prosjekter en visjon som man utarbeider i fellesskap. Men hva gjør du fram til du har tid til å lage en grundig [...]]]></description>
			<content:encoded><![CDATA[<p>En gruppe som skal nå et mål sammen trenger å ha en felles forståelse av målet. Og de trenger å stole på at resten av gruppen også har samme mål. Derfor har mange prosjekter en visjon som man utarbeider i fellesskap. Men hva gjør du fram til du har tid til å lage en grundig visjon?</p>
<p><span id="more-549"></span></p>
<p>I Crossing the Chasm foreslår Geoffrey Moore en mal for å lage visjon som jeg selv har hatt mye hell med:</p>
<ul>
<li>For &lt;<em>en målgruppe</em>&gt;</li>
<li>Som har &lt;<em>et behov eller en mulighet</em>&gt;</li>
<li>Så er &lt;<em>produktnavnet</em>&gt; et &lt;<em>type produkt</em>&gt;</li>
<li>Som &lt;<em>har en god grunn til å like</em>&gt;.</li>
<li>I motsetning til &lt;<em>viktigste alternativ</em>&gt;</li>
<li>Har vårt produkt &lt;<em>viktigste differensiator</em>&gt;</li>
</ul>
<p>Formen er ment brukt til å beskrive produkter, som for eksempel &#8220;<strong>For</strong> <em>skogbruksansvarlige på fylkesmannens kontor</em> <strong>som skal</strong> <em>forvalte skogsprosjekter</em> <strong>så er</strong> <em>skogsforvaltningsløsningen</em> <strong>et</strong> <em>regnskapsystem</em> <strong>som gir</strong> <em>kontroll og oversikt over regnskapet</em>. <strong>I motsetning til</strong> <em>den gamle versjonen av systemet</em> <strong>gir vår løsning</strong> <em>støtte for fullstendig elektronisk saksbehandling</em>.&#8221;</p>
<p>Jeg har også brukt den til workshops og andre aktiviteter. Når jeg avholdt en Scrum-workshop startet gruppen med å utarbeide følgende visjon: &#8220;<em><strong>For</strong>  nye og litt erfarne Scrum Mastere <strong>som ønsker</strong>  å bli bedre Scrum Mastere <strong>så er</strong>  Iterasjon-0-workshoppen <strong>en</strong>  gruppeaktivitet <strong>som gir</strong> konkrete tiltak til aktiviteter. <strong>I motsetning til</strong>  å lese en bok <strong>gir denne aktiviteten</strong> mulighet til å utveksle erfaring med andre som har samme rolle.</em>&#8221;</p>
<p>Slik går jeg fram for å hjelpe en gruppe med å komme fram til en visjon:</p>
<ol>
<li>Først bruker jeg fem minutter på å forklare formatet og hvorfor vi gjør oppgaven</li>
<li>Jeg deler gruppen opp i arbeidsgrupper på 3-4 personer. En arbeidsgruppe mister noe når det blir mer enn 4 personer
<li>Hver gruppe får ti minutter på å fylle ut formatet over. Dersom det er mye gode diskusjoner i gruppene lar jeg dem gå fem minutter over tida.</li>
<li>Jeg går gjennom malen og ber alle gruppene lese opp for forsamlingen hva de svarte på hvert punkt. For hvert punkt spør jeg åpent &#8220;hvilket svar var best?&#8221; Det nominerte beste svaret skriver jeg på tavle eller flipover. Dette tar cirka ti minutter.</li>
<li>Vi avslutter workshopen med en liten oppsummering av hva folk fikk ut av øvelsen.</li>
</ol>
<p>Totalt får man en brukbar, felles visjon for en gruppe på under en halv time. Som en bonus blir gruppa som helhet litt bedre kjent med hverandre.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/05/11/en-%c3%b8velse-for-a-finne-et-felles-mal-for-teamet-ditt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mot til å produksjonssette tidlig?</title>
		<link>http://sterkblanding.no/blog/2010/04/26/mot-til-a-produksjonssette-tidlig/</link>
		<comments>http://sterkblanding.no/blog/2010/04/26/mot-til-a-produksjonssette-tidlig/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 16:56:15 +0000</pubDate>
		<dc:creator>Jan Helge Maurtvedt</dc:creator>
				<category><![CDATA[Business Process Management]]></category>
		<category><![CDATA[ITIL]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[Strategi]]></category>
		<category><![CDATA[endringsledelse]]></category>
		<category><![CDATA[mål]]></category>
		<category><![CDATA[prosjektledelse]]></category>
		<category><![CDATA[utfordringer]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=490</guid>
		<description><![CDATA[Har ditt erstatningsprosjekt mot til å produksjonssette på 70 % av funksjonaliteten til det gamle systemet? Det er mange, kanskje spesielt bedriftsledere og avdelingsledere i styringsgrupper rundt om kring, som tror at IT-prosjektet er ferdig når man har produksjonssatt den nye løsningen. Det er en oppfatning som kan få katastrofale følger. Min erfaring er at [...]]]></description>
			<content:encoded><![CDATA[<p>Har ditt erstatningsprosjekt mot til å produksjonssette på 70 % av funksjonaliteten til det gamle systemet? Det er mange, kanskje spesielt bedriftsledere og avdelingsledere i styringsgrupper rundt om kring, som tror at IT-prosjektet er ferdig når man har produksjonssatt den nye løsningen. Det er en oppfatning som kan få katastrofale følger.<span id="more-490"></span></p>
<p>Min erfaring er at det er ved produksjonssetting de virkelige utfordringene begynner, og da din prosjektgruppe trenger fokus. Nettopp da må styringsgruppen og involverte beslutnignstagere forstå at prosjektet trenger arbeidsro og gode rutiner, ikke nedleggelse, nye rapporteringsforpliktelser, bli gjenstand for budsjettkutt eller lignende. Utsagnet <em>et system som ikke endres er et dødt system</em> er virkelig sant i denne perioden. Husk det når du budsjetterer prosjektet og når du setter dine forventninger.</p>
<p>Det er alltid forbundet med risiko å ta en beslutning om konvertering og produksjonssetting, ofte resulterer det, i at man ikke klarer å skru av det gamle systemet likevel, eller at svært mange interessenter blir misfornøyde og skaper mye støy for prosjektet – den gamle løsningen fungerte jo bedre. Man kan teste så mye man orker før produksjonssetting, men Murphy’s lov slår til og ting går galt. Brukeren kan det ikke – da fungerer det ikke. Noe av det testteamet trodde var i orden viser seg kanskje også å skape en nedtur i begynnelsen. Opplevelsen trenger altså ikke bare være basert på reell mangel på funksjonalitet, men opplevd funksjonalitet. Fenomenet kan illustreres med en blodbadkurve, der man opplever at det nye systemet fungerer vesentlig dårligere enn det gamle systemet i en periode etter produksjonssetting.</p>
<p><a href="http://sterkblanding.no/files/2010/04/blodbadet.gif"><img class="alignnone size-full wp-image-492" title="blodbadet" src="http://sterkblanding.no/files/2010/04/blodbadet.gif" alt="" width="540" height="235" /></a></p>
<p>Ved å gjøre de rette grepene kan imidlertid blodbad-perioden reduseres og gjøres minst mulig smertefull. Her er fire tips.</p>
<p><strong>1. Styr forventningene i forkant</strong> – Blodbad-perioden er ofte den samme tidsperioden der styringsgruppen forventer at gevinstene skal realiseres, gjerne nokså umiddelbart. Dette er en umulighet hvis man ser på kurven over. Prosjektet er travelt opptatt med å prioritere feil, lære seg å drifte det nye systemet, lære brukerne å bruke det nye systemet og løse de mest kritiske tingene som mangler i systemet, ofte ved hjelp av tidkrevende workarounds inntil gode nok løsninger er på plass.</p>
<p><strong>2. Gi prosjektet økonomisk handlingsrom</strong> – Det sikreste man kan gjøre for å sikre absolutt fiakso er å legge ned prosjektet i denne fasen. Likevel er ofte “pengene brukt opp”, man hadde jo ikke regnet med at man måtte jobbe når man hadde levert til produksjon og nedleggelse blir realiteten. Det å ikke ha penger til endringer og videreutvikling i denne perioden er den sikreste måten å redusere levetiden på det nye systemet dramatisk. Det kan også tenkes at de som har fått det nye systemet trenger litt tid på å lære det, så regn med noen vikarer.</p>
<p><strong>3. Vær flink til å prioritere og operer med åpne prioriteringslister</strong> – Styringsgruppen ønsker rask realisering av visjonen og at prosjektet skal makte å følge den stiplede grønne utviklingsbanen. Svaret er ja, det skal dere få, men først må prosjektet få hodet over vannet i form av å løse de mest kritiske feilene. Deretter kan man prioritere forbedringer og nyutvikling. Et sikkert tegn på at man har med en umoden styringsgruppe å gjøre er dersom de i denne perioden forventer at prosjektet skal prioritere nye forretningskrav som plutselig har kommet opp når de ser det nye systemet. Prosjektgruppen bør prioritere utestående områder slik at det som er mest kritisk (eller lønnsomt) kommer først.</p>
<p><strong>4. Avklar ansvar og organisasjonsmodell for vedlikehold tidlig</strong> – Etter produksjonssetting kan det være uklare ansvarsforhold knyttet til vedlikehold. Innse det med en gang – et system uten endring er et dødt system. Da må man vite hvordan endringene skal gjennomføres, testes og produksjonssettes også etter oppstart. Ofte “fryses” kanskje systemet for å unngå store endringer rett før oppstart, med den konsekvens at utviklerne som kunne løst feil raskt forsvinner over til andre oppgaver eller mister fokus. Realiteten er at det er i produksjonssettingsfasen at endringstakten, eller i hvert fall feilrettingstakten, bør være desidert størst. I hvert fall dersom man mener alvor med å snu blodbadet og realisere visjonen for prosjektet.</p>
<p>Legg merke til at jeg ikke foreslår å utsette produksjonssettingen. Dette er åpenbart eneste alternativ dersom man ser at selv de mest basale behov systemet er tenkt å løse ikke fungerer, men i så tilfelle har prosjektet et større problem og burde ha lært seg metoder som Scrum og EVO for lenge siden.</p>
<p>Legg også merke til at prosjektet endrer karakter den dagen man produksjonssetter. Det er ikke lenger et erstatningsprosjekt. Det er et smidig forbedringsprosjekt og må behandles som det!</p>
<p>Les mer på sterkbladning.no:</p>
<ul>
<li><a href="http://sterkblanding.no/blog/2010/02/25/galls-lov-og-erstatningsprosjekter/">Johannes om erstatningsprosjekter</a></li>
<li><a href="http://sterkblanding.no/blog/2010/04/07/er-scrum-og-itil-en-del-av-problemet/">Ole-Vidar om driftsrammeverk (ITIL) vs utviklingsrammeverk (Scrum)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/04/26/mot-til-a-produksjonssette-tidlig/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Er Scrum og ITIL en del av problemet?</title>
		<link>http://sterkblanding.no/blog/2010/04/07/er-scrum-og-itil-en-del-av-problemet/</link>
		<comments>http://sterkblanding.no/blog/2010/04/07/er-scrum-og-itil-en-del-av-problemet/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 15:23:50 +0000</pubDate>
		<dc:creator>Ole-Vidar Christensen</dc:creator>
				<category><![CDATA[ITIL]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=350</guid>
		<description><![CDATA[Noen ganger lurer jeg på om det har oppstått en form for religionskrig mellom miljøene innen for IT-Drift og de som arbeider med utvikling. Det utvikles industristandarder og ”good practice frameworks” på mange områder. Men ingen av rammeverkene har lykkes med å kommunisere godt med de som er utenfor sin primærmålgruppe. Det er et gap [...]]]></description>
			<content:encoded><![CDATA[<p>Noen ganger lurer jeg på om det har oppstått en form for religionskrig mellom miljøene innen for IT-Drift og de som arbeider med utvikling. Det utvikles industristandarder og ”good practice frameworks” på mange områder. Men ingen av rammeverkene har lykkes med å kommunisere godt med de som er utenfor sin primærmålgruppe. Det er et gap mellom utvikling og drift.<span id="more-350"></span></p>
<p>Dette tema var belyst på årets itSMF-konferanse som ble avholdt på Gardermoen 3-4 mars. ”Dei leikar ikkje saman – enno!” het presentasjonen til Bjørnar Tessem fra Universitetet i Bergen. Denne presentasjonen setter fokus på at det er samhandlingen mellom utvikling og drift som er mangelfull. Man er usikker på å la andre ”komme inn på sitt domene”, både fra utvikler- og driftsmiljøene. Hva skyldes denne usikkerheten? Er det frykt for å miste makt og innflytelse? Eller får man skylapper av sine egne ”good practice frameworks” enten de heter ITIL, CoBIT, Scrum, smidig eller noe annet? Dersom man får en for streng tolking av sitt eget rammeverk, så mister man den pragmatiske tilnærmingen.</p>
<p>Det er ingen tvil om at slike rammeverk bidrar til forbedring innen for sine respektive områder, men de kan også bidra til å stenge ute andre fornuftige innspill. Resultatet kan bli en religionskrig, der kundene og brukerne er de som må lide for den mangelfulle samhandlingen.</p>
<p>Utvikling og drift må i større grad ha følelsen av et felles ansvar for at tjenestene de utvikler og drifter vil tjene det formål de er tiltenkt på en måte som er effektivt for både brukerne og leverandørene.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/04/07/er-scrum-og-itil-en-del-av-problemet/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Kom igang med JavaScript!</title>
		<link>http://sterkblanding.no/blog/2010/03/24/kom-igang-med-javascript/</link>
		<comments>http://sterkblanding.no/blog/2010/03/24/kom-igang-med-javascript/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 06:25:32 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=185</guid>
		<description><![CDATA[Stadig mer programvare utvikles som rike webapplikasjoner, og brukere og kunder stiller stadig høyere krav til disse løsningene. JavaScript er derfor i ferd med å bli et av de viktigste verktøyene våre for moderne applikasjonsutvikling.

Språket blir dessverre behandlet som den stygge andungen av mange utviklere fordi det tradisjonelt oppleves som knotete, skjørt og lite vedlikeholdbart. Slik trenger det ikke være!

Vi i Steria har utviklet et gratis, nedlastbart kurs som oppdaterer deg på dette området. Denne workshopen introduserer ferdighetene, teknikkene og verktøyene som gjør JavaScript-utvikling langt mer overkommelig enn tidligere. Alt materiale i kurset er fritt tilgjengelig til din egen bruk.]]></description>
			<content:encoded><![CDATA[<p>Stadig mer programvare utvikles som rike webapplikasjoner, og brukere og kunder stiller stadig høyere krav til disse løsningene. JavaScript er derfor i ferd med å bli et av de <strong>viktigste verktøyene</strong> våre for moderne applikasjonsutvikling.</p>
<p>Språket blir dessverre behandlet som den stygge andungen av mange utviklere fordi det tradisjonelt oppleves som knotete, skjørt og lite vedlikeholdbart. Slik trenger det ikke være!</p>
<p>Vi i Steria har utviklet et <strong>gratis, nedlastbart</strong> kurs som oppdaterer deg på dette området. Denne workshopen introduserer ferdighetene, teknikkene og verktøyene som gjør JavaScript-utvikling langt mer overkommelig enn tidligere. Alt materiale i kurset er fritt tilgjengelig til din egen bruk.<span id="more-185"></span></p>
<p>Du kan bruke foilene, forelesningsnotatene og øvelsene som <strong>personlig studiemateriell</strong>. Du kan også holde kurset som en formell <strong>workshop</strong> sammen med kollegaer eller kunder. Workshopen tar omtrent en halv dag (3-4 timer) når det gjøres skikkelig &#8211; beregn halvannen time forelesning, minst halvannen time praktiske øvelser.</p>
<p style="text-align: center"><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slides-100310162930-phpapp02&rel=0&stripped_title=javascript-neednt-hurt-3390657" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slides-100310162930-phpapp02&rel=0&stripped_title=javascript-neednt-hurt-3390657" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<h2 style="text-align: center"><a title="Download link" href="http://kjeldahlnilsson.net/jsnh.zip"><strong><span style="color: #ff6600"><span style="text-decoration: none"><span style="color: #0000ff">LAST NED HER</span></span></span></strong></a></h2>
<p style="text-align: center"><em>(Inneholder slides, forelesningsnotater, øvelser, løsninger, eksempler, verktøy. Utgitt under en Creative Commons Attribution 3.0 lisens. Du kan bruke, endre og dele det fritt, så lenge du krediterer opphavsmannen.)</em></p>
<p>Hvis du ikke har kapasitet til å kjøre kurset selv kan du ta kontakt med <a title="Steria Norge link" href="http://steria.no">Steria</a>; vi kan holde kurset i dine lokaler, i og rundt Oslo.</p>
<p>La oss avslutte med en smakebit. Filmklippet under illustrerer et av temaene som workshopen tar for seg, nemlig <a title="Wikipedia TDD link" href="http://en.wikipedia.org/wiki/Test-driven_development">testdrevet utvikling</a> i JavaScript. Enjoy!</p>
<p style="text-align: center"><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=9453172&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="640" height="424" src="http://vimeo.com/moogaloop.swf?clip_id=9453172&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/03/24/kom-igang-med-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Galls lov og erstatningsprosjekter</title>
		<link>http://sterkblanding.no/blog/2010/02/25/galls-lov-og-erstatningsprosjekter/</link>
		<comments>http://sterkblanding.no/blog/2010/02/25/galls-lov-og-erstatningsprosjekter/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 19:37:45 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Smidig]]></category>
		<category><![CDATA[Strategi]]></category>
		<category><![CDATA[arkitektur]]></category>
		<category><![CDATA[Galls lov]]></category>
		<category><![CDATA[prosjektledelse]]></category>
		<category><![CDATA[Systemantics]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=173</guid>
		<description><![CDATA[&#8220;If A System Is Working, Leave It Alone. Don&#8217;t Change Anything!&#8221;- John Gall, Systemantics (1975) Planen Det gamle systemet hadde blitt uholdbart. Leverandøren ga ikke lenger support på maskinvare eller programvare, det var umulig å oppdrive kompetanse for å videreutvikle og det var ikke lenger vedlikeholdbart siden det var så kompleks. Vi skulle derfor erstatte [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em>&#8220;If A System Is Working, Leave It Alone. Don&#8217;t Change Anything!&#8221;</em><br />- John Gall, Systemantics (1975) </em></p></blockquote>
<h2>Planen</h2>
<p><em>Det gamle systemet hadde blitt uholdbart. Leverandøren ga ikke lenger <strong>support</strong> på maskinvare eller programvare, det var umulig å oppdrive <strong>kompetanse</strong> for å videreutvikle og det var ikke lenger <strong>vedlikeholdbart</strong> siden det var så kompleks.</em></p>
<p><em>Vi skulle derfor erstatte systemet med et nytt et. Bygget fra bunnen med moderne teknologi. Det burde bli enkelt, siden dagens system kan fungere som kravspesifikasjon. Vi hadde estimert arbeidet til 83 511 timeverk.</em></p>
<p><em>Vi ville naturligvis ikke investere store mengder arbeid i det gamle, døende systemet. Og dessuten var det umulig å integrere med. Så vi måtte bygge det nye systemet med all funksjonalitet, og så, en spennende helg om noen år, sette det i produksjon.</em></p>
<p>Slik høres introduksjonen til mange erstatningsprosjekter ut. I disse prosjektene har man et eksisterende system som typisk er kritisk for virksomheten. Av gode eller dårlige grunner har man valgt å gjennomføre et prosjekt som skal erstatte hele den gamle systemet med et nytt system som oppfyller samme målsetning.</p>
<p><span id="more-173"></span></p>
<p>Denne planen burde med en gang ringe noen varselbjeller. Hva er egentlig poenget med dette prosjektet? Prosjektet ønsker å videreføre dagens <strong>tjeneste</strong> med et nytt og moderne <strong>system</strong>. Og det er billigere måter å gjøre det på.</p>
<h3>Uortodoks observasjon #1:</h3>
<blockquote><p>Et erstatningsprosjekt er en dyr måte å forlenge livet til vår nåværende forretningsmodell.</p></blockquote>
<p>Det virker umulig å komme seg forbi hindrene i form av <strong>support</strong>, <strong>kompetanse</strong> og <strong>vedlikeholdbarhet</strong>. Men dersom vi doblet lønna til alle som ville programmere COBOL, så ville vi nok få nok kompetanse. Det er mulig å videreføre systemet. Det er bare veldig dyrt. Men det er også fantastisk dyrt å erstatte et system fra bunnen. Man kan bruke mange dyre teknikker for å holde systemet i gang før der lønner seg å erstatte.</p>
<p>På de fleste systemer er imidlertid <strong>support</strong>, <strong>kompetanse</strong> og <strong>vedlikeholdbarhet</strong> ikke de eneste, og kanskje ikke de egentlige motivene. Det finnes andre motiver, både dårlige (noen vil ha et stort prosjekt på CV eller jobbe med ny teknologi) og gode (vi ser muligheten til å levere verdi).</p>
<p>Først når erstatningsprosjektet tilfører forretningsverdi er det verdt å gjennomføre. Erstatningsprosjekter for å redusere kostnader eller forlenge levetiden på en utdatert forretningsmodell er en dårlig ide.</p>
<h2>Virkeligheten</h2>
<blockquote><p>&#8220;A Complex System Designed From Scratch Never Works And Cannot Be Made To Work. You Have To Start Over, Beginning With A Working Simple System&#8221;<br />- John Gall, Systemantics</p></blockquote>
<p><em>Den forrige arkitekten hadde holdt på med systemet i tre år. Og organisasjonen hadde ingenting å vise til. Det var ikke blitt ferdig, og han hadde insistert på at det var umulig å levere deler av systemet.</em></p>
<p><em>Styret er lei av denne unnskyldningen, og om administrerende direktør ikke finner en arkitekt som kan bevise at investeringene har verdi, er det han som må gå.</em></p>
<p>Et forsinket prosjekt mister politisk goodwill. Det er bare en måte for et prosjekt som har mistet troverdighet å redde seg på: Man må levere noe. Og da må man spise noen kameler.</p>
<h3>Uortodoks observasjon #2:</h3>
<blockquote><p>Det nye og det gamle systemet kommer til å leve sammen.</p></blockquote>
<p>Heldigvis er dette gode nyheter. Med en gang vi vet at det nye og det gamle systemet må leve sammen, åpner det døren for en rekke muligheter til å tenke bedre.</p>
<h2>Gradvis erstatning</h2>
<p>Først, her er fire patterns for å gradvis erstatte et system:</p>
<ul>
<li><strong>Delt database:</strong> Dersom det gamle systemer benytter en relasjonsdatabase kan det nye systemet bruke denne direkte. Det gjør det mulig å levere deler av det nye systemet nesten umiddelbart, men det legger føringer for designer av det nye systemet som man kanskje kunne unngått.</li>
<li><strong>Import/eksport:</strong> Før eller siden må vi forholde oss til de dataene som finnes i det gamle systemet. Ta kostnaden tidlig og eksporter data til det nye systemet. Men vær forsiktig: Det er vanskelig å ha to mastere for data. Start med å la det gamle systemet være master.</li>
<li><strong>Datatjenestelag:</strong> Dersom du ønsker å erstatte det gamle systemets datalager, kan du innkapsle dette i en tjeneste. Legg imidlertid merke til at datatjenester har høyt endringsbehov og tjenester som deles i et stort prosjekt er kostbare å endre.</li>
<li><strong>Parallell produksjon:</strong> Dersom det nye systemet utvikler funksjonalitet som finnes i det gamle, se om det er mulig at begge versjonene kan være i produksjon samtidig. Da reduseres konsekvensen dersom den nye versjonen inneholder feil, siden å rulle tilbake en produksjonsetting er enklere. Dette gjør at det kan være mulig å produksjonsette med mindre testing. Det nye systemet kan også starte med et subset av brukerne. Dermed kan man utsette noe av ytelsesoptimaliseringen til man har bedre erfaring fra faktisk bruk.</li>
</ul>
<p>Men det krever mer enn teknikker for å sette sammen systemene for å lykkes. Man må makte å finne oppgaver som man kan jobbe på og realisere verdi for organisasjonen i løpet av erstatningsprosjektet. Her er fire patterns for å finne områder å erstatte:</p>
<ul>
<li><strong>Risiko:</strong> Enkelte endringer er så viktige at uten dem, vil prosjektet regnes som mislykkes. For prosjekter relatert til pensjonsreformen vil det være katastrofalt om man ikke kan implementere det nye regelverket. Andre systemer har lenge hatt kjente svakheter som man har forpliktet seg til å utbedre. Fiks dette først!</li>
<li><strong>Kostnad:</strong> Organisasjoner som benytter systemer har ofte noe arbeidsoppgaver som er ekstra arbeidskrevende. Kanskje det er å punsje data, eller å overføre data fra et system til et annet. Eller kanskje det er kundene som ringer og spør om hvordan saken deres ligger an. Ved å velge et slikt område kan prosjektet levere gevinst tidlig.</li>
<li><strong>Isolerte brukere:</strong> Mange systemer har brukergrupper som bare benytter en liten del av systemet. Det kan være lurt å starte med en slik brukergruppe, ettersom man kan erstatte hele den delen av systemet de benytter på noen få leveranser.</li>
<li><strong>Nye brukere:</strong> Mange organisasjoner ønsker å lage selvbetjeningsløsninger for publikum. Disse er også gode og vanlige steder å starte et fornyingsprogram.</li>
</ul>
<h2>Arkitektur</h2>
<blockquote><p>&#8220;&#8230;organizations which design systems &#8230; are constrained to produce designs which are copies of the communication structures of these organizations.&#8221;- Conway&#8217;s Law</p></blockquote>
<p>En arkitekt på et stort prosjekt som lar prosjektlederen bestemme hvilke arbeidspakker hvert team skal jobbe med har begrenset mulighet til å påvirke prosjektets suksess.</p>
<p>Som arkitekt er det ofte fristende å jobbe med en målarkitektur. Men for et stort prosjekt blir målarkitekturens største føringer organisasjonen som skal utvikle systemet. Å oppfylle prosjektets behov for at folk kan jobbe uten å konstant ramle i beina på hverandre må prioriteres over andre arkitekturmål.</p>
<p>Jo flere kokker, desto mer søl. Det er din jobb å sørge for at ikke alle må være på samme kjøkken. Eller enda verre: Løpe mellom alle kjøkkenene.</p>
<h3>Uortodoks observasjon #3:</h3>
<blockquote><p>I store prosjekter er organiseringen den viktigste faktoren i arkitekturvalg.</p></blockquote>
<p>Min erfaring er at det finnes noe fundamentale grenser for hvor mange personer som kan samarbeide:</p>
<ul>
<li>4-6 personer kan jobbe med en person som dekker arkitektur, analytiker og teamleder-rollene. Dersom gruppen blir større enn dette, må man typisk ha tre personer for å dekke disse rollene.</li>
<li>10-12 personer kan jobbe på den samme koden og med den samme produktkøen uten å komme i beina på hverandre. I alle fall så lenge de kommuniserer daglig</li>
<li>30-35 personer kan jobbe med en kodebase som er kontinuerlig integrert. Dersom det er flere, vil tiden man bruker på å rette integrasjonsfeil bli en betydelig kostnad.</li>
</ul>
<p>Og når prosjektet blir for stort for kontinuerlig integrasjon, må gjenbrukt kode versjonshåndteres. Dette betyr at det vil være dyrt å gjøre endringer. Kode som ikke kan endres blir ofte dårlig kode. Så gjenbruk ut over 30-35 personer er overraskende dyrt.</p>
<p>Til slutt bør team ha som målsetning å produksjonsette hver tredje måned. Dette er veldig vanskelig å gjøre dersom en leveranse inneholder mange deler som ikke er kontinuerlig integrert. Deler som ikke er kontinuerlig integrert bør fortrinnsvis produksjonssettes helt separat fra hverandre.</p>
<h2>Konklusjon</h2>
<p>Et prosjekt som skal erstatte dagens system uten å endre forretningsprosessene har feil fokus. Modernisering er bra, men ha fokus på verdien til andre enn de som vedlikeholder systemet.</p>
<p>Vi har en rekke antagelser om hvordan erstatningsprosjekter vil fungere. Etter min erfaring er mange av disse antagelsene feil. Du kan godt ha annen erfaring, men her er min:</p>
<ul>
<li>Et erstatningsprosjekt er en dyr måte å forlenge livet til en eksisterende forretningsmodell</li>
<li>Det nye og det gamle systemet vil leve sammen</li>
<li>I store prosjekter er organiseringen den viktigste faktoren i arkitekturvalg</li>
</ul>
<p>Vi får til erstatningsprosjekter ved å levere gradvis.</p>
<blockquote><p>&#8220;Galls Law: A Complex System That Works Is Invariably Found To Have Evolved From A Simple System That Worked.&#8221;<br />- John Gall, Systemantics, 1975</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/02/25/galls-lov-og-erstatningsprosjekter/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ny definisjon av Scrum?</title>
		<link>http://sterkblanding.no/blog/2010/01/21/ny-definisjon-av-scrum/</link>
		<comments>http://sterkblanding.no/blog/2010/01/21/ny-definisjon-av-scrum/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 10:18:19 +0000</pubDate>
		<dc:creator>Trond Wingård</dc:creator>
				<category><![CDATA[Smidig]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=62</guid>
		<description><![CDATA[Nyttårsaften postet Ken Schwaber en melding på Yahoo! Scrum Development group som han kalte Confusion about Scrum. Der tar han opp at det eksisterer to definisjoner av Scrum: En som vedlikeholdes av Jeff Sutherland og ham selv på www.scrum.org, og en &#8220;gammel kopi&#8221; som ligger hos Scrum Alliance (men den ligger ikke der lenger nå). [...]]]></description>
			<content:encoded><![CDATA[<p>Nyttårsaften postet Ken Schwaber en melding på Yahoo! Scrum Development group som han kalte <a href="http://groups.yahoo.com/group/scrumdevelopment/message/43850">Confusion about Scrum</a>. Der tar han opp at det eksisterer to definisjoner av Scrum: En som vedlikeholdes av Jeff Sutherland og ham selv på <a href="http://www.scrum.org">www.scrum.org</a>, og en &#8220;gammel kopi&#8221; som ligger hos <a href="http://www.scrumalliance.org">Scrum Alliance</a> (men den ligger ikke der lenger nå).</p>
<p><span id="more-62"></span></p>
<p>Ken argumenterer for at det er Jeff Sutherland og ham selv som har definisjonsretten på hva Scrum er. Folk som bruker versjonen som lå hos Scrum Alliance, jobber derfor ut fra materiale som ikke er riktig, i følge Ken. Jeg tror ikke at Ken og Jeff med rette kan hevde at det er dem som har definisjonsretten og alle andre må bare godta det. Scrum er sjenket til verden, og verden hører på de stemmene de vil høre på.</p>
<p>Samtidig ser jeg behov for å definere hva som er Scrum, slik at ikke alt mulig rart kan kalles &#8220;Scrum&#8221; (men akkurat dét ser ut til å være en håpløs kamp&#8230;) Scrum Alliance ser ut til å ville høre på Ken og Jeff, for de har fjernet sin gamle versjon. Et positivt poeng å ta med seg er uansett at Ken mener Scrum ikke er statisk, men må utvikle seg.</p>
<p>Den <a href="http://www.scrum.org/storage/scrumguides/Scrum%20Guide.pdf#view=fit">oppdaterte Scrum Guiden</a> på www.scrum.org inneholder noen overraskelser. Den største, for meg, er at Ken og Jeff har fjernet alt snakk om &#8220;visjon&#8221;. Tidligere var visjonen omtalt som grunnlaget for Produktkøen, men nå er det ikke mer visjon igjen. Jeg er kritisk til om dette er et steg i riktig retning. Det største videreutviklingspotensialet for smidig systemutvikling ligger i å gi mer støtte og verktøy til Produkteier i å finne og definere verdi &#8211; typisk visjon og annet arbeid som skjer i forkant av utviklingen. Jeff og Ken går motsatt vei og viser med det at de ønsker at Scrum skal fortsette å være en utviklersentrert metodikk. Synd for både dem og Scrum.</p>
<p>Jeg liker godt innledningen, hvor Jeff og Ken sier at Scrum har tre bein. I tillegg til (faktisk foran) de velkjente <em>inspeksjon</em> og <em>tilpasning</em> kommer nå <em>synlighet</em> (&#8220;transparency&#8221;).</p>
<p><em>Seremonier</em> har endret navn til <em>tidsbokser</em> og det er nå seks av dem: Release Planning Meeting, Sprint Planning Meeting, Sprint, Daily Scrum,  Sprint Review og Sprint Retrospective. Jeg liker godt at Release Planning Meeting har kommet inn. Noen savner kanskje demoen? Den ligger inne i Sprint Review, men det er lagt vekk på at demoen bare er en del av Sprint Review &#8211; mesteparten av møtet går til diskusjon om det som er laget og veien videre.</p>
<p>Scrum Guiden er obligatorisk lesning for alle som er opptatt av smidig systemutvikling. Og så kan vi debattere videre hva som er &#8220;riktig&#8221; Scrum&#8230;</p>
<p><em>Denne postingen er oppdatert etter at flere personer med rette hevdet at jeg ikke hadde et helt klart bilde av hva den gamle scrum guiden inneholdt (takk!). Inni dette er det sikkert en lekse angående det å stole for mye på hukommelsen.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/01/21/ny-definisjon-av-scrum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smidig utvikling er ikke i mål</title>
		<link>http://sterkblanding.no/blog/2010/01/21/agile-development-isnt-there-yet/</link>
		<comments>http://sterkblanding.no/blog/2010/01/21/agile-development-isnt-there-yet/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 09:00:30 +0000</pubDate>
		<dc:creator>Trond Wingård</dc:creator>
				<category><![CDATA[Smidig]]></category>
		<category><![CDATA[mål]]></category>
		<category><![CDATA[produkteier]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[utfordringer]]></category>
		<category><![CDATA[verdi]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=49</guid>
		<description><![CDATA[Smidig metodikk har inntatt Norge. Derfor må vi slutte å bare reklamere for de positive sidene, og åpne opp for å diskutere og løse reelle utfordringer knyttet til smidige prosjekter. De aller fleste artikler, temanummer osv. om smidige metodikker har så langt framstilt smidige metodikker på en svært rosenrød måte. Smidig systemutvikling er uten tvil [...]]]></description>
			<content:encoded><![CDATA[<p>Smidig metodikk har inntatt Norge. Derfor må vi slutte å bare reklamere for de positive sidene, og åpne opp for å diskutere og løse reelle utfordringer knyttet til smidige prosjekter.</p>
<p><span id="more-49"></span></p>
<p>De aller fleste artikler, temanummer osv. om smidige metodikker har så langt framstilt smidige metodikker på en svært rosenrød måte. Smidig systemutvikling er uten tvil et stort skritt framover i forhold til tradisjonell systemutviklingsmetodikk. Imidlertid er smidig utvikling i sin nåværende form <strong>ikke</strong> endestasjonen. Vi kan &#8211; og må &#8211; bli enda bedre.</p>
<p>Det finnes reelle utfordringer ved bruk av smidige metodikker, og det må vi også tørre å diskutere. Dét er viktig for at smidig utvikling skal bli en suksess, leve opp til sitt potensiale og ikke bare bli nok en hype på historiens gravplass. Her vil jeg nevne tre av de utfordringene jeg er opptatt av om dagen.</p>
<h2>Levere verdi</h2>
<p>Den første utfordringen gjelder å levere <strong>verdi</strong>. Smidige metodikk har som prinsipp å levere verdi tidlig og hyppig, og det mest verdifulle først. Dette gir bedre cashflow og ROI, og er et flott prinsipp.</p>
<p>I praksis leverer imidlertid smidige prosjekter funksjonalitet, ikke verdi. Stort sett aner vi ikke hvor mye verdi funksjonaliteten har for organisasjonen, eller om det kanskje ville vært mer lønnsomt å <strong>ikke</strong> utvikle en gitt funksjonalitet. Vi bare overlater til Produkteieren (kunden) å prioritere funksjonaliteten, og så håper vi at det fører til at vi leverer høyest verdi først og at ROI blir så høy som mulig. Kanskje det stemmer, kanskje ikke &#8211; det vet vi ikke, vi bare tror.</p>
<p>Vi trenger altså bedre måter å måle verdi på.</p>
<h2>Styre mot mål</h2>
<p>Den andre utfordringen er at smidige prosjekter fortsatt i for stor grad styrer mot kundens <strong>krav</strong>, ikke mot kundens <strong>mål</strong>. Den etter hvert velkjente Produktkøen (Product Backlog) fra Scrum er et eksempel på dette. Vi beskriver krav som brukerhistorier, legger dem inn i Produktkøen, og deretter følger vi framdrift i forhold til ferdigstillelse av kravene. Vi er åpne for å endre på kravene og omprioritere, mye mer enn på tradisjonelle prosjekter, og det bidrar absolutt til bedre resultater for prosjektet.</p>
<p>Imidlertid er det måloppnåelse som er viktig, ikke kravoppnåelse. Kravene er bare et sett med hypoteser for hvordan man kan nå målene. Vi trenger altså mer fokus på å definere mål og styre mot måloppnåelse. Det bør nevnes at EVO, utviklet av Norges egen Tom Gilb, er et velprøvd alternativ med fokus på måloppnåelse.</p>
<h2>Mer støtte til Produkteieren</h2>
<p>Den tredje utfordringen er at mye av det som er mest krevende, særlig i Scrum-prosjekter blir dyttet over på Produkteieren, dvs kunden. Og dette er samtidig ting som i stor grad avgjør om et prosjekt blir en suksess eller ikke, så som god forankring i organisasjonen, god balanse mellom ulike interessehavere, riktig prioritering av hva som blir med og hva som ikke blir med, osv. Allikevel sier vi ikke så mye om <strong>hvordan</strong> Produkteieren skal klare disse tingene. Produkteieren er ofte meget kompetent på sitt fagområde – men det fagområdet er vanligvis ikke prosjektstyring.</p>
<p>Så mens utviklingsteamet jobber lykkelig i vei, beskyttet fra forstyrrelser fra omverdenen, må Produkteieren prioritere ønsker, forankre beslutninger, forhandle enighet, drive internpolitikk &#8211; samtidig som hun skal bistå utviklingsteamet med alle ønskelige avklaringer.</p>
<p>Vi har gjort store framskritt på arbeidsmåten til utviklingsteamet, der jobber vi på en mye mer solid måte enn før. Nå må vi løfte blikket fra design-, utviklings- og testjobben. Vi må fokusere mer på Produkteieren og organisasjonen rundt, og gi reell støtte til Produkteierens viktige rolle.</p>
<h2>Ta erfaring på alvor</h2>
<p>Vi trenger altså bedre måter å måle verdi på, mer fokus på mål og måloppnåelse, og bedre støtte til Produkteieren og organisasjonen rundt. Men dette er kun tre utfordringer som <strong>jeg</strong> synes er viktige, andre vil være mer opptatt av andre utfordringer &#8211; ut fra deres situasjon og erfaring. Hovedpoenget er at vi nå begynner å diskutere disse reelle utfordringene som folk møter i praksis.</p>
<p>Så langt har dyktige folks konkrete utfordringer ofte blitt besvart med varianter over temaet &#8220;Men dere gjør det ikke riktig&#8221;. Slike svar hjelper ikke. Og skal smidig systemutvikling bli en suksess, må det være hjelp å få også når man sliter. Og like viktig: Hvis vi avfeier de utfordringene folk opplever, hindrer vi oss selv i å utvikle og forbedre den smidige metodikken, fordi vi ikke tar tilbakemeldingene fra praktisk bruk på alvor.</p>
<p>Som en av entusiastene som har jobbet for å spre smidig utvikling i en årrekke, gleder jeg meg over at smidig systemutvikling etter hvert har blitt godkjent og omfavnet i Norge. Markedsføringen har virket, nå må vi slutte å evangelisere og heller ta fatt på utfordringene.</p>
<p>Smidig systemutvikling i sin nåværende form er et stort steg videre, men ikke endestasjonen. Vi må fortsette å forbedre oss, basert på tilbakemeldinger.</p>
<p>Dét er den smidige kjernen i all sin enkelhet.</p>
<p><em>Dette innlegget er hovedsaklig basert på en artikkel jeg hadde i Computerworld i april 2009.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/01/21/agile-development-isnt-there-yet/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Scrum &#8211; &#8220;Det var dyrt&#8221;-øyeblikket</title>
		<link>http://sterkblanding.no/blog/2010/01/21/scrum-det-var-dyrt-%c3%b8yeblikket/</link>
		<comments>http://sterkblanding.no/blog/2010/01/21/scrum-det-var-dyrt-%c3%b8yeblikket/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 08:52:14 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Smidig]]></category>
		<category><![CDATA[kontrakt]]></category>
		<category><![CDATA[produkteier]]></category>
		<category><![CDATA[samarbeid]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=37</guid>
		<description><![CDATA[Hva skjer når kostnaden i utviklingsprosjektet plutselig blir veldig tydelig? Man kan ha en ærlig dialog. For noen uker siden hadde jeg en interessant erfaring på prosjektet mitt. Jeg og produkteieren fra kunden satt oss ned og så hva vi hadde produsert de siste to ukene &#8211; fire &#8220;brukerhistorier&#8221; som beskrev hva applikasjonen skal gjøre. [...]]]></description>
			<content:encoded><![CDATA[<p>Hva skjer når kostnaden i utviklingsprosjektet plutselig blir veldig tydelig? Man kan ha en ærlig dialog.</p>
<p><span id="more-37"></span></p>
<p>For noen uker siden hadde jeg en interessant erfaring på prosjektet mitt. Jeg og produkteieren fra kunden satt oss ned og så hva vi hadde produsert de siste to ukene &#8211; fire &#8220;brukerhistorier&#8221; som beskrev hva applikasjonen skal gjøre. Hver hadde en estimert relativ kostnad. Meg: &#8220;Ett poeng, tre poeng, to poeng, ett poeng, det blir syv poeng totalt.&#8221; Kunden: &#8220;Ok. Og denne <em>iterasjonen</em> kostet 140.000 kroner. Det blir 20.000 per poeng, ikke sant.&#8221; Jeg: &#8220;Høres riktig ut. Så denne oppgaven (peker på en brukerhistorie) kostet seksti tusen. Oi, det var dyrt.&#8221; Kunden: &#8220;Oi. Ja, det var dyrt.&#8221; Stillhet. Litt ukomfortabel latter.</p>
<p>Dersom du blir helt ferdig med ting under veis i prosjektet og du holder greie på hva du gjør, blir plutselig prisen på arbeidet veldig tydelig. Både for kunde og leverandør kan dette være et skummelt øyeblikk, for utviklingsprosjekter er alltid dyrere i praksis enn det føles ut som de burde være i teorien.</p>
<p>En ærlig leverandør vil ikke love å levere billigere enn man har vist å levere så langt. En ærlig kunde vil vite at det blir dyrt uansett leverandør og at informasjonen om kostnaden har en verdi i seg selv.</p>
<p>Men både den som skal svare til sin kunde og den som skal svare til sin styringsgruppe kan få hjertet litt i halsen første gang man faktisk får erfaringstall på hva prosjektet koster. Man føler seg litt naken. Men det er befriende også. For da kan man ha en dialog som er basert på fakta i og ikke bare følelser.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/01/21/scrum-det-var-dyrt-%c3%b8yeblikket/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

