<?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/category/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>Hvordan sikre at brukerhistorien blir levert som kunden forventer</title>
		<link>http://sterkblanding.no/blog/2011/08/11/hvordan-sikre-at-brukerhistorien-blir-levert-som-kunden-forventer/</link>
		<comments>http://sterkblanding.no/blog/2011/08/11/hvordan-sikre-at-brukerhistorien-blir-levert-som-kunden-forventer/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 15:12:40 +0000</pubDate>
		<dc:creator>Øyvind Norstein Øvregård</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[Test]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=1202</guid>
		<description><![CDATA[Har du noen gang opplevd å levere noe du trodde kunden ville ha, men som i ettertid viste seg å være noe helt annet en hva kunden forventet? Hvorfor gikk det galt? Ofte er det slik at du og kunden hadde forskjellig forståelse av hva som skulle lages. Denne forståelsen var sannsynligvis ganske identisk i [...]]]></description>
			<content:encoded><![CDATA[<p>Har du noen gang opplevd å levere noe du trodde kunden ville ha, men som i ettertid viste seg å være noe helt annet en hva kunden forventet? Hvorfor gikk det galt?</p>
<p><span id="more-1202"></span>Ofte er det slik at du og kunden hadde forskjellig forståelse av hva som skulle lages. Denne forståelsen var sannsynligvis ganske identisk i begynnelsen, men manglende kommunikasjon underveis førte til antakelser som viste seg å være feil.</p>
<p>Kunden: &#8220;Hvordan går det?&#8221;<br />
Du: &#8220;Det går kjempe bra! Er allerede i Sandefjord!&#8221;<br />
Kunden: &#8220;Hva mener du med at du er i Sandefjord??&#8221;</p>
<p>Du satte deg i bilen din og kjørte til Kristiansand, mens kunden står og venter i Kristiansund. Hvorfor står dere på hver deres side av landet? Det som tilsynelatende var krystallklart for både deg og kunden i begynnelsen, resulterte i en skivebom av dimensjoner (ca 887 km). Hadde dere hatt en dialog underveis, ville dere mest sannsynlig kunne oppklart misforståelsen på et tidligere tidspunkt.</p>
<p>Selv om dette eksemplet kan virke banalt, så illustrerer det noe veldig viktig. Dersom man ikke får kontinuerlig feedback på det man driver på med, kan man fort ende opp med å kjøre i feil retning.</p>
<p>Veien til suksess handler om kommunikasjon med kunden. Kontinuerlig feedback sikrer at dere har felles forståelse for hvor dere skal. Det beste hadde selvfølgelig vært å ha kunden med i passasjersetet hele veien. Dette er ikke alltid mulig, men vi har noen gode erfaringer med hvordan man kan oppnå lignende nivå av kommunikasjon likevel.</p>
<p><strong>Fem gode tips for å sikre at brukerhistorien blir levert som kunden forventer</strong></p>
<p><strong>1. Bruk et felles språk som både kunde og utviklere forstår.</strong><br />
Utviklere generelt har en tendens til å bruke veldig mye tekniske uttrykk og forkortelser. Dette er et språk kunden ikke forstår og finner frustrerende. Få vil innrømme at de ikke forstår meningen av redsel for å fremstå som mindre smarte. Språk av slik art kan også fort bli tatt for god fisk, fordi det høres &#8220;fancy&#8221; ut og kan fort føre til misforståelser. Lytt til hvordan kunden beskriver og referer til ting og forsøk å tilpasse deg språket deres. I denne sammenheng er det alltid utviklerene som må tilpasse seg domenespråket til kunden, og ikke motsatt. Likevel er det vikitig å introdusere kunden for nye konsepter som for eksempel en &#8220;hendelse&#8221;, uten å beskrive dette på et teknisk nivå. Språket er noe som du utvikler sammen med kunden over tid. Sørg for å danne basisen for dette språket allerede fra starten av prosjektet.</p>
<p><strong>2. Start arbeidet ditt sammen med kunden før du begynner å skrive en eneste linje med kode.</strong><br />
Med dette oppnår du flere ting. For det første må du sette deg inn i problemstillingen for å i det hele tatt kunne føre en fornuftig dialog med kunden. Allerede nå får du bedre forståelse av hva som skal lages, både fordi du har tenkt over det på egenhånd, og du kanskje får svar på flere sentrale spørsmål gjennom dialog med kunden før du starter. For det andre så involverer du kunden fra starten av. Kunden vil føle det betryggende at han er involvert i prosessen. De er da i mye bedre stand til å gi deg løpende tilbakemeldinger.</p>
<p><strong>3. Lag et førsteutkast med akseptansekriterier</strong><br />
Akseptansekriteriene definerer hva som skal til for at brukerhistorien er ferdigutviklet. Dette bør være skrevet på det felles språket som dere sammen har kommet frem til. Kriteriene bør kun inneholde den funksjonaliteten som er innenfor denne brukerhistorien. Ikke inkluder kriterier for eksisterende funksjonalitet eller funksjonalitet som er utenfor scope.</p>
<p>En idé kan være å formulere akseptansekriteriene dine på dette formatet:<br />
Gitt at jeg har kr 100,-på visakortet mitt<br />
Når jeg kjøper en øl til kr 60,- med visakortet mitt<br />
Så skal jeg ha kr 40,- igjen på visakortet</p>
<p>Dette er et format fra Behavior driven development (BDD)-evangelistene som vi ikke kommer til å gå nærmere inn på i denne artikkelen.</p>
<p>Utviklere jobber best med konkrete eksempler, dette krever at du er presis. Når du utarbeider førsteutkastet med akseptansekriterier kommer det fort opp nye problemstillinger som man først ser når man graver seg dypere ned i detaljene. Utkastet er et godt utgangspunkt for videre diskusjon med kunden. Gjennom akseptansekriteriene dine skinner det igjennom hvordan du har oppfattet kundens behov.</p>
<p><strong>4. Kall inn kunden til et møte, med utgangspunkt i førsteutkastet av akseptansekriteriene.</strong><br />
Selv om du forhåpentligvis har hatt kontinuerlig kommunikasjon med kunden underveis, så blir et slikt møte en &#8220;reality check&#8221;. I dette møtet vil du få kjapp tilbakemelding på hvordan &#8220;din verden&#8221; stemmer overens med &#8220;kundens verden&#8221;. Du har allerede nå satt deg godt inn i problemstillingen, og har noe konkret å diskutere med kunden. Dette gjør deg i stand til å diskutere utfordringer som er på et mer detaljert nivå enn tidligere. Kunden vil som oftest stille spørsmål rundt flere av formuleringene i akseptansekriteriene dine. Slike spørsmål tyder på at du har uttrykt noe uklart, som ofte kan føre til misforståelser. Da er det helt nødvendig å stoppe opp, tenke seg om , og omformulere. Grav deg ned i hva uklarheten dreier seg om, og omformuler akseptansekriteriet sammen. På denne måten sikrer du at kunden får det han ber om, og du får en bedre forståelse av hva som skal lages og hvilken verdi dette gir til kunden.</p>
<p><strong>5. Ha en kontinuerlig feedback-loop med kunden.</strong><br />
Utviklerene har nå noe konkret å ta tak i. Det er fortsatt en del ting som ikke er avklart, men hovedessensen er på plass. Det dukker alltid opp nye problemstillinger etter at utviklingen har startet. Avklaringsprosessen er noe som går igjennom hele utviklingsløpet til brukerhistorien, men du har nå et godt grunnlag for å håndtere nye utfordringer som måtte oppstå. Du har dannet kommunikasjonskanalen, kunden er involvert fra starten av, og utviklerene har et klart definert sett av kriterier som de kan forholde seg til.</p>
<p>For å si det kort; involvér kunden så tidlig som mulig, kommunisér på et språk som dere har blitt enige om, og sørg for å få kontinuerlig feedback. Da vil man unngå mange unødvendige misforståelser og dere vil begge føle et felles eierskap til det som skal leveres. En bonuseffekt er at man kan etterprøve akseptansekriteriene når brukerhistorien er levert. Dette er mye enklere å gjøre ettersom kriteriene er noe dere har blitt enige om sammen, helt fra starten.</p>
<p>Dette er noen av våre erfaringer fra et av Norges største smidige prosjekter.<br />
Hva er dine erfaringer?</p>
<p>Øyvind Norstein Øvregård<br />
Finn-Robert Kristensen</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2011/08/11/hvordan-sikre-at-brukerhistorien-blir-levert-som-kunden-forventer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>Hvordan lage minesveiper i JavaScript på under 14 minutter</title>
		<link>http://sterkblanding.no/blog/2011/03/25/hvordan-lage-minesveiper-i-javascript-pa-under-14-minutter/</link>
		<comments>http://sterkblanding.no/blog/2011/03/25/hvordan-lage-minesveiper-i-javascript-pa-under-14-minutter/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 09:48:08 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=1139</guid>
		<description><![CDATA[Denne øvelsen ble opprinnelig utført foran publikum på Go Open / Communities in Action eventet i mars 2011. En code kata er en enkel øvelse for å skjerpe programmeringsferdighetene dine. Det vil si &#8211; du trener bare problemløsning den første gangen du utfører øvelsen. Så gjentar du øvelsen, om og om igjen, til det sitter i [...]]]></description>
			<content:encoded><![CDATA[<p><em>Denne øvelsen ble opprinnelig utført foran publikum på Go Open / Communities in Action eventet i mars 2011.</em></p>
<p>En <a title="Code Kata" href="http://codekata.pragprog.com/">code kata</a> er en enkel øvelse for å skjerpe programmeringsferdighetene dine. Det vil si &#8211; du trener bare problemløsning den første gangen du utfører øvelsen. Så gjentar du øvelsen, om og om igjen, til det sitter i fingerspissene. Og hver gang prøver du å gjøre det litt kjappere. Hensikten er å trene hastighet, teknikk og verktøy.</p>
<p>I klippet under lager jeg en variant av <a title="Minesweeper code kata" href="http://codingdojo.org/cgi-bin/wiki.pl?KataMinesweeper">Minesweeper</a> kataen i JavaScript.</p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="640" height="480"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=21474244&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=21474244&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="480"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p>(Kjør den i fullscreen for å se koden mer tydelig)</p>
<p>Merk: Jeg bruker testdrevet utvikling gjennom det meste av prosessen. På slutten dropper jeg TDD når jeg gjør det visuelle og selve spillmekanikken. Dette kunne også testes fra kode, men jeg droppet det for å gjøre den mer artig å se på. <img src='http://sterkblanding.no/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Du kan <a title="Minesveiper kata kode" href="https://github.com/thomanil/sweeper">se på koden i github-kontoen min</a>. Hver commit er en separat gjennomkjøring av øvelsen fra scratch.</p>
<p>Jeg brukte følgende libraries og verktøy:</p>
<ul>
<li><a title="Underscore.js library" href="http://documentcloud.github.com/underscore/">Underscore.js</a></li>
<li><a title="jQuery framework" href="http://jquery.com/">jQuery</a></li>
<li><a title="Grid.js library" href="https://github.com/thomanil/Grid">Grid.js</a></li>
<li><a title="clAutotest tool" href="https://github.com/thomanil/clAutotest">clAutotest</a></li>
<li><a href="http://macromates.com/">TextMate</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2011/03/25/hvordan-lage-minesveiper-i-javascript-pa-under-14-minutter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jeg tror at du er den som kan ta initiativ til ”Loggvakt” i prosjektet ditt!</title>
		<link>http://sterkblanding.no/blog/2010/10/13/jeg-tror-at-du-er-den-som-kan-ta-initiativ-til-%e2%80%9dloggvakt%e2%80%9d-i-prosjektet-ditt/</link>
		<comments>http://sterkblanding.no/blog/2010/10/13/jeg-tror-at-du-er-den-som-kan-ta-initiativ-til-%e2%80%9dloggvakt%e2%80%9d-i-prosjektet-ditt/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 06:21:47 +0000</pubDate>
		<dc:creator>Gudny Hauknes</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=897</guid>
		<description><![CDATA[Jeg bare må få komme med noen refleksjoner jeg gjorde meg her om dagen &#8211; basert på &#8220;opplevelser fra virkeligheten” i PERFORM-prosjektet hos Statens Pensjonskasse! I den intensive godkjenningsperioden vi har vært gjennom, ble rollen ”Loggvakt” opprettet. Rollen har holdt løpende oppsyn med serverlogger, gjort logganalyse og ytt bistand til Delprosjekt Test for preanalyse av [...]]]></description>
			<content:encoded><![CDATA[<h3>Jeg bare må få komme med noen refleksjoner jeg gjorde meg her om dagen &#8211; basert på &#8220;opplevelser fra virkeligheten” i PERFORM-prosjektet hos Statens Pensjonskasse!</h3>
<p>I den intensive godkjenningsperioden vi har vært gjennom, ble rollen ”Loggvakt” opprettet. Rollen har holdt løpende oppsyn med serverlogger, gjort logganalyse og ytt bistand til Delprosjekt Test for preanalyse av feil som rapporteres. Bemanning av rollen har gått på rundgang i prosjektet.<br />
<span id="more-897"></span><br />
Intet kunne ha gledet meg mer! Jeg selv var så heldig å få sitte loggvakt ”hjemme hos” Delprosjekt Test – og det to dager på rad attpåtil! Og det var da refleksjonene kom… Vi tar’n like godt på engelsk <img src='http://sterkblanding.no/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>During test intensive periods – engage your project members on &#8220;log surveillance duty&#8221;!</p>
<p>The person on duty has the chance of becoming a real detective! He or she should tail essential server logs continuously, analyse them and initiate proper action when e.g. specific stacktraces, log statements, log sequences or log-patterns appear. The log surveillance duty role should also take part in early analysis of important bug reports so that they can be handed over to relevant teams as fast as possible.</p>
<p>Using the log surveillance duty as one of several “bug hunt approaches”, the project may experience that bugs are caught earlier<em>. </em>In addition, <em>without </em>the log surveillance duty role, some of these bugs would <em>not have been reported at all</em>. You’ll see the effect of this during free testing in particular.</p>
<p>Imagine this “happy day situation” in your project:</p>
<p>“ALERT – we have a situation! Log statement GOOD_STUFF in the jBoss log”!</p>
<p>“Ta-ta-raaaa! Who did a search for GOOD_STUFF just a couple of minutes ago and got an error message? Ah-so you were the one! Grrrreat! Oh.. so – you’re &#8211; used to ignoring this error message- are you – ok…Please tell us when such messages appear, will you? It&#8217;s of great value! But now … What was your scenario again? And the five steps <em>preceeding</em> your scenario? Can you rerun it, please…..? Thanks! …..Bingoooo!! The GOOD_STUFF_BUG has been reproduced, it has been trapped! Juppie!! My hero tester! Could you report that bug for me, please?”</p>
<p>When assigning resources to the log surveillance duty role, people with different interests, orientations and skills should be motivated to take part! Experience the incredible opportunities just waiting to be used &#8211; to increase the over time quality of the system being built!</p>
<ul>
<li>One day – call a JEE architect, a senior developer for duty -</li>
<li>The day after that &#8211; a user scenario oriented person –</li>
<li>The next day a developer with DB-expertise -</li>
<li>A junior developer –</li>
<li>A technically oriented senior tester -</li>
<li>And then a &#8220;usability minded&#8221; one –</li>
</ul>
<p>Keep on rolling &#8211; keep on changing &#8211; keep on building system quality mind set &#8211; keep on spreading system understanding – keep on….</p>
<p>Don’t wait! Just do it! Market the log surveillance duty role and motivate your project members to take part! Prepare yourself to be called!</p>
<p>… I’ll bet you’ll take on new habits after you organized your first round – or the first time you participated – I’m sure!</p>
<p>So, get on with it! Good luck! </p>
<p>P.S:</p>
<p>Hvis du har lest min blogg fra 04/10/2010 og du allerede er på god vei til å bli en Buglock Holmes i prosjektet ditt, ser du nok at på loggvakta får du brukt alt det du har blitt vant til å gjøre som Buglock!</p>
<p>D.S.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/10/13/jeg-tror-at-du-er-den-som-kan-ta-initiativ-til-%e2%80%9dloggvakt%e2%80%9d-i-prosjektet-ditt/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Jeg vet at du kan bli prosjektets neste ”Buglock Holmes”!</title>
		<link>http://sterkblanding.no/blog/2010/10/04/jeg-vet-at-du-kan-bli-prosjektets-neste-%e2%80%9dbuglock-holmes%e2%80%9d/</link>
		<comments>http://sterkblanding.no/blog/2010/10/04/jeg-vet-at-du-kan-bli-prosjektets-neste-%e2%80%9dbuglock-holmes%e2%80%9d/#comments</comments>
		<pubDate>Mon, 04 Oct 2010 19:40:17 +0000</pubDate>
		<dc:creator>Gudny Hauknes</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=877</guid>
		<description><![CDATA[Uavhengig om du er juniorutvikler eller er du senior systemspesialist, er jeg sikker på at du kan bli prosjektets neste ”Buglock Holmes”! Hvis du vil&#8230;. Forbered deg til å bli Buglock Holmes på følgende måte: Ha en grov oversikt over områder de ulike teamene i prosjektet jobber med… Kjenn rimelig godt til hva produktkøen for [...]]]></description>
			<content:encoded><![CDATA[<p>Uavhengig om du er juniorutvikler eller er du senior systemspesialist, er jeg sikker på at <em>du</em> kan bli prosjektets neste ”Buglock Holmes”! Hvis du vil&#8230;.<br />
<span id="more-877"></span><br />
Forbered deg til å bli Buglock Holmes på følgende måte:</p>
<ul>
<li>Ha en grov oversikt over områder de ulike teamene i prosjektet jobber med…</li>
<li>Kjenn rimelig godt til hva produktkøen for prosjektleveransen inneholder…</li>
<li>Vit hva teamet ditt <em>og</em> hva andre team i prosjektet har levert …</li>
<li>Husk at det er nyttig å ha god oversikt over hvilke deler av produktkøen som <em>ikke </em>inngår i leveransen …</li>
<li>Sørg for at ørene dine vokser seg store og sterke! Vær nysgjerrig! Snus rundt!</li>
<li>Prøv å snappe opp ting som foregår hos naboteamet, ved kaffeautomaten…</li>
<li>Hold øye med serverloggene i integrasjonstestmiljøet for prosjektet…</li>
<li>Hold en rimelig god og helst løpende oversikt over hvilke feil som meldes inn i feilrapporteringssystemet i testintensive perioder …</li>
<li>Lær deg å huske nøkkelord og nøkkelsituasjoner, designdiskusjoner ved tavla og møter eller samtaler der viktige forståelser eller avklaringer ble skapt…</li>
<li>Husk situasjoner der folk var svært uenige om deler av løsningen…</li>
<li>Lær deg å huske situasjoner der man faktisk kom til enighet&#8230;</li>
<li>Bli pådriver for at viktige avklaringer og omforente tolkninger styres inn i klare krav, testbetingelser, skjermskisser, flytskjemaer, figurer etc. …</li>
<li>Bli pådriver for at de klare kravene etc. forstås på samme måte – spesielt av de som var uenige / ikke forstod hverandre…</li>
<li>Innse selv og hjelp ulike interessenter til å forstå at ikke alle uenigheter kan forenes…</li>
<li>Erkjenn at uansett hvor godt vi dokumenterer avklaringer, kan vi forvente at der ulike interessenter var uenige, vil diskusjoner dukke opp igjen senere i prosjektets liv, f.eks. når systemet leveres til test eller til produksjon…</li>
</ul>
<p> </p>
<p>Tren deg noen av disse teknikkene! Da vil du etter hvert bygge en god oversikt over hele systemet dere leverer! Du kan ta aktive grep i forhold til vanskelige feilfloker og du vil forstå hvordan de ulike feilene/manglene henger sammen med hverandre.</p>
<p>Lykke til, Buglock!</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/10/04/jeg-vet-at-du-kan-bli-prosjektets-neste-%e2%80%9dbuglock-holmes%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>0</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>Interaktiv programmering: utforsking, læring og produktivitet</title>
		<link>http://sterkblanding.no/blog/2010/09/09/interaktiv-programmering-utforsking-l%c3%a6ring-og-produktivitet/</link>
		<comments>http://sterkblanding.no/blog/2010/09/09/interaktiv-programmering-utforsking-l%c3%a6ring-og-produktivitet/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 08:42:01 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=781</guid>
		<description><![CDATA[Dette er blog-versjonen av et foredrag som jeg holdt på JavaZone 2010. Jeg har fått dilla på dynamiske programmeringsspråk (JavaScript, Ruby, Lisp, med flere) i det siste. Et av fellestrekkene ved slike språk er at de lar deg programmere interaktivt. Vet du ikke hva interaktiv programmering er? Flott, da har du kommet til riktig artikkel! [...]]]></description>
			<content:encoded><![CDATA[<p><em>Dette er blog-versjonen av et foredrag som jeg holdt på JavaZone 2010.</em></p>
<p>Jeg har fått dilla på dynamiske programmeringsspråk (JavaScript, Ruby, Lisp, med flere) i det siste. Et av fellestrekkene ved slike språk er at de lar deg programmere interaktivt. Vet du ikke hva interaktiv programmering er? Flott, da har du kommet til riktig artikkel!</p>
<p><span id="more-781"></span></p>
<p>Ideen bak er ganske enkel, men jeg tror det er enklere å vise hva det er først, istedet for å skrive masse forklarende tekst. Her er et eksempel, demonstrert med IRB (Interactive Ruby):</p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="600" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=14709877&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=14709877&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="400"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p>Hva skjer her?</p>
<p>Vel, jeg skriver ekstremt grunnleggende Ruby-kode. Men se hva som skjer underveis. Hver Ruby-setning jeg skriver inn blir evaluert og kjørt av systemet. Resultatet spyttes tilbake på kommandolinja. Systemet husker hva jeg gjør. Jeg definerer variabler og funksjoner. Jeg kan bruke og bygge videre på dem, og jeg får umiddelbar feedback på alt jeg gjør. Og jeg slipper å kompilere eller restarte koden min hver gang jeg prøver noe nytt.</p>
<p>Den vanlige prosessen vår for systemutvikling er som et stålverk. Vi lager en støpeform (skriver kode i en IDE). Så støper vi en klump stål (kompilering/restart). Dersom stålklumpen ikke har riktig form, så er det tilbake til tegnebordet for å justere støpeformen. Denne feedback-løkka er mye raskere enn før takket være raskere kompilering, bedre maskiner og enhetstesting &#8211; men vi kaster likevel bort en del tid når vi løper frem og tilbake på denne måten.</p>
<p>Interaktiv programmering derimot er mer som å jobbe med leire. Vi arbeider med samme stykke materiale kontinuerlig. Vi klatter på litt kode, ser hvordan det ser ut. Tar vekk ting, bytter ut, former, eksperimenterer.</p>
<p>Dette er ikke en erstatning for hvordan vi vanligvis arbeider, men mer et nyttig tilbehør. Du bygger ikke en produksjonsbil med leire, men det er mye lettere å lage f.eks en design-prototype med leire enn med stål. På samme måte kan interaktiv programmering være et bra hjelpemiddel og supplement for seriøs systemutvikling.</p>
<p>Helt konkret: hvorfor er interaktiv programmering nyttig?</p>
<ul>
<li><strong>Du arbeider raskere</strong>, fordi feedback-løkka er kortere.</li>
<li><strong>Du slipper unna med mindre kode</strong>, fordi du bruker mindre tid på å bygge infrastruktur og &#8220;boilerplate&#8221;.</li>
</ul>
<p>Mer komplisert er det ikke. Jeg mistenker imidlertid at det ene bruksområdet ovenfor ikke overbeviser helt. Jeg skal derfor vise flere eksempler, og du kan tenke over hvordan disse teknikkene passer inn i din egen verktøykasse.</p>
<p>Jeg bruker jevnlig interaktiv programmering til følgende:</p>
<ul>
<li>Utforsking og læring</li>
<li>Grensesnitt mot backend-system</li>
<li>Frontend-utvikling og prototyping</li>
</ul>
<p>Utforsking og læring har vi allerede sett via IRB-klippet over. Neste eksempel er et interaktiv programmering som grensesnitt mot et kjørende system &#8211; i dette tilfellet en Ruby on Rails-applikasjon.</p>
<p>I filmklippet som følger lenger ned starter jeg et interaktivt konsoll på en lokal testserver. Der har jeg tilgang til det samme api&#8217;et, databasekoblinger etc som forretningslogikken i backenden av systemet mitt. Dette lar meg gå inn i en kjørende applikasjon og prøve ut nye ting, trekke ut informasjon eller gjøre små oppdateringer -<strong> mens systemet fremdeles kjører.</strong></p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="600" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=14709904&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=14709904&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="400"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p>Man kan bruke dette konsollet til system-administrasjon i et produksjonssystem: istedet for å bygge tidkrevende web-admin-funksjonalitet i systemet ditt, så kan du la døra stå åpen for å ta de mer sjeldne oppgavene direkte i det interaktive konsollet. Bygg eventuelt web-UI for manglende ting dersom du ender med å gjøre samme oppgave om og om igjen på kommandolinja.</p>
<p>Dette shellet kan også brukes under utviklingsløpet for å se &#8220;hvordan ting arter seg&#8221; før man velger å forfølge noen bestemt løsningsretning med unit-tester, web-grensesnitt osv osv.</p>
<p>La oss flytte oss opp til frontend-utvikling. Når vi utvikler web-grensesnitt så har vi et annet interaktivt miljø vi kan bruke: Firebug-konsollet. Her er en liten demonstrasjon.</p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="600" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=14711715&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=14711715&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="400"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p>Dette var et veldig enkelt eksempel. Jeg bruker imidlertid samme teknikker når jeg jobber med mer komplekse webapplikasjoner: da bruker jeg hyppig konsollet for å prøve ut ting &#8220;live&#8221;.  Metodikker som f.eks testdrevet utvikling er flott for backend-utvikling, men i visuell/frontend-utvikling er det ofte vanskelig å lage programmatiske tester siden man ikke helt vet hvordan ting kommer til å se ut og oppføre seg i nettleseren. Kanskje vet du ikke engang helt &#8220;hva du leter etter&#8221; på forhånd? Da er det fint å kunne prøve seg fram litt før man skriver for mye kode.</p>
<p>Nå vet jeg hva du tenker. &#8220;Men Thomas, jeg har ikke lyst å sitte og skrive kode rett inn i disse kommandolinje-greiene. Jeg liker editoren min mye bedre!&#8221; Jeg forstår den innvendingen. Du kan eventuelt skrive koden i editoren og manuelt lime den inn på kommandolinja, men det er blir fort litt knotete. Vi har mer lyst til å arbeide i en skikkelig IDE, og sende kode derfra til det interaktive miljøet.  Vi skal se på et eksempel på slik arbeidsflyt i et språk som heter Clojure.</p>
<p>Clojure er et ungt, lovende programmeringsspråk. Det er bare noen år gammelt, men er bygget på moden teknologi. Clojure er implementert i Java, snakker pent med Java-biblioteker, og basert på LISP (en over 50 år gammel dialekt av programmeringsspråk). Det vi hittil har kalt &#8220;interaktive konsoller&#8221; blir ofte kalt Read-Eval-Print-Loops (REPL). Dette utrykket kommer opprinnelig fra LISP, som har hatt slike verktøy (og kultur for å bruke dem aktivt) i mange år.</p>
<p>La oss se på et eksempel i Clojure. Jeg holder meg i editoren min, og sender funksjoner og kommandoer til REPL-prosessen rett fra editoren min. I dette tilfellet bruker jeg dette til å jobbe smidig med 3d-grafikk (jeg er veldig uerfaren på dette området, og trenger derfor umiddelbar feedback på alt jeg gjør).  Klippet under starter med å demonstrere helt grunnleggende ting, så tar vi steget opp til grafikk-arbeid. Mot slutten implementerer jeg rendering av et veldig enkelt  Tetris-spill.</p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="600" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=14709925&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=14709925&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="400"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p><strong>Hva har vi sett så langt?</strong></p>
<p>Interaktiv programmering gir deg rask feedback. Det lar deg jobbe hurtigere, skrive mindre kode, lære og utforske, snakke direkte med kjørende systemer, og gjøre effektiv prototyping og visuell utvikling.</p>
<p>Nå tenker du kanskje: &#8220;jeg arbeider med Java til daglig, hvordan kan jeg bruke disse greiene til noe nyttig?&#8221; Vel, alle disse teknikkene kan brukes sammen med Java-kode.  Ruby kan kjøres på Java: JRuby er en moden platform som snakker pent sammen med Java-komponenter. JavaScript likeså: du kan enkelt kjøre JavaScript på serversiden som et interaktivt skall rundt applikasjonen din. Clojure er allerede bygd i, og beregnet for bruk sammen med, vanlig Java (3D-eksemplet ovenfor bruker allerede et Java-API for OpenGL-grafikk).</p>
<p>Det er derfor ikke mye som skal til for å få slike interaktive skall rundt din egen applikasjon. Kan du lukte mulighetene her?</p>
<p>Til slutt vil jeg gjerne at du tar en kikk på filmklippene under. De er eksempler på s.k. Livecoding, en aktivitet som ligger i skjæringspunktet mellom programmering og performance-kunst. Det som skjer i klippene under er at utvikleren koder opp improviserte algoritmer for lyd og musikk live foran publikum. Kanskje ikke nyttig umiddelbart nyttig for deg og meg, men det er et interessant eksempel på interaktiv programmering tatt til sin ytterste konsekvens.</p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="600" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2433947&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=2433947&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="400"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="600" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2502546&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=2502546&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="400"></embed></object><p><!-- End of Artiss Code Embed code -->
</p>
<h2>Referanser:</h2>
<p><a href="http://en.wikipedia.org/wiki/Read-eval-print_loop">A list of REPL environments</a></p>
<p><a href="http://tagaholic.me/2009/05/11/demystifying-irb-commands.html">Demystifying IRB commands (interactive Ruby)</a></p>
<p><a href="http://slash7.com/2006/12/21/secrets-of-the-rails-console-ninjas/">Secrets of the Rails Console Ninjas</a></p>
<p><a href="http://getfirebug.com/wiki/index.php/Console_Panel">The Firebug Console Panel</a></p>
<p><a href="http://clojure.org/getting_started">Clojure.org: &#8216;Getting started&#8217;</a></p>
<p><a href="http://technomancy.us/126">in which are found tricks of the trade concerning clojure authorship</a></p>
<p><a href="http://wiki.github.com/ztellman/penumbra/getting-started">Penumbra OpenGL framework: &#8216;Getting started&#8217;</a></p>
<p><a href="http://impromptu.moso.com.au/resources.html">Impromptu livecoding environment introduction</a></p>
<p><a href="http://impromptu.moso.com.au/gallery.html">Andrew Sorenson livecoding videos</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/09/09/interaktiv-programmering-utforsking-l%c3%a6ring-og-produktivitet/feed/</wfw:commentRss>
		<slash:comments>7</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>Lær deg et scriptspråk!</title>
		<link>http://sterkblanding.no/blog/2010/06/30/l%c3%a6r-deg-et-scriptsprak/</link>
		<comments>http://sterkblanding.no/blog/2010/06/30/l%c3%a6r-deg-et-scriptsprak/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 18:53:52 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=722</guid>
		<description><![CDATA[La oss si at du er en systemutvikler. Du er ansatt for din ekspertise i et av de &#8220;to store&#8221; applikasjonsspråkene &#8211; Java eller C#. Disse språkene kan brukes til svært mange oppgaver. Du kan teoretisk løse ethvert problem med dem, og de er sannsynligvis hovedgrunnen til at cv-en din er salgbar. Så hvorfor lære [...]]]></description>
			<content:encoded><![CDATA[<p>La oss si at du er en systemutvikler. Du er ansatt for din ekspertise i et av de &#8220;to store&#8221; applikasjonsspråkene &#8211; Java eller C#. Disse språkene kan brukes til svært mange oppgaver.  Du kan teoretisk løse ethvert problem med dem, og de er sannsynligvis hovedgrunnen til at cv-en din er salgbar. <strong>Så hvorfor lære noe mer enn Java eller C#?</strong></p>
<p>Jeg skal fortelle deg hvorfor du bør lære deg et s.k. scriptspråk. Scriptspråk har andre styrker enn Java og C#, og tilfører allsidighet og produktivitet til verktøyskuffen din. En kompetent håndtverker bruker mer enn hammer på jobb: skrutrekker, meisel og knipetang må også med.</p>
<p><span id="more-722"></span></p>
<p>Steve Yegge skrev for noen år siden en glimrende artikkel om hvordan han skiller gode utviklere fra svakere kandidater under jobbintervjuer <sup><a href="#yegge_article">[1]</a></sup>.  Et av poengene hans er at mange utviklere har en akilles-hel: det ene språket de mestrer er ikke ideellt til alle situasjoner. De er &#8220;<strong>one trick ponies&#8221;</strong>.</p>
<p>Her er et intervjuspørsmål som Yegge bruker til å teste kandidater:</p>
<blockquote><p>Last year my team had to remove all the phone numbers from 50,000<br />
Amazon web page templates, since many of the numbers were no longer in<br />
service, and we also wanted to route all customer contacts through a<br />
single page.</p>
<p>Let&#8217;s say you&#8217;re on my team, and we have to identify the pages having<br />
probable U.S. phone numbers in them. To simplify the problem slightly,<br />
assume we have 50,000 HTML files in a Unix directory tree, under a<br />
directory called &#8220;/website&#8221;. We have 2 days to get a list of file<br />
paths to the editorial staff. You need to give me a list of the .html<br />
files in this directory tree that appear to contain phone numbers in<br />
the following two formats: (xxx) xxx-xxxx and xxx-xxx-xxxx.</p></blockquote>
<p>Hvordan ville du løse dette problemet? Hint: Java og C# er ikke førstevalget til Steve, ei heller mitt. Du KAN løse dette og mange lignende problemer i Java eller C#, men et scriptspråk lar deg løse problemet raskere og mer elegant.</p>
<p><strong>Så hva er scriptspråk og hvorfor er de så nyttige?</strong> Jeg definerer kort og godt disse til å være <a href="http://www.ruby-lang.org/en/">Ruby</a>, <a href="http://www.python.org/">Python</a>, og <a href="http://www.perl.org/">Perl</a>. Alle tre er modne, populære språk. Det betyr ikke så mye hvilket av dem du lærer først: alle sammen deler de fleste av følgende styrker:</p>
<ul>
<li>Førsteklasses støtte for å manipulere tekster og filer.</li>
<li>Fungerer bra sammen med kommandolinje-verktøy og shellscripting, spesielt på unix-systemer.</li>
<li>Enkle å komme igang med. Vanligvis preinstallert på Unix, Linux og OS X-systemer.</li>
<li>Gode til proof of concepts og prototyper. Passer bra til å rask iterere frem og demonstrere konsepter.</li>
<li>Ypperlige til å automatisere oppgaver (f.eks scripting av operativsystemer, applikasjoner, byggeprosesser).</li>
<li>Er gjerne dynamisk typede språk, noe som lar deg bruke mindre tid på syntax og mer tid på selve oppgaven du skal løse. <sup><a href="#yegge_video">[2]</a></sup></li>
<li>Kan kjøre oppå, eller sammen med, de tyngre platformspråkene (se <a href="http://jruby.org/">JRuby</a>, <a href="http://ironruby.net/">IronRuby</a>). Best of both worlds!</li>
<li>Gir deg et nytt perspektiv på platformer og språk du allerede mestrer. Det er alltid nyttig å utvide horisontene sine! <sup><a href="#martin_video">[3]</a></sup></li>
</ul>
<p>Høres dette nyttig ut? <strong>Har du lyst til å lære mer? </strong>En god måte å komme igang på kan være å lese denne boka:</p>
<p style="text-align: center"><a href="http://pragprog.com/titles/bmsft/everyday-scripting-with-ruby"><img class="aligncenter size-full wp-image-733" src="http://sterkblanding.no/files/2010/06/rubyBookCover.jpg" alt="" width="300" height="300" /></a></p>
<p>eller denne:</p>
<p style="text-align: center"><a href="http://www.amazon.com/Python-Nutshell-Second-OReilly/dp/0596100469"><img class="aligncenter size-full wp-image-734" src="http://sterkblanding.no/files/2010/06/pythonBookCover.jpg" alt="" width="145" height="217" /></a></p>
<p>Sett deg så ned med et konkret prosjekt<strong>. </strong> Finn f.eks en &#8220;tidstyv&#8221; i hverdagen din &#8211; en rutine som kan automatiseres. Lag et script som løser problemet ditt.</p>
<p>Vips: fremtidig tid spart, og du har begynt å legge et <strong>nytt, kraftig verktøy</strong> i reportoaret ditt!</p>
<h2>Referanser:</h2>
<p>1) <a id="yegge_article" href="http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions">Yegges artikkel om intervju-spørsmål</a><br />
2) <a id="yegge_video" href="http://www.youtube.com/watch?v=tz-Bb-D6teE">Yegge om styrkene til scriptspråk/dynamiske språk (video)</a><br />
3) <a id="martin_video" href="http://www.akitaonrails.com/2010/06/16/railsconf-2010-video-interview-robert-martin-english">Robert &#8220;Uncle Bob&#8221; Martin om hvorfor du bør lære nye språk (video)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/06/30/l%c3%a6r-deg-et-scriptsprak/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sammen mot en enklere fremtid</title>
		<link>http://sterkblanding.no/blog/2010/06/02/enklere-fremtid/</link>
		<comments>http://sterkblanding.no/blog/2010/06/02/enklere-fremtid/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 06:00:05 +0000</pubDate>
		<dc:creator>Sondre Bjellås</dc:creator>
				<category><![CDATA[Brukervennlighet]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Risikostyring]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[Strategi]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=610</guid>
		<description><![CDATA[Kompleksitet er den viktigste årsaken til at IT-prosjekter feiler. Prosjekter som feiler og dårlig programvare gjør våre kunder og brukere ulykkelige. Hvorfor gjør vi IT-investeringer? Det handler om å redusere komplekse problemer til meningsfylte oppgaver som mennesker kan fullføre. Jeg ønsker å fokusere på utvikling av programvare (løsninger, pakkeprodukter, osv) og hvilken verdi programvare har [...]]]></description>
			<content:encoded><![CDATA[<p>Kompleksitet er den <a href="http://www.objectwatch.com/white_papers.htm#ITComplexity" target="_blank">viktigste årsaken</a> til at IT-prosjekter feiler. Prosjekter som feiler og dårlig programvare gjør våre kunder og <strong>brukere ulykkelige</strong>.</p>
<p>Hvorfor gjør vi IT-investeringer? Det handler om å <strong>redusere komplekse problemer</strong> til meningsfylte oppgaver som mennesker kan fullføre.</p>
<p><span id="more-610"></span></p>
<p>Jeg ønsker å fokusere på utvikling av programvare (løsninger, pakkeprodukter, osv) og hvilken verdi programvare har for våre brukere. Å bygge programvare er en av flere viktige funksjoner som vi gjør hos Steria, og det er tusenvis av andre som også bygger programvare for å løse utfordringer.</p>
<p>Undersøkelser har vist at vi ikke har hatt særlig forbedring i suksessraten i utviklingsprosjekter. Bransjen har ca. 30% suksess i prosjekter som starter opp, og slik har det vært siden 1996 i følge <a href="http://www.standishgroup.com/" target="_self">Standard Group</a> (CHAOS Report). Hvorvidt dette er representativt for det norske markedet er ukjent, men egne erfaringer fra Norge tilsier at det er en betraktelig høyere andel prosjekter med suksess her i landet, mye takket være smidige teknikker og prosesser.</p>
<h2>Programvarens lov</h2>
<p>I henhold til David S. Platts <a href="http://msdn.microsoft.com/en-us/magazine/ff646970.aspx" target="_blank">3 lover om programvare</a>, har programvaren vi bygger i seg selv ingen verdi. Det har liten betydning hvor teknisk bra kildekoden til et program er, det er kun vår egen mor som bryr seg om slikt.</p>
<p>Platts 3 lover sier:</p>
<ol>
<li><strong>Programvare har ingen verdi i seg selv</strong>. Den eneste verdien programvare har er gleden den gir til brukeren.</li>
<li><strong>Programvaren kan øke brukerens glede</strong> på en av to måter. Den kan hjelpe brukeren å fullføre en ønsket oppgave, eller den kan gi en god opplevelse. Eksempelvis hjelper Outlook med å lese og skrive epost, mens HALO på Xbox 360 gir deg en god opplevelse som er underholdende.</li>
<li><strong>Brukeren skal </strong><strong>ikke tenke på<span style="font-weight: normal"> </span>programvaren</strong>. Det viktigste er innholdet og oppgaven, ikke programvaren i seg selv.</li>
</ol>
<p>Målet med programvare bør alltid være å<strong> redusere komplekse problemer til </strong><strong>enkle oppgaver</strong>. Enkle oppgaver som mennesker kan utføre, uten at det krever mye tankearbeid. Desto mindre en bruker må tenke, desto mer glad og produktiv vil han bli.</p>
<h2>Tenke enkelt</h2>
<p>Når vi har et komplekst problem vi ønsker å løse, hvilke mekanismer pleier vi å benytte for å løse dem? Når vi ser på programvaren som har blitt utviklet opp igjennom årene, er det ganske klart at vi ikke tenker på å gjøre ting enkelt.</p>
<p>Vår forståelse av komplekse problemer øker desto mer vi jobber med dem. Men vi har problemer med å komme opp med enkle løsninger. Altfor ofte lager vi kompliserte løsninger for komplekse problemer. Dette må vi forsøke å unngå, for det er hovedårsaken til at utviklingsprosjekter feiler.</p>
<p><strong>Vi må sammen begynne å </strong><strong>tenke enklere.</strong> Vi må sammen utforske hvordan vi kan redusere komplekse detaljer i et løsningsdesign, helt til vi sitter igjen med et design som er så enkelt som overhodet mulig og fortsatt gir verdi til brukerne.</p>
<p>Vårt mål bør være: <strong>Lage en enklest mulig arkitektur</strong>.</p>
<p>Det er selvsagt mange årsaker hvorfor noe som starter enkelt, fort blir komplisert. En viktig faktor er mengden av funksjonalitet i en løsning. Robert L. Glass  skriver i boka &#8220;<a href="http://www.amazon.com/Facts-Fallacies-Software-Engineering-Robert/dp/0321117425">Facts and Fallacies of Software Engineering</a>&#8221; at <strong>25% økt funksjonalitet øker kompleksiteten med 100%</strong>.</p>
<p>Neste gang du står ovenfor et problem som noen ønsker løst ved hjelp av programvare, start med å tenke over brukerne og hvordan du kan øke deres glede. Deretter reduserer kompleksiteten i løsningsdesignet til du oppnår det enkleste designet som er mulig som fortsatt oppnår målet: <strong>Gjøre brukerne glade!</strong></p>
<p>(Se mitt innlegg om <a href="http://sondreb.com/blog/post/MSDN-Live-Solution-Architecture-Slides.aspx" target="_blank">løsningsarkitektur på MSDN Live</a> for mer detaljer om dette emnet)</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/06/02/enklere-fremtid/feed/</wfw:commentRss>
		<slash:comments>4</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>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>Slik forbereder og gjennomfører du et teknisk kurs</title>
		<link>http://sterkblanding.no/blog/2010/04/25/slik-forbereder-og-gjennomf%c3%b8rer-du-et-teknisk-kurs/</link>
		<comments>http://sterkblanding.no/blog/2010/04/25/slik-forbereder-og-gjennomf%c3%b8rer-du-et-teknisk-kurs/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 15:26:31 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Brukervennlighet]]></category>
		<category><![CDATA[Kursing]]></category>
		<category><![CDATA[Presentasjonsteknikk]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[kurs]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=387</guid>
		<description><![CDATA[Jeg holdt nylig en teknisk workshop for noen kollegaer, og forsøkte da å markedsføre, forberede og gjennomføre kurset på en hensiktsmessig måte. Her er noen prinsipper og teknikker som fungerer bra. Markedsføring Begynn med grunnleggende markedsundersøkelse. Hvem ønsker du å nå, og hva trenger de å lære om temaet ditt? Skriv  en velformulert invitasjon til [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg holdt nylig en <a href="http://sterkblanding.no/blog/2010/03/24/kom-igang-med-javascript/">teknisk workshop</a> for noen kollegaer, og forsøkte da å markedsføre, forberede og gjennomføre kurset på en hensiktsmessig måte. Her er noen prinsipper og teknikker som fungerer bra.</p>
<p><span id="more-387"></span></p>
<h2>Markedsføring</h2>
<p>Begynn med grunnleggende <strong>markedsundersøkelse</strong>. Hvem ønsker du å nå, og hva trenger de å lære om temaet ditt?</p>
<p><a href="http://sterkblanding.no/files/2010/04/admin-ajax.php_.jpeg"><img class="alignright" style="margin-left: 15px;margin-right: 15px" title="megafonMann" src="http://sterkblanding.no/files/2010/04/admin-ajax.php_.jpeg" alt="" width="320" height="213" /></a></p>
<p>Skriv  en velformulert invitasjon til kurset. Lag en skikkelig <em>pitch</em> &#8211; selg temaet ditt godt! Bruk grunnleggende <a href="http://www.amazon.com/22-Immutable-Laws-Marketing/dp/1861976100/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1271401727&amp;sr=8-1">prinsipper</a> fra <a href="http://www.amazon.com/Copywriters-Handbook-Third-Step-Step/dp/0805078045/ref=sr_1_3?ie=UTF8&amp;s=books&amp;qid=1271401787&amp;sr=1-3">markedsføring</a>: fortell hvorfor leseren skal bry seg (<em>benefits</em>) før du røper konkret pensum og detaljer for kurset (<em>features</em>).</p>
<p>Annonser kurset ditt i mange kanaler: email, sosiale medier, ansikt til ansikt. Jo fler fora jo bedre.</p>
<p>Sørg for at det er <strong>lett å melde seg på</strong>. Tenk på dette som å gjøre prospekter til kunder &#8211; gjør terskelen for &#8220;kjøp&#8221; så lav som mulig.</p>
<p>Nå strømmer forhåpentligvis påmeldingene inn. Bruk litt tid på å<strong> ta kontakt med hver deltaker</strong>. Gjør dette så tidlig som mulig. Send påmeldingsbekreftelse og ytterligere praktisk informasjon, og undersøk samtidig erfaringsnivået og forventningene til den enkelte &#8211; dette lar deg skreddersy innholdet i kurset.</p>
<h2>Planlegging og struktur</h2>
<p>Etter stegene ovenfor bør du ha et visst inntrykk av hvem som kommer til å dukke opp på workshopen. Generaliser denne informasjonen i <a href="http://www.stevebromley.com/blog/tag/persona/">personaer</a> &#8211; skal opplegget ditt passe for både <em>Programmerer Pia</em> og <em>Mellomleder Magnus?</em><br />
<a href="http://sterkblanding.no/files/2010/04/steinpaastein.jpg"><img class="alignleft" title="steinpaastein" src="http://sterkblanding.no/files/2010/04/steinpaastein.jpg" alt="" width="259" height="238" /></a></p>
<p><a href="http://sterkblanding.no/files/2010/04/steinpaastein.jpg"></a>Tenk grundig gjennom overordnet struktur og pensum. Brainstorm omfang og innhold for kurset med fleksible teknikker som <strong>whiteboard</strong>, <strong>skisser</strong> og <a href="http://en.wikipedia.org/wiki/Mind_map">tankekart</a>. Feiltrinn er enkle å fikse på dette stadiet; etter at du har begynt å implementere kurset blir de langt mer tidkrevende (akkurat som systemutvikling).</p>
<p><strong>Hvordan skal du lære bort?</strong> Dersom du har nok tid så bør du vurdere en kombinasjon av metoder. Litt foredrag, litt &#8220;tegn og fortell&#8221;, og rikelig med praktiske oppgaver. Hver person har sin egen måte å lære på, forsøk derfor å formidle materialet på flere måter for å treffe alle. Det gjør ikke noe at materialet derfor blir gjentatt; repetisjon hjelper folk å lære.</p>
<p>Presenter både grunnleggende fakta og relatert kontekst. Med andre ord, fortell både &#8220;hva er det?&#8221; og &#8220;hvorfor skal jeg bry meg?&#8221;. Mikro og makro.</p>
<p>Publikum kan ha varierende grad av erfaring og kunnskap om temaet du lærer bort. Forsøk i så fall å gi noe til både nybegynnerne og de erfarne elevene.</p>
<p>Jeg liker å starte med litt forelesning med praktiske demonstrasjoner underveis. Dette gir folk et fundament. Så bør folk få praktiske øvelser å jobbe med. <strong>Fortell, demonstrer, la folk prøve selv</strong>. (Resten av artikkelen antar at du følger dette formatet).</p>
<h2>Foredraget</h2>
<p>Start sterkt. Presenter en klar agenda &#8211; &#8220;hva skal vi lære idag, og hvorfor?&#8221; Bruk minimal tid på å introdusere deg selv; deltakerne er interessert i hva du ønsker å lære dem, ikke hvem du er.</p>
<p>Unngå foiler med masse tekst. <strong>Korte tekster</strong> er bra, enkeltord bedre, et enkelt illustrerende bilde er best. Kanskje du til og med slipper unna med å bare fortelle, dersom du gjør det tydelig nok?</p>
<p>Korte foiler er bedre enn tettskrevne. Så. Korte. Poenger. Som. Mulig. Hver foil fungerer da også som en veldig presis huskelapp for deg som forteller.</p>
<p>Foilene dine trenger ikke være kunstverk, men tenk litt <strong>grunnleggende grafisk design</strong>:</p>
<ul>
<li>Finn en generell stil på forhånd slik at materiellet blir så konsistent som mulig. Presenterer du samme type informasjon (eksempler, kode, lister&#8230;) gjentatte ganger? Lag da en konsekvent mal for hvordan disse foil-typene skal se ut. Kode bør f.eks alltid ha samme font og størrelse.</li>
<li>Bruk stor skrifttype. Velg farger som gir god kontrast mot hverandre. Hvordan kommer materialet ditt til å se ut når det projiseres på en hvit skjerm? I dagslys? Ti meter unna?</li>
<li>Bruk repetisjon. Innhold som gjentas er lettere å huske.</li>
<li>Bruk kontrast. Innhold som &#8220;hopper ut av siden&#8221; er minneverdig.</li>
<li>Bruk bilder av <a href="http://www.istockphoto.com/index.php">høy kvalitet</a>. Unngå kjedelig clip-art.</li>
<li>Skriv kortfattet tekst med mye whitespace rundt &#8211; la innholdet ditt &#8220;puste&#8221;.</li>
<li>Kutt ut standard-malene for powerpoint. Firmalogoer og andre grafiske snurredipperier er greit på introduksjonen og avslutningen av foredraget, men på resten av foilene medfører det bare visuelt støy.</li>
</ul>
<h2>Øvelsene</h2>
<p>Ta høyde for å bruke mye tid på å lage bra praktiske øvelser<strong>.</strong> Dette er noen poenger å tenke på:</p>
<ul>
<li>Øvelsene bør være enkle i starten. <strong>La eleven føle seg flink!</strong></li>
<li>Lag et bredt utvalg av oppgaver, og gjøre det mulig å løse dem i fri rekkefølge. En lang kjede av påbyggende oppgaver kan føre til at en feil i en tidlig øvelse ødelegger for eleven senere &#8211; i verste fall setter eleven seg helt fast. La eleven hoppe til en hvilken som helst annen øvelse når som helst.</li>
<li>Ta høyde for at folk har forskjellig erfaringsnivå og produktivitet. En måte å gjøre dette på er å legge til en &#8220;bonusoppgave&#8221; for de flinkeste i klassen på hver øvelse.</li>
<li><strong>Ikke krev at deltakerne skal forberede seg</strong> nevneverdig før kurset. Gjør det istedet enkelt å komme igang på selve workshopen. Tenk <a href="http://www.amazon.com/Design-Everyday-Things-Donald-Norman/dp/0465067107/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1271402199&amp;sr=1-1">brukeropplevelse</a>! For eksempel: dersom oppgavene krever programmering så bør du forsøke å gi et ferdig konfigurert utviklingsmiljø til eleven.</li>
<li>Anta i utgangspunktet at internett og intranett ikke er tilgjengelig, så slipper du å få ubehagelige overraskelser. Forsøk istedet å gi elevene alt de trenger for å komme igang på selve workshopen.</li>
<li>Sørg for at det er enkelt å distribuere ut handouts. Kjøp en haug usb-pinner, last inn filer på dem før kurset starter.</li>
</ul>
<h2>Siste forberedelser</h2>
<p>Når grunnleggende struktur og innhold er på plass bør du trene på stoffet og polere det ytterligere. <strong>Øving, forbedring, øving, forbedring.</strong> Iterer på innholdet flere ganger. Dette er som vanlig skriveprosess; hver gang du kommer tilbake til stoffet ditt med friske øyne så ser du ting som kan forbedres.</p>
<p>Forsøk å bli ferdig med det meste av forberedelser noen dager før kurset. Da gir du deg selv langt bedre margin for å avsløre og utbedre uventede mangler i opplegget ditt. Den siste kvelden før kurset passer best til rolig refleksjon og eventuell siste finpuss.</p>
<h2>D-dagen</h2>
<p>Møt opp tidlig. Undersøk kursrommet. Sett opp din egen pc og juster lysnivået i rommet &#8211; du har ikke lyst til å jakte etter kabler, lysbrytere og gardiner underveis i kurset.</p>
<p>Hils på folk etterhvert som de dukker opp. Prøv å få til litt småprat. Du ønsker å <strong>skape kontakt</strong> med deltakerne så tidlig som mulig, så tjuvstart med dette før selve kurset starter. Det er langt mindre skummelt å prate til en forsamling dersom du har noen kjente og vennlige ansikter i forsamlingen allerede.</p>
<p>Så kommer den utfordrende biten (iallfall for meg!): selve foredraget. Forsøk å være  avslappet og tydelig. Kontroller kroppsspråket ditt. Hold et rolig og jevnt tempo. Gjør som sangere og kamsportutøvere: bruk magen aktivt. <strong>Hent stemmen din dypt i magen, ikke øverst i halsen.</strong></p>
<p><a href="http://sterkblanding.no/files/2010/04/dirigent1.jpg"><img class="alignright size-full wp-image-409" style="margin-left: 15px;margin-right: 15px" title="dirigent" src="http://sterkblanding.no/files/2010/04/dirigent1.jpg" alt="" width="320" height="265" /></a></p>
<p>Besvar korte spørsmål underveis. Henvis lengre diskusjoner til oppsummeringen på slutten. Spesielt smale temaer kan eventuelt tas på tomannshånd etter kurset.</p>
<p><strong>Engasjer publikum</strong>. Still både retoriske og reelle spørsmål til rommet. La folk svare med håndsopprekning, individuelle svar eller gruppesamtaler. Oppfordre salen til å delta aktivt!</p>
<p>Del inn foredraget i <strong>korte sesjoner med hyppige pauser</strong> underveis, for eksempel en halvtime av gangen med fem minutter pause mellom. Gjør disse periodene enda kortere dersom rommet er smått og trangt; lav oksygentilførsel er ikke bra.</p>
<p>Vår oppmerksom på publikums reaksjon underveis, og tilpass tempo og innhold hvis nødvendig. Dersom tilskuerne kjeder seg bør du skynde deg til en mer spennende del av presentasjonen. Dersom de ser ut til å &#8220;falle av lasset&#8221; bør du senke tempoet og forklare tydeligere.</p>
<p>Gi folk<strong> handouts etter foredraget, ikke før</strong>. Du kjemper allerede om oppmerksomhet mot mange laptoper og mobiltelefoner i rommet, ikke undergrav deg selv ytterligere ved å gi ut lesestoff i tillegg. Fokus skal være på deg og hva du sier, ikke noen utskrifter du har delt ut.</p>
<p>Når de praktiske øvelsene starter bør du forsøke å aktivt sirkulere i rommet. Prat med deltakerne, sjekk hvordan det går med hver person/gruppe. Tilby hjelp hvis det er nødvendig. <strong>Vær tilstede som instruktør</strong>. Det er lett å stille spørsmål til deg hvis du er i nærheten og tydelig oppmerksom. En &#8220;fjern lærer bak et stort skrivebord&#8221; virker ikke like tilgjengelig.</p>
<p>Til slutt: be publikum om direkte tilbakemelding. Hva synes de kan bli bedre? Basert på dette, <strong>hold en enda bedre workshop neste gang</strong>! <img src='http://sterkblanding.no/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Referanser</h2>
<p><a href="http://www.amazon.com/Presentation-Zen-Simple-Design-Delivery/dp/0321525655/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1271425907&amp;sr=1-1">Presentation Zen</a> inneholder enkle tips rundt foredragsholding og slides-mekking.</p>
<p><a href="http://headrush.typepad.com/">Creating Passionate Users</a> er en fantastisk blogg om brukervennlighet og pedagogikk. Den oppdateres ikke lenger, men arkivene er en gullgruve.</p>
<p><a href="http://www.ted.com/">TedTalks</a> har masse eksempler på flinke foredragsholdere. Se og lær!</p>
<h2>Bidragsytere</h2>
<p>Takk til <a href="http://no.linkedin.com/in/sivfjellkarstad">Siv Fjellkårstad</a>, <a href="http://johannesbrodwall.com/">Johannes Brodwall</a> og<a href="http://no.linkedin.com/pub/markus-krüger/2/b2/892"> Markus Krüger, </a>som alle var så vennlige å dele av sine egne kurs-erfaringer!</p>
<p><em>Dette er et levende dokument. Kom gjerne med egne erfaringer i kommentarfeltet under &#8211; jeg fletter inn gode forslag i artikkelen.</em></p>
<p><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/04/25/slik-forbereder-og-gjennomf%c3%b8rer-du-et-teknisk-kurs/feed/</wfw:commentRss>
		<slash:comments>0</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>Kundens smidige manifest</title>
		<link>http://sterkblanding.no/blog/2010/03/18/kundens-smidige-manifest/</link>
		<comments>http://sterkblanding.no/blog/2010/03/18/kundens-smidige-manifest/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 09:08:52 +0000</pubDate>
		<dc:creator>Trond Wingård</dc:creator>
				<category><![CDATA[Samhandling]]></category>
		<category><![CDATA[Smidig]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=236</guid>
		<description><![CDATA[Hvordan ville det smidige manifestet ha sett ut dersom det var blitt skapt av kunder? Det smidige manifestet ble skapt av en gruppe svært talentfulle mennesker. Men alle sammen kom fra leverandørsiden av utviklingsprosjekter, noe som er tydelig allerede i den tredje av de fire verdiene: Samarbeid med kunden framfor kontraktsforhandlinger - som implisitt sier [...]]]></description>
			<content:encoded><![CDATA[<p>Hvordan ville det smidige manifestet ha sett ut dersom det var blitt skapt av kunder?</p>
<p><a href="http://www.agilemanifesto.org/">Det smidige manifestet</a> ble skapt av en gruppe svært talentfulle mennesker. Men alle sammen kom fra leverandørsiden av utviklingsprosjekter, noe som er tydelig allerede i den tredje av de fire verdiene:</p>
<p><em>Samarbeid med kunden framfor kontraktsforhandlinger</em></p>
<p>- som implisitt sier at &#8220;vi&#8221; ikke er kunden.</p>
<p>For å få ut de største gevinstene av smidige filosofier, må kundesiden også jobbe på en smidig måte. Dette betyr mer enn å skaffe en Produkteier som utviklerteamene kan jobbe med eller for. Kundesiden av prosjektet må jobbe ikke bare med utviklerne, men også med sin egen organisasjon og andre interessenter. Spesielt viktig er det at kundesiden av prosjektet må finne ut hvilke mål produktet må nå for å skape virkelig verdi for interessentene.</p>
<p>Så derfor lurer jeg på: Hvordan ville det smidige manifestet ha sett ut hvis det hadde blitt skapt av kunder i stedet for leverandører?</p>
<p><span id="more-236"></span>Her er resultatet av mitt lille tankeeksperiment.</p>
<h2>Smidige verdier</h2>
<p>Vi oppdager stadig bedre måter å utvikle systemer på, både ved å gjøre det selv og ved å hjelpe andre. Derved har vi lært oss å verdsette:</p>
<ul>
<li>Individer og samspill framfor prosesser og verktøy</li>
<li>Fungerende system framfor utførlig dokumentasjon</li>
<li>Å levere verdi til interessenter framfor å fullføre funksjonalitet</li>
<li>Samarbeid med leverandør og egen organisasjon framfor kontraktsforhandlinger</li>
<li>Å reagere på endringer framfor å følge en plan</li>
</ul>
<h2>Smidige prinsipper</h2>
<p>(Merk: Nedenfor har jeg inkludert de original prinsippene, men uthevet de nye forslagene, slik at du enkelt kan se likhetene og forskjellene. Den norske oversettelsen av originalprinsippene er forøvrig basert på en <a href="http://forum.smidig.no/forums/6/topics/575?page=1#posts-2401" target="_blank">diskusjon</a> på <a href="http://forum.smidig.no/" target="_blank">smidig</a><a href="http://forum.smidig.no/" target="_blank">.no-forum</a>.)</p>
<p>Vi følger disse prinsippene:</p>
<ul>
<li>(NY)<br />
<strong>Det hjelper ikke å gjøre tingene riktig hvis vi ikke gjør de riktige tingene. Vi må jobbe kontinuerlig med organisasjonen vår og med sluttbrukerne for å finne ut hva som er de riktige tingene.</strong></li>
<p></p>
<li>Vår høyeste prioritet er å tilfredsstille kunden gjennom å levere et verdifullt, kjørende system tidlig og hyppig.<br />
<strong>Vår høyeste prioritet er å skape verdi for interessentene gjennom tidlige og hyppige leveranser av programvare.</strong></li>
<p></p>
<li>Ønsk endringer i krav velkommen, også sent i utviklingen. Smidige prosesser utnytter endringer til å gi kunden konkurransefortrinn.<br />
<strong>Ønsk endringer i krav velkommen, også sent i prosjektet. Smidige prosesser utnytter endringer til å gi organisasjonen vår konkurransefortrinn.</strong></li>
<p></p>
<li>Lever fungerende programvare hyppig, fra et par uker til et par måneder, med preferanse for den korte enden av skalaen.<br />
<strong>Lever verdifulle løsninger hyppig, fra et par uker til et par måneder, med preferanse for den korte enden av skalaen.</strong></li>
<p></p>
<li>Forretningssiden og utviklere må jobbe sammen daglig gjennom hele prosjektet.<br />
<strong>Jobb sammen med interessentene og utviklerne kontinuerlig gjennom hele prosjektet.</strong></li>
<p></p>
<li>Bygg prosjektene rundt motiverte individer. Gi dem det miljøet og den støtten de trenger, og stol på at de får jobben gjort.<br />
<strong>Bygg prosjektene rundt motiverte individer. Gi dem det miljøet og den støtten de trenger, og stol på at de får jobben gjort.</strong></li>
<p></p>
<li>Den mest effektive metoden for å formidle informasjon til og innen et utviklingsteam, er å snakke ansikt-til-ansikt.<br />
<strong>Den mest effektive kommunikasjonsformen er å snakke ansikt til ansikt mens dere visualiserer samtaleemnet på papir eller tavle. Bruk andre former kun når tilleggsverdien er større enn tilleggskostnaden.</strong></li>
<p></p>
<li>Kjørende system er det primære målet på framdrift.<br />
<strong>Verdi realisert av interessentene er det primære målet på framdrift.</strong></li>
<p></p>
<li>Smidige prosesser fremmer bærekraftig utvikling. Sponsorene, utviklerne og brukerne bør kunne opprettholde et konstant tempo i ubegrenset tid.<br />
<strong>Smidige prosesser fremmer bærekraftig utvikling. Interessentene og utviklerne bør kunne opprettholde et konstant tempo i ubegrenset tid.</strong></li>
<p></p>
<li>Kontinuerlig fokus på teknisk kvalitet og godt design fremmer smidighet.<br />
<strong>Kontinuerlig fokus på høy teknisk kvalitet fremmer smidighet.</strong></li>
<p></p>
<li>Enkelhet – kunsten å maksimere mengden arbeid som ikke gjøres – er essensielt.<br />
<strong>Enkelhet – kunsten å maksimere mengden arbeid som ikke gjøres – er essensielt.</strong></li>
<p></p>
<li>De beste arkitekturene, kravene og designene vokser fram fra selv-organiserende team.<br />
<strong>De beste løsningene oppstår i selv-organiserende teams med klare mål.</strong></li>
<p></p>
<li>Med jevne mellomrom reflekterer teamet over hvordan det kan bli mer effektivt, og justerer arbeidsmåten sin tilsvarende.<br />
<strong>Med jevne mellomrom reflekterer alle involverte over hvordan de kan bli mer effektive, og justerer arbeidsmåten sin tilsvarende.</strong></li>
</ul>
<h2>Oppsummerende ord</h2>
<p>Jeg har holdt meg tett opp til de originale verdiene og prinsippene &#8211; kanskje for tett. Å ligge opptil originalen kan ha verdi &#8211; på en måte gir det kunde- og leverandørsiden en tydelig felles plattform. Dessverre det kan også bety at jeg overser noe viktig. Men det er ikke meningen her å skrive et helt nytt manifest (hvordan skulle jeg kunne det?), men heller leke rundt med &#8220;hva om&#8230;&#8221; og kanskje få fram noe verdifullt om likhetene og forskjellene mellom utvikleres og kunders perspektiv.</p>
<p>Hva synes du?</p>
<p>(takk til Johannes, Eli og Simen for innsikter og forslag som gjorde denne artikkelen bedre)</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/03/18/kundens-smidige-manifest/feed/</wfw:commentRss>
		<slash:comments>3</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>Smidig brukervennlighet</title>
		<link>http://sterkblanding.no/blog/2010/01/29/smidig-brukervennlighet/</link>
		<comments>http://sterkblanding.no/blog/2010/01/29/smidig-brukervennlighet/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 13:24:11 +0000</pubDate>
		<dc:creator>Ram Yoga</dc:creator>
				<category><![CDATA[Brukervennlighet]]></category>
		<category><![CDATA[Smidig]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=119</guid>
		<description><![CDATA[Vi lo godt da vi leste denne stripa. Den setter fingeren på både sannheter, usannheter og fordommer. Alle som har jobbet i systemutviklingsprosjekter vil nok kjenne seg igjen her. Vår påstand er at de som kjenner seg mest igjen er de som ikke har jobbet med brukersentrerte designere eller smidige utviklere. I stripa er kulturforskjellene [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_122" class="wp-caption alignnone" style="width: 570px"><a href="http://sterkblanding.no/files/2010/01/LUNCH_060.png"><img class="size-full wp-image-122   " title="LUNCH_060" src="http://sterkblanding.no/files/2010/01/LUNCH_060.png" alt="Lunch #60, Copyright: Børge Lund. Bilde brukt med tillatelse fra opphavspart." width="560" height="197" /></a><p class="wp-caption-text">Lunch #60, Copyright: Børge Lund. Bilde brukt med tillatelse fra opphavspart (klikk for større versjon).</p></div>
<p>Vi lo godt da vi leste denne stripa. Den setter fingeren på både sannheter, usannheter og fordommer.</p>
<p>Alle som har jobbet i systemutviklingsprosjekter vil nok kjenne seg igjen her. Vår påstand er at de som kjenner seg mest igjen er de som <em>ikke </em>har jobbet med brukersentrerte designere eller smidige utviklere.</p>
<p><span id="more-119"></span>I stripa er kulturforskjellene tydelige ved første øyekast. Det er ikke alle som ser verdien av å gå pent kledd på jobb, for eksempel. Den stereotype utvikleren går i en nerdete t-skjorte fra ThinkGeek, mens designeren går med moteriktige briller og skulderveske. Designere er kun opptatt av overflaten og skal ha vetorett på alt som angår brukergrensesnittet (designeren vet selvfølgelig best). Utviklerne hater selvfølgelig designerne fordi de vet best selv. Og utviklerne bryr seg ikke om slike uviktige detaljer som brukergrensesnitt. Ikke har de stilsans heller. Men de viktige problemene kommer med tankesettet. De andre er alt for opptatt med noe som de tror er et viktig fundament for systemet, men som egentlig ikke har noe å gjøre med det som skal lages.</p>
<p>Slik er det lett å bli selvhøytidelig og ikke se verdien av hverandre. Er det noe både utvikleren og designeren faktisk har til felles er det en tendens til å kunne oppleves som primadonnaer av andre på prosjektet. Vår erfaring er at de begge ønsker å lage et godt system &#8211;  de bare angriper dette på forskjellige måter og fokuserer på forskjellige ting.</p>
<p>Stereotypen av det konfliktfylte forholdet mellom designere og utviklere er noe vi har opplevd på kroppen. Det er slitsomt og lite konstruktivt. Men vi har også opplevd konstruktivt arbeid der vi lærer av hverandre. Vår erfaring er at vi sammen blir sterkere.</p>
<p>&#8220;Moderne&#8221; brukersentrerte designere og &#8220;smidige&#8221; utviklere har fokus på hva som gir verdi for brukeren av systemet; begge er opptatt av feedback som gir innsikt; begge er opptatt av kvalitet. Og de har gjerne forskjellig fokus som gir grunnlag for læring og kreativitet.</p>
<p>En designers styrke er å se det som skal leveres i den sammenhengen det skal brukes. En utvikler er opptatt av hvordan man kan bygge systemet. En designer som ikke skjønner utviklerens perspektiv har ingen måte å få gjort sine ideer virkelige på. En utvikler som ikke skjønner designerens perspektiv har ingen måte å vite hva han <em>egentlig </em>skal lage.</p>
<p>Brukersentrerte designere ønsker å lage de beste løsningene som er mulig, med de ressursene som er tilgjengelig. Gode designere jobber hardt for å forstå hvem brukerne er og hva behovene deres <em>faktisk </em>er. De må ha en visjon for systemets brukeropplevelse. Selv om designeren er den som formidler denne visjonen, er det ikke designerens visjon alene. Den er utviklet i samarbeid med utviklere, prosjektledere, brukere og andre interessenter.</p>
<p>Den moderne trenden blant utviklere er smidige metoder som Scrum, Lean og Extreme Programming. Felles for smidige metoder er at de er opptatt av konkrete resultater av arbeidet. Da er det essensielt å ha forståelse for hvem som mottar disse resultatene.</p>
<p>Fellesnevneren for disse metodene er at de innser at man må forstå hele problemet for å kunne lage en god løsning. Problemforståelsen starter alltid med å forstå hvem som får verdi av systemet og hva denne verdien består i. En naiv innfallsvinkel kan stoppe ved kunden (produkteier) som betaler for prosjektet. I stedet foreslår vi å observere <em>brukerne </em>av systemet.</p>
<p>For å få bygget opp forståelsen har brukersentrert design en verktøykasse der et av de viktigste verktøyene er brukerintervjuer. Under et brukerintervju setter vi oss ned og snakker med de som faktisk skal bruke systemet. Poenget er å bygge opp forståelsen for de underliggende verdiene systemet kan løse, ikke bare de observerte symptomene. For eksempel kan vi bruke noen dager til å lytte på henvendelsene fra publikum til saksbehandlerne som skal bruke systemet. Da kan vi identifisere de vanligste problemområdene.</p>
<p>Smidige metoder benytter brukerhistorier til å definere arbeidsoppgaver. Essensielt for brukerhistorier er at man beskriver hvem som er interessert i funksjonen som skal lages og hvilken verdi den gir. For eksempel &#8220;for å kunne forklare hva jeg får i pensjon, som en pensjonist ønsker jeg at saksbehandleren får en grafisk sammenstilling av alle mine pensjonsytelser.&#8221; Dette er en av flere maler som brukes til å skrive brukerhistorier, og den er på formen &#8220;<em><strong>for </strong>å oppnå en forretningsverdi, <strong>som </strong>interessent<strong> ønsker jeg at </strong>bruker får en funksjon</em>&#8220;.</p>
<p>Brukerorientert design gir verktøyene for å skaffe innsikt i brukernes behov. Smidige metoder gir verktøyene for å levere et system som oppfyller disse behovene. Design uten utvikling er lammet, utvikling uten design er blind.</p>
<p>Sammen blir vi sterkere. La fordommene falle!</p>
<p>To teknikker vi mener du bør prøve:</p>
<ul>
<li>Brukerhistorier</li>
<li>Brukerintervjuer</li>
</ul>
<p><em>Denne artikkelen er resultatet av samarbeid mellom Ram (designer) og </em><em>Johannes (utvikler).<br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/01/29/smidig-brukervennlighet/feed/</wfw:commentRss>
		<slash:comments>3</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>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>

