<?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; Johannes Brodwall</title>
	<atom:link href="http://sterkblanding.no/blog/author/johannesbrodwall/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>Inspirerende open space</title>
		<link>http://sterkblanding.no/blog/2012/01/11/inspirerende-open-space/</link>
		<comments>http://sterkblanding.no/blog/2012/01/11/inspirerende-open-space/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 10:00:14 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=1308</guid>
		<description><![CDATA[Sist helg var jeg på Agile Coach Camp der vi hadde to dager fylt med open spaces med positive, engasjerte og smarte mennesker. Helgen viste meg noen av de beste mulighetene man har til å utnytte open space. Her er et utvalg av sesjoner og hva som gjorde dem bra: På min første sesjon &#8220;Certified [...]]]></description>
			<content:encoded><![CDATA[<p>Sist helg var jeg på <a href="http://agilecoachcamp.no">Agile Coach Camp</a> der vi hadde to dager fylt med open spaces med positive, engasjerte og smarte mennesker.</p>
<p><img src="https://twitpic.com/show/iphone/8491s1" alt="Open spaces på Agile Coach Camp" /></p>
<p><span id="more-1308"></span></p>
<p>Helgen viste meg noen av de beste mulighetene man har til å utnytte open space. Her er et utvalg av sesjoner og hva som gjorde dem bra:</p>
<ul>
<li>På min første sesjon &#8220;<em>Certified Scrum Dev exercises</em>&#8221; ba jeg om ideer og innspill til hvordan å gjennomføre et kurs for folk som vil bli bedre utviklere. Det var bare seks personer som møtte opp og vi hadde en ganske kort diskusjon, før jeg spurte de som var til stede om de hadde lyst til å prøve en praktisk workshop jeg hadde lest om. Så brukte vi 30 minutter der vi programmerte &#8220;Elephant Carpaccio&#8221;. Jeg hadde lest litt om øvelsen før workshopen og jeg har selv deltatt på øvelsen for et halvt år siden. Ut over det hadde jeg ikke gjort noen forberedelser.</li>
<li>Jeg deltok på <a href="https://twitter.com/#!/OlafLewitz">Olaf Lewitz</a> sin open space om &#8220;<em>Scoping techniques</em>&#8220;. Olaf tegnet opp et sett med teknikker på en flipover: Feature Injection, BDD, User Story Mapping, Effect Maps. Noen i publikum spurte &#8220;kan du fortelle litt mer om feature injection,&#8221; og så tegnet Olaf opp en skisse som demonstrerte arbeidsflyten. Noen foreslo andre teknikker, for eksempel så forklarte jeg modellen Evo. Olaf skisserte det jeg beskrev på en flipover. Olaf hadde forberedt seg med noen tanker på forhånd om hvilke teknikker han ville ha med seg og hvordan han kunne fremstille disse.</li>
<li><a href="https://twitter.com/#!/karianneberg">Karianne</a> gjennomførte en liten open space sesjon med tittelen &#8220;<em>Refactoring dojo</em>&#8220;. Hun hadde tatt med et kodeeksempel hun hadde brukt før og en PC, og de som møtte opp gjorde forbedringer i koden. Karianne koblet sin PC opp på en projektor og det gikk på omgang hvem som satt ved tastaturet og hvem som observerte og kommenterte det som ble gjort.</li>
<li>Jeg hørte fra noen som hadde deltatt på <a href="https://twitter.com/#!/joh">Joh</a> og <a href="https://twitter.com/#!/theagilepirate">Simon</a> sin open space &#8220;<em>Breaking big rocks</em>&#8220;. Her hadde facilitatorene forberedt et nøye planlagt opplegg: De beskrev et eksempel på et &#8220;stort problem&#8221; (&#8220;big rock&#8221;). Så delte de opp gruppen i grupper på 3 og ba hver gruppe komme opp med noen store problemer på post-its. De hang opp problemene på en flipover. Så ba de gruppene om å velge et problem hver og diskutere hva som gjorde det stort. Når gruppene hadde diskutert, samlet de sammen beskrivelsene og demonstrerte hvordan de problemene folk hadde samlet inn egentlig var veldig like. Jeg fikk inntrykk av at Joh og Simon hadde brukt litt tid på å planlegge sesjonen og bestemme seg for hvilke spørsmål de skulle stille til gruppen.</li>
<li>Jeg deltok på en annen sesjon med Olaf Lewitz &#8211; &#8220;<i>Lean procrastination</i>&#8220;. I introduksjonen fortalte Olaf at han hadde holdt en keynote med denne tittelen for et par uker siden. Vi hadde en projektor tilgjengelig, så deltagerne spurte om han kunne gå gjennom presentasjonen for oss. Resten av sesjonen ble en uformell presentasjon med slider.</li>
<li>Jeg foreslo en kvelds-open space med tittelen &#8220;<i>how to fix devs</i>&#8220;. Jeg introduserte med &#8220;vi klager alltid over prosjektledere, kunden, produkteiere, arkitekter osv. Nå vil jeg klage litt over (oss) utviklere&#8221;. Vi hadde en liten diskusjon og jeg presenterte noen tanker om hvordan vi burde justere på rammene for utviklere, for eksempel at &#8220;i stedet for at utviklere gir estimater for oppgaver, hva om produkteier gir budsjetter for oppgaver&#8221;. Jeg hadde tenkt mye på temaet før open space og fikk masse bra feedback på hvilke av disse tankene som virket fornuftig som jeg kan ta med meg videre.</li>
<li>I en tidsperiode der jeg ikke fant en sesjon som jeg inspirerte meg, gikk jeg rundt og hørte på litt forskjellig. Jeg ble sittende på slutten av en sesjon som het &#8220;<i>Definition of Agile Coaching</i>&#8220;. I løpet av sesjonen hadde gruppen produsert denne definisjonen: &#8220;<a href="http://hhgttg.de/blog/2012/01/08/what-is-agile-coaching/">Agile coaching is a 100% client-focused engagement which enables continuous improvement, because the client owns aligned goals and purpose across organisational levels and the people doing the work define the steps towards those</a>.&#8221;</li>
<li>Jeg holdt en siste open space på søndag, denne om &#8220;<i>non-violent communication</i>&#8220;. Jeg introduserte med &#8220;jeg har lest en bok som ga meg masse tanker jeg synes var spennende, jeg vil gjerne diskutere dette med dere&#8221;. Diskusjonen var ustrukturert og springende, men det var mange som deltok og alle følte at de både bidro og fikk utbytte av alle de forskjellige diskusjonene. Jeg noterte meg noen ord på et par flipovers, men notatene var ikke mulige for noen som ikke hadde deltatt å forstå. Diskusjonen skapte mye tanker om hva vil det egentlig si å tvinge noen i en diskusjon. Vi fikk en positiv atmosfære i gruppen som ga en fin avslutning på helgen.</li>
</ul>
<p>Om jeg skal trekke noen konklusjoner: Man kan komme til en open space med forskjellig grad av forkunnskap og forskjellige forventninger. Du kan stille med med en ferdig presentasjon, en plan med spørsmål, en liste over relevante spørsmål og ideer, eller bare med et tema (som da jeg foreslo &#8220;non-violent communication&#8221;). Resultatet kan bli at man gjennomfører en øvelse sammen, produserer et resultat, kommer opp med en liste med ideer som folk kan sjekke ut etterpå eller at man bare har en hyggelig samtale.</p>
<p>Vellykkede open spaces kommer i mange størrelser og fasonger. Et av prinsippene bak open space er &#8220;whatever happens is the only thing that could have happened&#8221;. Eksemplene mine fra Agile Coach Camp demonstrerer dette prinsippet: Man kan komme til en open space med forskjellig grad av forkunnskap og forskjellige forventninger. Når gruppen får en sjanse til å forme innholdet, blir opplevelsen verdifull for alle.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2012/01/11/inspirerende-open-space/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Del din kunnskap!</title>
		<link>http://sterkblanding.no/blog/2011/12/21/del-din-kunnskap/</link>
		<comments>http://sterkblanding.no/blog/2011/12/21/del-din-kunnskap/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 13:49:33 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=1296</guid>
		<description><![CDATA[Har du noe du kunne tenke deg å diskutere? Har du kunnskap du kunne tenke deg å dele? Har du noe du kunne tenke deg å lære? Er det noen måte du kunne tenke deg å endre verden rundt deg? På kick-off i år vil Steria feire &#8220;The Power of Sharing&#8221; ved å vie den [...]]]></description>
			<content:encoded><![CDATA[<p>Har du noe du kunne tenke deg å diskutere? Har du kunnskap du kunne tenke deg å dele? Har du noe du kunne tenke deg å lære? Er det noen måte du kunne tenke deg å endre verden rundt deg?</p>
<p>På kick-off i år vil Steria feire &#8220;The Power of Sharing&#8221; ved å vie den faglige delen til Open Space. Her har alle som deltar anledning til å skape dialog om ting som interesserer dem. På en open space kan du ta opp ting du er flink til som du ønsker å dele, ting du ikke er flink til som du ønsker å lære, måter du ønsker andre endrer seg på eller hva enn som interesserer deg.</p>
<p><span id="more-1296"></span></p>
<p><img src="http://farm8.staticflickr.com/7025/6517845471_6dc74d961f.jpg" alt="Open space sesjoner på Smidig 2011" /></p>
<p>Praktisk fungerer det slik at deltagerne foreslår sine temaer ved oppstarten av open space. Du vil få ti sekunder på scenen å fortelle hva du vil diskutere og så får du plassere temaet i programmet som vi henger opp på en stor tavle. Når &#8220;din&#8221; sesjon starter er du ansvarlig for å ønske velkommen og etter det kan du lytte eller snakke så mye eller lite du ønsker. Du trenger ikke å forberede noe før en open space (men du kan om du vil). Alle diskusjonsgruppene vil ha flipover og noen få vil ha projektor.</p>
<p>Her er eksempler på ideer som andre har tenkt å bidra med på Sterias open space:</p>
<ul>
<li>ABC of ICT</li>
<li>Slik kommer du igang med brukertesting</li>
<li>Hvordan få til tverrfaglige løsningsteam i smidige prosjekter</li>
<li>Hvordan få brukertesting inn i alle Sterias systemutviklingsprosjekter</li>
<li>Hva bør en SharePoint-konsulent være?</li>
<li>Hvordan bli en bedre leder og hvordan få en bedre leder</li>
<li>Kommuniksasjonsstil: Er du grønn, gul eller rød</li>
<li>Bli med og leke med CoffeeScript</li>
<li>Skal vi bidra til et open source prosjekt?</li>
<li>Sterias bidrag til FNs tusenårsmål</li>
<li>The rise and <span style="text-decoration: underline">fall</span> of Intranets</li>
<li>Trender og utvikling i IT-bransjen</li>
<li>Kan en kontrakt være smidig?</li>
</ul>
<p>Som deltager på open space er du ansvarlig for ditt eget utbytte. Så det er lurt at mange tenker litt på forhånd om hva de vil diskutere! Så gjør deg selv og dine medmennesker en tjeneste: Bruk ett minutt på å tenke på hva du kunne tenke deg å dele, å lære, å endre sammen med de du jobber med. Skriv gjerne en (uforpliktende) kommentar med et mulig tema.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2011/12/21/del-din-kunnskap/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Kunsten å holde foredrag</title>
		<link>http://sterkblanding.no/blog/2010/12/02/kunsten-a-holde-foredrag/</link>
		<comments>http://sterkblanding.no/blog/2010/12/02/kunsten-a-holde-foredrag/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 09:29:34 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[foredrag]]></category>
		<category><![CDATA[Presentasjonsteknikk]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=1005</guid>
		<description><![CDATA[For å holde et godt foredrag, må du kunne noe, du må ville noe og du må gjøre noe. Et godt foredrag starter med at du snakker om noe du kan. Og du kan mer enn du tror. Det er som regel sånn at de tingene du kan selv, føles som selvfølgeligheter. Men de erfaringene [...]]]></description>
			<content:encoded><![CDATA[<p>For å holde et godt foredrag, må du <em>kunne </em>noe, du må <em>ville</em> noe og du må <em>gjøre</em> noe.</p>
<p><span id="more-1005"></span></p>
<p>Et godt foredrag starter med at du snakker om noe du kan. Og du kan mer enn du tror. Det er som regel sånn at de tingene du kan selv, føles som selvfølgeligheter. Men de erfaringene du har og de opplevelsene du har, de er unike for deg. Kanskje det er mange som har interessert seg for de sammen tingene som du har, men det er lite sannsynlig at de har samme perspektiv på tingene. Du bringer noe unikt til bordet. Velg et tema du har erfaring med, og du har tatt første skrittet til et fascinerende foredrag.</p>
<p>Når du skal bestemme deg for nøyaktig hva du vil snakke om, hjelper det å tenke på hvordan du vil påvirke ditt publikum. Publikumet ditt kan noe når de kommer til foredraget ditt. Ta utgangspunkt i at de vil noe med det de kan. Hvilket problem eller behov har de når de kommer inn i salen? Et vellykket foredrag kanaliserer denne viljen til handling: Hva vil du at de skal gjøre når de har hørt foredraget ditt? Skriv ned den (for deg) perfekte tilhørers kunnskap, vilje og handling etter at han eller hun har hørt foredraget. Dersom du kan beskrive en transformasjon som engasjerer deg, har du tatt skritt nummer to til et fascinerende foredrag.</p>
<p>For å oppnå noe, kreves arbeid. Når du holder et foredrag er det viktigste arbeidet du gjør å trene på å snakke. Bruk under 30 minutter på å strukturere tankene dine før du prøver å holde foredraget første gangen. Hold det for deg selv, men snakk høyt. Tren mange ganger. Tren foran andre om du kan. Tren minst tre ganger på foredraget før du lager en eneste slide. Tren mange ganger på foredraget ditt, og du vil komme i mål med et fascinerende foredrag.</p>
<p>Dersom du får med deg hodet (kunnskapen), hjertet (viljen) og kroppen (treningen), så er du garantert å holde et bra foredrag.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/12/02/kunsten-a-holde-foredrag/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Retrospektivteknikker</title>
		<link>http://sterkblanding.no/blog/2010/11/28/retrospektivteknikker/</link>
		<comments>http://sterkblanding.no/blog/2010/11/28/retrospektivteknikker/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 00:45:25 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[retrospektiver]]></category>
		<category><![CDATA[smidig2010]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=1000</guid>
		<description><![CDATA[På Smidig 2010 arrangerte jeg en workshop der jeg testet ut en del retrospektiv-teknikker på deltagerne. Workshopen var veldig godt besøkt og jeg har fått en del forespørsler om å skrive en oppsummering av teknikkene. Øvelsene kan tjene som inspirasjon til dine egne retrospektiver og workshops. Jeg brukte tre workshop-øvelser under hele workshopen: &#8220;Tenke og [...]]]></description>
			<content:encoded><![CDATA[<p>På <a href="http://smidig2010.no">Smidig 2010</a> arrangerte jeg en workshop der jeg testet ut en del retrospektiv-teknikker på deltagerne. Workshopen var veldig godt besøkt og jeg har fått en del forespørsler om å skrive en oppsummering av teknikkene.</p>
<p>Øvelsene kan tjene som inspirasjon til dine egne retrospektiver og workshops.</p>
<p><span id="more-1000"></span></p>
<p>Jeg brukte tre workshop-øvelser under hele workshopen:</p>
<ul>
<li>&#8220;Tenke og svare&#8221;: Et retrospektiv kan være en sjelden anledning til å bare sitte og tenke uavbrutt. I &#8220;tenke og svare&#8221; øvelser får deltagerne to minutter i stillhet til å tenke på svaret til et personlig spørsmål. Etter to minutter får alle fortelle svaret sitt, mens resten av gruppen og moderatoren lytter.</li>
<li>&#8220;Tre svar på tre spørsmål i grupper på tre&#8221;: Deltagerne blir delt i grupper på tre som alle skal finne tre svar på hver av tre spørsmål. Etter ti minutter avgir gruppene ett svar hver. Dersom spørsmålene krever handling, kan deltagerne i plenum stemme fram hvilke svar de ønsker å handle på grunnlag av</li>
<li>&#8220;Snakker og lytte&#8221;: Det er overraskende sjelden vi blir lyttet uavbrutt i ett minutt, eller lytter oppmerksomt til en annen i et minutt. I &#8220;snakke og lytte&#8221; øvelsen får deltagerne et personlig viktig spørsmål og blir delt i grupper på to og to. I hver gruppe skal én person snakke og den andre lytte i ett minutt. Etter ett minutt bytter parene roller.</li>
</ul>
<p>På Smidig 2010 kjørte jeg workshopen som et retrospektiv av den første dagen på konferansen. Øvelsens form var delvis inspirert av &#8220;Agile Retrospektives&#8221; av Diana Larsen og Esther Derby. &#8220;Agile Retrospekives&#8221; anbefaler en fem-stegs prosess som ledet hovedstrukturen for workshopen:</p>
<ol>
<li>Set the stage: &#8220;Tenke og svare&#8221; øvelse med på spørsmålet &#8220;Hva har vært høydepunkter så langt&#8221;</li>
<li>Gather data: &#8220;3&#215;3 spørsmål&#8221; øvelsen der to av spørsmålene var for å samle data. (&#8220;hva har overrasket meg&#8221; og &#8220;hva har jeg lært&#8221;)</li>
<li>Generate insights: &#8220;Lytte og snakke&#8221; øvelsen med spørsmålet &#8220;hva vil gjøre meg lykkeligere&#8221;. Av praktiske grunner gjorde jeg den etter det siste spørsmålet fra &#8220;3&#215;3 spørsmål&#8221;.</li>
<li>Decide what to do: Det tredje spørsmålet fra &#8220;3&#215;3 spørsmål&#8221; var &#8220;hva vil du lære mer om&#8221;. Etter at ti grupper hadde kommet opp med ett svar hver, stemte vi i plenum på de mest interessante temaene.</li>
<li>Close the retrospektive: Å tenke og svare på spørsmålet &#8220;hva håper du å oppleve&#8221; var øvelsen som avsluttet retrospektivet.</li>
</ol>
<p>For å få en mest mulig konstruktiv dialog, forsøkte jeg å strukturere spørsmålene etter inspirasjon fra &#8220;Appreciative Inquiry&#8221;. Ola Ellnestams blogpost om <a href="http://ellnestam.wordpress.com/2009/11/12/an-ai-retrospective/">Appreciative Inquiry Retrospectives</a> var en viktig kilde til inspirasjon.</p>
<p>Hvilke spørsmål kan du tenkte deg å stille til &#8220;tenke og svare&#8221;, &#8220;3&#215;3 spørsmål&#8221; og &#8220;snakke og lytte&#8221; øvelser? Hvilke spørsmål kan hjelpe gruppen å generer innsikter, samles om et mål og gå ut av retrospektivet fulle av ideer og håp for fremtiden?</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/11/28/retrospektivteknikker/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>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>Hvilke spørsmål skaper et bra seminar?</title>
		<link>http://sterkblanding.no/blog/2010/09/09/hvilke-sp%c3%b8rsmal-skaper-et-bra-seminar/</link>
		<comments>http://sterkblanding.no/blog/2010/09/09/hvilke-sp%c3%b8rsmal-skaper-et-bra-seminar/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 09:46:07 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[nlp]]></category>
		<category><![CDATA[Presentasjonsteknikk]]></category>
		<category><![CDATA[soft-skills]]></category>
		<category><![CDATA[spørsmål]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=845</guid>
		<description><![CDATA[Jeg liker å holde foredrag og seminarer der jeg involverer deltagerne. Å stille spørsmål til forsamlingen er en god måte å engasjere folk på, men jeg har lært meg at ikke alle spørsmål er skapt like. Hvilke spørsmål er gode for å få respons? Et eksempel: Å få deltagerne til å følge resonnementet ditt Dette [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg liker å holde foredrag og seminarer der jeg involverer deltagerne. Å stille spørsmål til forsamlingen er en god måte å engasjere folk på, men jeg har lært meg at ikke alle spørsmål er skapt like. Hvilke spørsmål er gode for å få respons?</p>
<p><span id="more-845"></span></p>
<h2>Et eksempel: Å få deltagerne til å følge resonnementet ditt</h2>
<p>Dette er et spørsmål jeg stilte til deltagerne på et scrum-kurs som jeg holdt flere ganger. Jeg lærte etter hvert hva som fikk forsamlingen til å svare:</p>
<ol>
<li>&#8220;Skal teammedlemmene avgi status til Scrum master på morgenmøtet?&#8221; (svaret er &#8220;nei&#8221;, men sjansene for at noen føler seg dumme fordi de svarte feil er nesten 50%)</li>
<li>&#8220;Hvem skal teammedlemmene avgi status til under morgenmøtet?&#8221; (svaret er &#8220;hverandre&#8221;, men sjansene for at noen føler seg dumme fordi de svarer feil er godt over 50%)</li>
<li>&#8220;Hvorfor skal teammedlemmene ikke fortelle status bare til Scrum master på morgenmøtet?&#8221; (for åpent, folk vet ikke hvordan de skal angripe spørsmålet)</li>
<li>&#8220;Hvordan skal teammedlemmene fortelle status på morgenmøtet?&#8221; (fortsatt for åpent)</li>
<li>&#8220;Hva er feil dersom teammedlemmene gir status til Scrum masteren på morgenmøtet?&#8221; (nå starter det å nærme seg, men fortsatt for åpent)</li>
<li>&#8220;Hvilke negative effekter kan man oppleve dersom teammedlemmene kun gir status til Scrum masteren på morgenmøtet?&#8221; (her inviterer man deltagernes kreativitet inn i diskusjonen)</li>
</ol>
<h2>Et eksempel: Å få deltagerne til å tenke gjennom hva de har hørt</h2>
<p>Her er noen spørsmål jeg har prøvd å stille til deltagerne etter at jeg har holdt et kurs.</p>
<ul>
<li>&#8220;Hvordan vil du bruke det du har lært?&#8221;: Hvordan-spørsmål blir fort så åpne at deltagerne ikke vet hvor de skal starte</li>
<li>&#8220;Hvilke av teknikkene i Scrum vil være vanskelige å få til i deres organisasjon?&#8221;: Hvilke-spørsmål kan være åpne og medføre overfladisk gjennomgang.</li>
<li>&#8220;Hvilken av teknikkene i Scrum vil være vanskeligst å få til i deres organisasjon?&#8221;: Hvilken-spørsmål inviterer til å gjøre en mental gjennomgang (som hjelper folk å huske) og begrenser hvor mye hver enkelt føler seg pliktig til å besvare. Egner seg godt for refleksjon på slutten av en workshop.</li>
<li>&#8220;Hva vil du gjøre annerledes etter det du har lært?&#8221;: Et tung og forpliktende spørsmål. Effektivt, men må brukes med måte.</li>
</ul>
<p>Hvilke spørsmålstillinger synes du stimulerer til god diskusjon?</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/09/09/hvilke-sp%c3%b8rsmal-skaper-et-bra-seminar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Å skrive tilbud er som å forelske seg</title>
		<link>http://sterkblanding.no/blog/2010/08/24/a-skrive-tilbud-er-som-a-forelske-seg/</link>
		<comments>http://sterkblanding.no/blog/2010/08/24/a-skrive-tilbud-er-som-a-forelske-seg/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 14:43:25 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Smidig]]></category>
		<category><![CDATA[Strategi]]></category>
		<category><![CDATA[tilbud prosjektledelse arkitektur følelser]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=767</guid>
		<description><![CDATA[En varm glede fyller hjertet mitt i dag: Løsningsarkitekturen jeg laget vårt tilbud til Statnetts nye system for handel av kraftreserver ble undertegnet på fredag. De valgte oss! Det siste halve året eller så har jeg gått å gledet og gruet meg over dette tilbudet. Og det har slått meg: Å skrive et tilbud er [...]]]></description>
			<content:encoded><![CDATA[<p>En varm glede fyller hjertet mitt i dag: Løsningsarkitekturen jeg laget vårt tilbud til Statnetts nye system for handel av kraftreserver ble undertegnet på fredag. De valgte oss!</p>
<p>Det siste halve året eller så har jeg gått å gledet og gruet meg over dette tilbudet. Og det har slått meg: Å skrive et tilbud er som å forelske seg.</p>
<p>Først blir man litt kjent med kunden og kundens problem. Noen fanger interessen, og man får lyst til å vite alt om problemet. Man spør og graver. Om man ikke får snakke med kunden (og det får man ofte ikke i denne fasen), så snakker man med kolleger og venner som naturligvis ikke har noe svar: &#8220;Tror du at det er sånn? Tror du at dette er forklaringen på hvorfor det som de ba om var litt pussig? Tror du at de vil være interessert i dette forslaget?&#8221;</p>
<p>Til slutt bestemmer man seg for å satse alt. Søvnløse netter går mens man forsøker å fremstille seg attraktiv for den andre parten. Man forsøker å finne hva den andre parten har lyst til. Og noen ganger må man våge å si noe de ikke vil, men egentlig trenger å høre. Så leverer man et tilbud. Man må tørre å legge alle følelsene sine i tilbudet, fullt vitende om at man kan bli avvist. Den som intet våger, intet vinner.</p>
<p>Så kommer forhandlingene. Den andre parten føler seg attråverdig. De har mange beilere. Man snakker om en mulig fremtid sammen, men den andre parten vil ikke forplikte seg. Man tenker i sitt stille sinn &#8220;men jeg liker deg, liker ikke du meg, da?&#8221; Men man våger naturligvis ikke å si det.</p>
<p>Og til slutt sier de &#8220;ja&#8221;. Man er klar til å knytte knuten.</p>
<p>Og nå starter deg egentlig jobben. Jeg gleder meg.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/08/24/a-skrive-tilbud-er-som-a-forelske-seg/feed/</wfw:commentRss>
		<slash:comments>0</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>Bugs of honor, bugs of shame</title>
		<link>http://sterkblanding.no/blog/2010/04/06/bugs-of-honor-bugs-of-shame/</link>
		<comments>http://sterkblanding.no/blog/2010/04/06/bugs-of-honor-bugs-of-shame/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 16:39:28 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=346</guid>
		<description><![CDATA[Det er flaut med bugs. Noen bugs gjør meg flauere enn andre. Andre bugs er helt akseptable. I prosjektet mitt er vi stolte av at såpass få feil finnes av testere (eller av brukere), men det er noen som faller gjennom sikkerhetsnettet vårt. Her er noen av bugsene vi har hatt i det siste, fra [...]]]></description>
			<content:encoded><![CDATA[<p>Det er flaut med bugs. Noen bugs gjør meg flauere enn andre. Andre bugs er helt akseptable. I prosjektet mitt er vi stolte av at såpass få feil finnes av testere (eller av brukere), men det er noen som faller gjennom sikkerhetsnettet vårt. Her er noen av bugsene vi har hatt i det siste, fra den minst ydmykende til den verste:</p>
<p><span id="more-346"></span></p>
<ul>
<li><strong>Bug rapport: &#8220;Administrative kostnader&#8221; skal fjernes:</strong> Når vi beregner totalkostnaden til et veiprosjekt, inkluderer vi kostnaden av nyanlegg, ombygging, bruer og administrative kostnader. Når vi demonstrerte applikasjonen til brukerne våre, husket de plutselig at administrative kostnader er sjelden i bruk og burde egentlig fjernes fra applikasjonen. Endringen var enkel og det er usannsynlig at en bedre analyse på forhånd hadde kommet fram til samme konklusjon. Dette er den type feilrapport vi liker å få.</li>
<li><strong>Bug rapport: Ikke-effektuerte utbetalinger skal telle mot totalt tilgjengelige midler:</strong> Når vi sjekket om det var tilstrekkelige midler for å utføre en utbetaling, glemte vi å ta med de utbetalingene som var registrert, men ikke utført enda. Tilstandsovergangen av utbetalinger fra registrert til godkjent til utført var litt mer kompleks enn vi hadde forventet, og enhetstestene sjekket ikke tilstrekkelig med varianter. Vi burde ha funnet denne feilen med enhetstestene våre, men dersom vi aldri får feil av denne typen, kan det være en indikasjon på at vi er <em>for</em> nøye med testingen vår. Så feilen er helt grei. Spesielt ettersom konsekvensene for brukeren ikke var spesielt store</li>
<li><strong>Bug rapport: Perioder som starter i desember rapporterer <em>IllegalArgumentException</em>:</strong> Når vi beregnet neste måned, glemte vi å ta hensyn til at du kan ikke bare legge til én på månedsnummer. Neste måned etter desember er ikke måned 13! Dette var en slurvete feil og jeg tror den ble introdusert en gang når vi ikke parprogrammerte (fordi koden var så triviell, liksom!). Brukerne våre forstår at slike type feil kan skje, men vi må se nøyere på prosessen vår for å unngå slike feil i fremtiden.</li>
<li><strong>Bug rapport: Layout ser rotete ut i Internet Explorer:</strong> For å unngå noen tekniske problemer når vi skrev enhetstester for HTML&#8217;en vi produserte, fjernet vi midlertidig doctype-definisjonen fra webside-malene våre. Så glemte vi å putte definisjonen inn igjen (jada, et nytt eksempel der vi ikke parprogrammerte). Sidene så fortsatt fine ut i Chrome og Firefox, som utviklerne brukte for manuell verifisering. Men i Internet Explorer så websidene direkte kaotiske ut. Den tekniske konsekvensen av feilen var triviell, men feilen kunne lett ha vært unngått, dersom vi vi hadde testet med samme nettleser som brukerne våre. Noen av brukerne våre fikk dette håpløse førsteinntrykket av applikasjonen mens de hjalp oss å teste. Det var skikkelig flaut. Dette vil vi ikke at skjer igjen!</li>
</ul>
<p>Det er litt vanskelig å definere hvilke bugs som gjør meg mest flau. Noen viktige faktorer er hvor vanskelig ville det vært for oss å unngå feilen og hvor stor konsekvens feilen har. Men andre faktorer påvirker også hvordan vi oppfatter en bug. Av feilene på lista over, så er den jeg er mest flau over kun en kosmetisk feil. Men siden dette var noen brukeres førsteinntrykk av applikasjonen, var det mye mer problematisk enn de særtilfellene vi ikke helt støttet.</p>
<p>Hva synes du gjør en feil mer eller mindre akseptabel?</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/04/06/bugs-of-honor-bugs-of-shame/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gi bedre feedback</title>
		<link>http://sterkblanding.no/blog/2010/03/17/gi-bedre-feedback/</link>
		<comments>http://sterkblanding.no/blog/2010/03/17/gi-bedre-feedback/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 20:38:09 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[Samhandling]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=234</guid>
		<description><![CDATA[Forskjellen på god feedback og dårlig feedback er enorm. Jeg og min kollega Ram holdt i dag et kurs i presentasjonsteknikk. For at alle skulle få mulighet å trene, delte vi kurset i grupper. For at alle skulle få god feedback, ga vi noen tips om hvordan man kan gi bedre feedback. Her er fire [...]]]></description>
			<content:encoded><![CDATA[<p>Forskjellen på god feedback og dårlig feedback er enorm. Jeg og min kollega Ram holdt i dag et kurs i presentasjonsteknikk. For at alle skulle få mulighet å trene, delte vi kurset i grupper. For at alle skulle få god feedback, ga vi noen tips om hvordan man kan gi bedre feedback. Her er fire gode tips:</p>
<p><span id="more-234"></span></p>
<ul>
<li><strong>Påpek noe positivt:</strong> Etter kurset fikk vi en mail fra en av deltagerne som sa &#8220;takk for kurset, det var veldig bra&#8221;. Det gjorde meg bevisst på hvor sjeldent vi gir og mottar skryt uten at det er et &#8220;men&#8230;&#8221; hengende rundt hjørnet og hvor motiverende det er når man faktisk får det.</li>
<li><strong>Vær konkret:</strong> Dersom du sier &#8220;foredraget var litt uklart&#8221;, gjør du mottakeren av kritikken en bjørnetjeneste. Uten at du påpeker noe konkret er det vanskelig for mottakeren å gjøre noe med det. Dersom du i stedet kan si: &#8220;Eksemplene gikk litt fort&#8221;, så er det lettere å gjøre noe med det.</li>
<li><strong>Foreslå en forbedring:</strong> I stedet for å peke på hva som var dårlig, kan du finne rom for å gjøre det bedre?</li>
<li><strong>Motiver forbedringen:</strong> I stedet for å bare gi et forslag til forbedring, kan du forklare hvordan endringen vil forbedre foredraget. Det tydeliggjør at du ønsker å hjelpe, samtidig som du anerkjenner at det er den som mottar forbedringen som tar den endelig avgjørelsen.</li>
</ul>
<p>Som et eksempel på prinsippet, sa jeg under kurset til min med-instruktør: &#8220;Du Ram, &#8216;å bli en bedre presentatør&#8217; høres litt klønete ut. Dersom du i stedet sier &#8216;å bli flinkere til å presentere&#8217;, så tror jeg setningen vil flyte bedre.&#8221;</p>
<p>Er du bevisst på å gi gode tilbakemeldinger? Hvilken tilbakemelding kan du gi meg når det gjelder denne artikkelen?</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/03/17/gi-bedre-feedback/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>Hvordan komme i gang med blogging</title>
		<link>http://sterkblanding.no/blog/2010/02/16/hvordan-komme-i-gang-med-blogging/</link>
		<comments>http://sterkblanding.no/blog/2010/02/16/hvordan-komme-i-gang-med-blogging/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 19:51:45 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Samhandling]]></category>
		<category><![CDATA[blogging samhandling]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=168</guid>
		<description><![CDATA[Det kan være vanskelig å komme i gang å blogge, men noen enkle tips kan gjøre det litt mer overkommelig. Hvem? Det viktigste når du skriver en blogpost er å være bevist på hvem dine lesere er. For denne artikkelen gjorde jeg meg følgende tanker: Hva er leserens forhold til tema? Jeg regner med at [...]]]></description>
			<content:encoded><![CDATA[<p>Det kan være vanskelig å komme i gang å blogge, men noen enkle tips kan gjøre det litt mer overkommelig.</p>
<h3>Hvem?</h3>
<p>Det viktigste når du skriver en blogpost er å være bevist på hvem dine lesere er. For denne artikkelen gjorde jeg meg følgende tanker:</p>
<ul>
<li><em>Hva er leserens forhold til tema?</em> Jeg regner med at du som leser blogger litt eller tenker på å starte å blogge.</li>
<li><em>Hva tenker leseren om tema?</em> Jeg regner med at du synes det er vanskelig å komme i gang med bloggingen.</li>
<li><em>Hva får de ut av å lese blogposten?</em> Etter å ha lest posten vil jeg at du skal føle deg mer i stand til å skrive dine egne blogposter.</li>
</ul>
<h3>Hva?</h3>
<p>Når du vet hvem du henvender deg til, er det viktigste å jobbe med innholdet og strukturen.</p>
<ul>
<li><strong>Struktur:</strong> For hvert avsnitt vil du miste 5% av leserne (for å trekke et tall ut av lufta). Skriv det viktigste først</li>
<li><strong>Språk:</strong> Bruk aktivt språk som henvender seg direkte til leseren. Et eksempel på aktivt språk er: &#8220;Bruk aktivt språk som henvender seg direkte til leseren&#8221;</li>
<li><strong>Eksempler:</strong> Det er vanskelig å formidle abstrakte ideer. Eksempler er enklere.</li>
</ul>
<h3>Hvordan?</h3>
<p>Når jeg starter med en blogpost, starter jeg nesten alltid med å kladde på papir. Jeg skriver strukturen ned, river i stykker papiret og skriver den ned på nytt. For meg fungerer det veldig godt å skrive på papir for å bearbeide tankene. Når jeg tar fram datamaskinen, blir jeg distrahert av verktøyene.</p>
<p>Mine mest populære artikler er de som der jeg har fått mye innspill av andre før jeg har publisert artiklene. Send utkast til artikkelen til folk du stoler på og be om konstruktiv tilbakemelding. Konstruktiv tilbakemelding er konkret og spesifikk: For eksempel: &#8220;Dersom blogposten hadde brukt punktlister også i siste avsnitt hadde den virket mer helhetlig uttenkt&#8221;. Personlig liker jeg best å dele utkastene mine med andre via <a href="http://docs.google.com">Google Docs</a>, framfor å maile vedlegg frem og tilbake.</p>
<p>Spre ordet via de kanalene du kommuniserer med: Pass på at bloggen har en RSS-feed. Bruk twitter, yammer, facebook, linkedin etc for å spre ordet. Ikke glem den gamle traveren email, heller (men for guds skyld, ikke spam folk!)</p>
<h3>Hvorfor?</h3>
<p>Som mennesker ligger trangen til å kommunisere i vårt DNA. Når jeg er entusiastisk om noe, føles det riktig å dele det. Å nå andre bekrefter vår egen eksistens.</p>
<p>Blogito, ergo sum!</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/02/16/hvordan-komme-i-gang-med-blogging/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Hemmeligheten bak gode spesifikasjoner</title>
		<link>http://sterkblanding.no/blog/2010/01/21/hemmeligheten-bak-gode-spesifikasjoner/</link>
		<comments>http://sterkblanding.no/blog/2010/01/21/hemmeligheten-bak-gode-spesifikasjoner/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 23:48:08 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[FitNesse]]></category>
		<category><![CDATA[spesifikasjon]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=82</guid>
		<description><![CDATA[Mange prosjekter har startet å ta i bruk verktøy som FitNesse eller Cucumber til å automatisere funksjonelle tester. Disse verktøyene gjør det lett å skrive akseptansetester, men det er opp til oss som bruker dem å sørge for at disse testene blir til en god spesifikasjon av systemet som skal utvikles, og ikke bare testscript. [...]]]></description>
			<content:encoded><![CDATA[<p>Mange prosjekter har startet å ta i bruk verktøy som <a href="http://fitnesse.org">FitNesse</a> eller <a href="http://cukes.info">Cucumber</a> til å automatisere funksjonelle tester. Disse verktøyene gjør det lett å skrive akseptansetester, men det er opp til oss som bruker dem å sørge for at disse testene blir til en god spesifikasjon av systemet som skal utvikles, og ikke bare testscript. Her er noen tips for å forbedre dine spesifikasjoner.</p>
<p><span id="more-82"></span></p>
<h3>Fokus på &#8220;hvorfor&#8221;, ikke &#8220;hvordan&#8221;</h3>
<p>Hva forsøker denne testen å uttrykke:</p>
<blockquote><p>Når en bruker registrerer en betaling med beløp &#8220;-1234567890&#8243;, så skal brukeren se en feilmelding</p></blockquote>
<p>Hva med denne:</p>
<blockquote><p>Når en bruker registrerer en betaling med et negativt beløp så skal brukeren få en passende feilmelding</p></blockquote>
<p>Magiske tall, tekster og verdier i tester skjuler hva vi forsøker å <em>spesifisere</em>. Noen flere eksempler: &#8220;når en bruker utelater et eller flere påkrevde felter, så skal brukeren få en feilmelding knyttet til de manglende feltene&#8221;, &#8220;gitt at brukeren leverer en lottorekke med for få tall&#8221;.</p>
<p>Å koble slike tester mot systemet krever mer arbeid, spesielt de første gangene, men testene blir mye klarere etterpå. Og hovedformålet med en akseptansetest er at den er en spesifikasjon som kan diskuteres mellom prosjektet og omverdenen. Og da er det viktig å være klar. Noen ganger vil det virke svært vanskelig å automatisere forståelige spesifikasjoner. Da bør du huske at en god beskrivelse er mer verdifull enn en dårlig test.</p>
<h3>Given-when-then</h3>
<p>Noe av det første du lærer med tester er &#8220;bruk formen &#8216;gitt X, når Y, så Z&#8217;&#8221;. Men det er ikke alltid så klart hva X, Y og Z skal være. Tester består av tre typer steg:</p>
<ul>
<li><strong>Arrange</strong> (oppsett, &#8220;given&#8221;): Beskriver tilstanden til systemet før testen starter. Typiske eksempler er &#8220;<em>gitt at det eksisterer en bruker med utestående betalinger</em>&#8220;, &#8220;<em>gitt at tjenesten levert fra vår partner har registrert et varenummer</em>&#8221; eller kanskje &#8220;<em>gitt at det er en fredag</em>&#8221; (du får vente til freddan). Avhengig av systemet og tilstanden vi beskriver, kan testen benytte disse stegene på forskjellige måter: Vi kan <em>sette opp</em> brukeren og betalingene i systemet, vi kan se på steget som en forutsetning som vi <em>sjekker</em> om er oppfylt, for eksempel ved å gjøre et søk mot tjenesten fra vår partner, vi kan <em>forutsette</em>, eller endog håpe at det er oppfylt og vi kan la steget kun være dokumentasjon, slik at når testen feiler, så vet vi noen ting vi kan verifisere manuelt, eller det kan være en ren løgn. Kanskje systemet er satt opp på en spesiell måte slik at det ikke er avhengig av ukedagen. Men vi har lyst til å dokumentere hvordan det hadde sett ut om det hadde vært &#8220;på ordentlig.&#8221;</li>
<li><strong>Act</strong> (utfør, &#8220;when&#8221;): Beskriver stimuli inn fra omverden. &#8220;Når brukeren registrerer en ny betaling,&#8221; &#8220;når klientsystemet sender en betalingsforespørsel med manglende kundeinformasjon&#8221;. Disse kan implementeres på flere måter i de fleste systemer: Et test av et web-grensesnitt kan simulere en klient med for eksempel <a href="http://code.google.com/p/selenium/wiki/GettingStarted?redir=1">webdriver</a>, den kan gjøre et http-kall og direkte, eller testen kan bruke klassene som implementerer tjenesten direkte. For funksjonelle tester foretrekker jeg nesten alltid det siste. Det gjør at testene vil kjøre hundre ganger raskere, og vil som regel innebære mindre jobb. Husk: Det er ikke nødvendig å teste brukergrensesnittet på nytt for hver valideringsregel eller spesialtilfelle i applikasjonen din.</li>
<li><strong>Assert</strong> (sjekk, &#8220;then&#8221;): Beskriver hvordan systemet skal reagere på stimuli og hva tilstanden til systemet skal være etterpå. For eksempel &#8220;så skal brukeren få en feilmelding om at alle betalinger må være utført før en ny betaling kan registreres&#8221;, &#8220;så skal den nye betalingen ikke lagres i systemet.&#8221;</li>
</ul>
<h3>Veien fra testscript til spesifikasjoner</h3>
<p>Når prosjekter først tar i bruk FitNesse er det veldig vanlig å se tester som ser cirka slik ut:</p>
<ul>
<li>Putt inn <em>en kjempeliste med rader med en bråte kolonner</em> inn i tabell A.</li>
<li>Putt inn <em>en ny kjempelist med rader etc</em> i tabell B</li>
<li>Send inn et kjempemessig XML dokument</li>
<li>Sjekk at svaret matcher et nytt XML dokument</li>
</ul>
<p>Dette er ikke en spesifikasjon &#8211; det er et testscript. Og det er ikke slike tester som gir verdi til et prosjekt. Men det er et sted å starte, for det krever ikke så veldig mye kreativitet. Og vi kan gjenbruke lærdommen fra slike tester. Men før det blir en hel skog av tester som dytter XML-dokumenter hit og dit, kan det være lurt å løfte testene opp på et mer logisk nivå:</p>
<ul>
<li>Gitt at det ikke eksisterer noen betalingsforespørsler</li>
<li>Og en bruker er registrert</li>
<li>Når brukeren sender inn en betalingsforespørsel med <em>ett gitt problem</em></li>
<li>Så skal brukeren få feilmeldingen <em>en gitt feilmelding</em></li>
</ul>
<p>I FitNesse-terminologi kan en slik test implementeres som en ColumnFixture. Det vil si: Hvert par av &#8220;problem&#8221; og &#8220;feilmelding&#8221; er en rad i en tabell. Slik kan vi uttrykke mange regler ved systemet klart og konsist.</p>
<p>Dersom du har startet å gå veien med testscript, er det ikke vanskelig å snu: For hver rad i den nye spesifikasjonen din skal du utføre alt det testscriptet ditt gjorde.</p>
<p>Jeg vil bruke jobben med akseptansetester til ikke bare å gjøre automatiske kjøringer av systemet mitt, men til å spesifisere og diskutere de egentlige kravene brukerne mine bryr seg om. Og dersom jeg må velge mellom tester som lar seg automatisere og spesifikasjoner som beskriver kravet, vil jeg alltid velge det siste.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/01/21/hemmeligheten-bak-gode-spesifikasjoner/feed/</wfw:commentRss>
		<slash:comments>1</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>
		<item>
		<title>Hvordan endre en statisk klasse til en dynamisk singleton</title>
		<link>http://sterkblanding.no/blog/2010/01/21/hvordan-endre-en-statisk-klasse-til-en-dynamisk-singleton/</link>
		<comments>http://sterkblanding.no/blog/2010/01/21/hvordan-endre-en-statisk-klasse-til-en-dynamisk-singleton/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 08:52:05 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=40</guid>
		<description><![CDATA[Har du arvet kode fra noen andre? Er det ingen tester på kodebasen? Er all koden limt fast sammen med kall på statiske metoder som ikke lar seg erstatte med mocker i testene dine? Det er mulig å gjøre en disiplinert refaktorisering fra denne situasjonen til et mockbart design der alle kallene går via en [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>Har du arvet kode fra noen andre? Er det ingen tester på kodebasen? Er all koden limt fast sammen med kall på statiske metoder som ikke lar seg erstatte med mocker i testene dine?</div>
<div><span id="more-40"></span></div>
<div>Det er mulig å gjøre en disiplinert refaktorisering fra denne situasjonen til et mockbart design der alle kallene går via en singleton som kan erstattes under testing. Her er en oppskrift for å endre en statisk klasse til en singleton:</div>
<div>
<ol>
<li>Gitt at den originale klassen heter StaticService. Kopier klassen til en ny klasse som blir implementasjonsklassen, for eksempel kallt ServiceImplementation</li>
<li>ServiceImplementation trenger å kun ha ikke-statiske metoder. Dette er lett å fikse ved en tekstlig &#8220;søk/erstatt&#8221; av &#8220;public static&#8221; med &#8220;public&#8221;. Normalt vil dette søket kun treffe metodene som du trenger, men det er mulig du må ettergå steget for hånd.</li>
<li>For å kunne mocke ut ServiceImplementation er det kjekt å ha et interface, for eksempel kallt ServiceInterface. Din IDE har antageligvis innebygget støtte for dette. Se etter &#8220;Extract Interface&#8221; i Refactoring menyen.</li>
<li>La en ny klasse ServiceDelegator som skal erstatte StaticService.  Legg til en private static felt til ServiceInterface. I code menyen til IDEA og i Source menyen finnes valget &#8220;(Generate) Delegate methods&#8221;. IDEA gjør disse metodene static dersom feltet er static, men det gjør dessverre ikke Eclipse. I Eclipse må man bruke &#8220;søk/erstatt&#8221; for å legge til &#8220;static&#8221; (erstatt &#8220;public&#8221; med &#8220;public static&#8221;, men pass opp for &#8220;public class&#8221; i toppen av filen)</li>
<li>Så kommer det skumle. Slett StaticService og omdøp ServiceDelegator til static service. Her vil refactoringstøtten i IDE&#8217;en din virke mot deg. All koden burde nå fortsatt kompilere uten endring.</li>
<li>Så er det bare å gjøre instansfeltet i servicen aksesserbart av testene (for eksempel med en setter) og du kan mocke ut ServiceInterface til hjertens lyst og glede</li>
</ol>
</div>
<p>Lykke til med ditt testbare prosjekt!</p></div>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/01/21/hvordan-endre-en-statisk-klasse-til-en-dynamisk-singleton/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Min første katacast</title>
		<link>http://sterkblanding.no/blog/2010/01/21/min-f%c3%b8rste-katacast/</link>
		<comments>http://sterkblanding.no/blog/2010/01/21/min-f%c3%b8rste-katacast/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 08:51:40 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=42</guid>
		<description><![CDATA[Etter at jeg så noen artige eksempler på programmere som jobbet med øvelsesprogrammering på KataCasts, bestemte jeg meg for å spille inn min egen video. Jeg er rimelig fornøyd, men jeg feilberegner bakgrunnsmusikken med cirka ett minutt. (Det gikk fortere på innspillingen enn på generalprøven). Uten mer om og men, poster jeg en video her [...]]]></description>
			<content:encoded><![CDATA[<p>Etter at jeg så noen artige eksempler på programmere som jobbet med øvelsesprogrammering på <a href="http://www.katacasts.com/">KataCasts</a>, bestemte jeg meg for å spille inn min egen video. Jeg er rimelig fornøyd, men jeg feilberegner bakgrunnsmusikken med cirka ett minutt. (Det gikk fortere på innspillingen enn på generalprøven).</p>
<p><span id="more-42"></span></p>
<p>Uten mer om og men, poster jeg en video her av hvordan jeg liker å jobbe med tester for å drive fram &#8220;kravene&#8221; til en applikasjon og refactoring for å forme designet til applikasjonen. Se spesielt rundt 11:30 minutter inn i videoen hvor jeg refactorer inn et regelmotordesign i en fungerende løsning.</p>
<p>Oppgaven kalles &#8220;Fizz buzz kataen&#8221;. Den går ut på å generere en sekvens av nummer der hvert tall som er delelig på 3 erstattes med &#8220;fizz&#8221; og alle tall som er delelig på 5 erstattes med &#8220;buzz&#8221;. Så starten blir &#8220;1, 2, fizz, 4, buzz, fizz, 7, 8, fizz, buzz, 11, etc.&#8221; Seks minutter inn i kataen endres kravet (og musikken!): Nå skal man kunne programmere inn hvilke erstatningsregler som gjelder. Som eksempel bruker jeg at &#8220;tall delelig med 2 skal erstattes med &#8216;coconut&#8217; og tall delelig med 7 skal erstattes med &#8216;banana&#8217;&#8221;.</p>
<p>Takk til Emily Bache for inspirasjon til oppgaven.</p>
<p><a href="http://vimeo.com/8459948">Fizz buzz code kata</a> av <a href="http://vimeo.com/user2873956">Johannes Brodwall</a> på <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Jeg bruker <a href="http://www.jetbrains.com/idea/free_java_ide.html">IntelliJ IDEA Community Edition</a> på Windows Vista (!) til å løse oppgaven. Videoen er filmet med <a href="http://www.bbsoftware.co.uk/BBFlashBack_FreePlayer.aspx?cc=true">BB FlashBack Express</a> (som er gratis), konvertert til AVI med Windows Media 1 codec og lastet opp til Vimeo.</p>
<p>Denne blogposten var originalt publisert på engelsk på <a href="http://johannesbrodwall.com">min personlige blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/01/21/min-f%c3%b8rste-katacast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

