<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>blog.iterate.no</title>
	<atom:link href="http://blog.iterate.no/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.iterate.no</link>
	<description>Om realisering av forretningsidéer, systemutvikling, integrasjon, brukeropplevelse og andre livsviktige temaer for de ansatte i Iterate</description>
	<lastBuildDate>Tue, 24 Jan 2012 14:44:54 +0000</lastBuildDate>
	<language>no</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.iterate.no' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>blog.iterate.no</title>
		<link>http://blog.iterate.no</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.iterate.no/osd.xml" title="blog.iterate.no" />
	<atom:link rel='hub' href='http://blog.iterate.no/?pushpress=hub'/>
		<item>
		<title>Innovasjon i større organisasjoner</title>
		<link>http://blog.iterate.no/2012/01/24/innovasjon-i-storre-organisasjoner/</link>
		<comments>http://blog.iterate.no/2012/01/24/innovasjon-i-storre-organisasjoner/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 14:44:50 +0000</pubDate>
		<dc:creator>Tom Johannes Bang</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.iterate.no/?p=858</guid>
		<description><![CDATA[Mange større bedrifter har innovasjon høyt på agendaen og streber etter å øke sin innovasjonsstyrke. Det viser seg imidlertid vanskelig, hvor utfordringen hos mange ligger i selve bedriftskulturen. Innovasjon handler om evnen til å fornye og tilpasse produkter, tjenester, prosesser etc for å være konkurransedyktige i sitt marked. De fleste er enige om at det [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=858&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Mange større bedrifter har innovasjon høyt på agendaen og streber etter å øke sin innovasjonsstyrke. Det viser seg imidlertid vanskelig, hvor utfordringen hos mange ligger i selve bedriftskulturen. Innovasjon handler om evnen til å fornye og tilpasse produkter, tjenester, prosesser etc for å være konkurransedyktige i sitt marked. De fleste er enige om at det finnes bedre og mer helhetlige måter å drive innovasjon og verdiskapning, men har vanskeligheter for å finne de rette virkemidlene for å få det til å skje i praksis. <strong>Så hva skyldes dette?</strong></p>
<p>Det viser seg at problemet delvis ligger fundert i frykten for å miste kontrollen (eller følelsen av å ha kontroll). De selskapene som har lykkes med innovasjon har bygget hele sin bedriftskultur hvor det å lære, samt validere læringen, er den viktigste styringsparameteren. De har bygget en lærende organisasjon. <strong>Hva skal til for å bygge en lærende organisasjon?</strong><strong><br />
</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/billigereogbedre.wordpress.com/858/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/billigereogbedre.wordpress.com/858/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/billigereogbedre.wordpress.com/858/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/billigereogbedre.wordpress.com/858/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/billigereogbedre.wordpress.com/858/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/billigereogbedre.wordpress.com/858/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/billigereogbedre.wordpress.com/858/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/billigereogbedre.wordpress.com/858/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/billigereogbedre.wordpress.com/858/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/billigereogbedre.wordpress.com/858/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/billigereogbedre.wordpress.com/858/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/billigereogbedre.wordpress.com/858/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/billigereogbedre.wordpress.com/858/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/billigereogbedre.wordpress.com/858/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=858&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.iterate.no/2012/01/24/innovasjon-i-storre-organisasjoner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/db89640f93254f313e78138ae5383f01?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">tomjohannesbang</media:title>
		</media:content>
	</item>
		<item>
		<title>Den nakne sannheten om IT-prosjekter (Del II)</title>
		<link>http://blog.iterate.no/2012/01/19/den-nakne-sannheten-om-it-prosjekter-del-ii/</link>
		<comments>http://blog.iterate.no/2012/01/19/den-nakne-sannheten-om-it-prosjekter-del-ii/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 09:10:10 +0000</pubDate>
		<dc:creator>Tom Johannes Bang</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.iterate.no/?p=832</guid>
		<description><![CDATA[Som jeg lovet i DEL I, så skulle jeg dele mine erfaringer om hvorfor det er viktig å gjøre kunden god i egen organisasjon. Jeg skal også røpe noen ukonvensjonelle triks som viser hvordan du gjør dette mest effektivt. Det vil hjelpe om vi ser dette i kontekst av tradisjonelle IT-prosjekter. Eksempelvis betyr dette at [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=832&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Som jeg lovet i DEL I, så skulle jeg dele mine erfaringer om hvorfor det er viktig å gjøre kunden god i egen organisasjon. Jeg skal også røpe noen ukonvensjonelle triks som viser hvordan du gjør dette mest effektivt.</p>
<p>Det vil hjelpe om vi ser dette i kontekst av tradisjonelle IT-prosjekter. Eksempelvis betyr dette at kundens prosjektleder eller produkteier, som har fått et leveranseansvar internt, vet at det egentlig kun er TO ting som betyr noe; at det leveres &#8220;noe&#8221; til avtalt tid og budsjett. Resten er i praksis underordnet.</p>
<p>Jeg kunne godt skrevet et helt blogginnlegg om hvor UENIG jeg er i den tradisjonelle prosjektmodellen, hvor leverandør setter nytt system i produksjon og overleverer til linjen i mottagende organisasjon. Faktum er at en denne modellen virker mot sin hensikt som er å oppnå en definert forretningsmessig verdiøkning. Men, det får vi diskutere en annen gang. Tilbake til dagens tema&#8230;</p>
<p>DEL II</p>
<p><strong>Som konsulent har du et ansvar for å gjøre kunden god i egen organisasjon</strong></p>
<p>Husker du historien om <a href="http://blog.iterate.no/2012/01/03/den-nakne-sannhet-om-it-prosjekter-del-1/">da jeg skulle kjøpe meg nye ski</a> fra del 1 av denne bloggserien? (hvis ikke kan det være greit å friske opp minnet før du leser videre). Hva nå om jeg skulle kjøpe ski til kona. Med bestilling fra kona.</p>
<p>Hva ville en dårlig selger gjort? For det første så ville han ikke brydd seg om å finne ut hva dine reelle behov er (og i de fleste tilfeller så vet vi jo knappt det selv). Deretter ville han spurt deg hvilke type ski og merke du har tenkt deg. Hvis du i beste fall er så ærlig at du innrømmer å ikke helt vite det selv, så har man fortsatt en liten sjanse for at vedkommende innser at han må tilkalle forsterkninger. I realiteten ender man som regel med at selgeren finner frem 2-3 vilkårlige alternativer som du presenteres. Dette hjelper ikke særlig.</p>
<p>Hva gjør en god selger? Han får tankene dine bort fra pris og fokuserer på at utstyret skal passe med ditt behov og ønskede kjøreopplevelse. Det er tross alt det du vil huske resten av sesongen (prisen husker du i verste fall frem til neste lønning eller skitur).</p>
<p>Denne historien handler ikke om hvorvidt selgeren er sleip og har et underliggende ønske om å prakke på deg mest mulig. Den handler om konsekvensene av å føye seg etter kunden for å fremstå &#8220;hyggelig&#8221; i stedet for å gjøre kunden en ordentlig tjeneste og lære han mer om sine egne behov og presentere noen relevante løsningsalternativer. Hvis noen kommer og spør om råd, så er det som oftest fordi man trenger rådgivning. Anta da ikke at vedkommende kjenner alle sine behov. POENGET her er om man klarer å finne en løsning som vil fungere &#8211; for kona &#8211; på sikt. Det er stor fallhøyde for meg som &#8220;kundens prosjektleder&#8221; om man ikke lykkes.</p>
<p>Dersom kjøreopplevelsen for kona ikke er god i det lange løp pga skivalget, så hjelper det ikke lenger om skiene hadde riktig farge eller var billige nok i utgangspunktet. Opplevelsen går fra god til dårlig. Vi klarer ikke å gjøre kunden god i egen organisasjon hvis de alltid må gå fra gode til dårlige nyheter.</p>
<p><strong>Bygg så store buffere du kan, men ikke si noe til kunden</strong><br />
De færreste produkteiere eller andre kunderepresentanter har noen formening om hvor lang tid det tar å implementere funksjon x og funksjon y. Hva det koster. En målsetning er da at man unngår å gå fra et estimat til et høyere tall i faktisk forbrukt tid. Det beste du kan gjøre &#8211; for begge parter &#8211; er å legge til grunn et best mulig rasjonale for ditt høyeste estimat.</p>
<p>Selv om kunden er aldri så misfornøyd med tallet du presenterer (fordi de hadde håpet at det skulle være lavere) så vil man med større trygghet kunne forklare i sin egen rapport til intern ledelse hvorfor dette er slik (intern ledelse har heller ingen forutsetning for å vite hva funksjonen koster, men forholder seg naturlig nok til budsjettet eller tidligere estimater).</p>
<p>Skulle du være så &#8220;snill&#8221; å gi kunden det laveste estimatet, så er risikoen langt større for at det kommer ubehagelige overraskselser senere. Ingen liker å gå fra gode nyheter til dårligere nyheter. Alle liker å gå fra dårlige nyheter (høyt estimat) til bedre nyheter (levert under estimat). Skulle det vise seg at de dårlige nyhetene (høyt estimat) forblir dårlige nyheter (leveres på tid), så har man med tiden vent seg til tanken. Det gjør ikke så vondt lenger.</p>
<p>Bare tenk dere forskjellen på om man i første scenario kommuniserer et &#8220;snilt&#8221; estimat på 50 timer, hvorpå sluttresultatet blir 75 timer. I scenario to argumenterer du først for et estimat nærmere 100 timer, hvorpå endelig forbrukt tid ender på 75 timer.  Hva er å foretrekke?</p>
<p><strong>Det er konsulentens ansvar å lære opp kunden<br />
</strong>Man kan ikke forvente at kunden som til vanlig jobber med et helt annet domene, skal vite hvordan et komplekst system som IT-utvikling må håndteres. Som proffesjonelle utøvere innenfor utvikling av IT-løsninger, må vi bistå en kunde og deres organisasjon konsekvensene av sine valg (både fordeler og ulemper).</p>
<p>Hvorfor skal vi alltid starte med å sende ut minst fem endringsmeldinger i løpet av de to første ukene i et fastprisprosjekt? Det er for å lære kundene effekten og resultatet av å &#8220;sikre seg&#8221; gjennom fastpris-avtaler. Gjør man ikke dette, så vil man for det første ende opp med at kunden ikke forstår at det koster å omprioritere ofte (det er krevende å endre kontekst ofte).I tillegg er det viktig at alle parter forstår hvordan den underliggende konsekvensen av å kjøre fastpris-prosjekter er at a) kunden ikke blir så opptatt av hva som er innenfor eller utenfor omfanget og b) leverandøren blir veldig opptatt av å ikke inkludere mer enn nødvendig i kravene. Og tilslutt endre man opp med å bruke altfor mye tid på å diskutere hva som er utenfor og innenfor oppdraget&#8230;</p>
<p>I smidige prosjekter sier man at man omfavner endringer. Det betyr ikke at det er uten kostnad å omprioritere og bytte kontekst ofte. Grunntanken her er at man ikke skal låse seg til en detaljert krav-/løsningsspesifikasjon gjennom et prosjekt.</p>
<p><strong>Vi har alle behov for å føle oss trygge<br />
</strong></p>
<p>Uansett hvilken stilling og rolle vi har fått i samfunnet, så har vi alle de samme grunnleggende behovene. Det må vi aldri glemme.Helt avslutningsvis har jeg valgt å sitere et utdrag fra en av mine tidligere bloggartikler (og starten på noe som kan bli en bok en dag), &#8220;<a href="http://blog.iterate.no/2011/10/03/it-doesn%C2%B4t-really-matter-if-you-agree/">People. Culture. Fire. A gut feeling.</a>&#8220;:</p>
<blockquote><p><em><strong>&#8220;As a human being I am filled with emotions. Sometimes I laugh. Sometimes I cry. Sometimes I get upset, even though I´m not sure why. Sometimes I can´t control my emotions. Sometimes my pride gets in my way – in everyone’s way. Please don´t fight me. Try to see my perspective. Help me, and I will want to help you. I´m only human.&#8221;</strong></em></p></blockquote>
<p>I DEL III vil jeg dele mine erfaringer fra hvordan vår streben etter å føle kontroll og måten vi organiserer oss i realiteten undergraver vår evne til å optimalisere helheten og nå våre mål.</p>
<p style="text-align:center;"><a href="http://billigereogbedre.files.wordpress.com/2012/01/20110711-poppies4.jpg"><img class="aligncenter  wp-image-846" title="20110711-poppies" src="http://billigereogbedre.files.wordpress.com/2012/01/20110711-poppies4.jpg?w=480&#038;h=310" alt="" width="480" height="310" /></a></p>
<p>Bang</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/billigereogbedre.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/billigereogbedre.wordpress.com/832/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/billigereogbedre.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/billigereogbedre.wordpress.com/832/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/billigereogbedre.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/billigereogbedre.wordpress.com/832/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/billigereogbedre.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/billigereogbedre.wordpress.com/832/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/billigereogbedre.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/billigereogbedre.wordpress.com/832/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/billigereogbedre.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/billigereogbedre.wordpress.com/832/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/billigereogbedre.wordpress.com/832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/billigereogbedre.wordpress.com/832/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=832&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.iterate.no/2012/01/19/den-nakne-sannheten-om-it-prosjekter-del-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/db89640f93254f313e78138ae5383f01?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">tomjohannesbang</media:title>
		</media:content>

		<media:content url="http://billigereogbedre.files.wordpress.com/2012/01/20110711-poppies4.jpg" medium="image">
			<media:title type="html">20110711-poppies</media:title>
		</media:content>
	</item>
		<item>
		<title>Den nakne sannhet om IT-prosjekter (del 1)</title>
		<link>http://blog.iterate.no/2012/01/03/den-nakne-sannhet-om-it-prosjekter-del-1/</link>
		<comments>http://blog.iterate.no/2012/01/03/den-nakne-sannhet-om-it-prosjekter-del-1/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 20:49:31 +0000</pubDate>
		<dc:creator>Tom Johannes Bang</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.iterate.no/?p=823</guid>
		<description><![CDATA[Om PROSJEKTSTYRING som du ikke lærer på kurs eller leser om i bøker Hvorfor skriver jeg denne serien med blogginnlegg om prosjektstyring? Fordi jeg ønsker å dele egne erfaringer og høre andres synspunkter om den underliggende psykologien i IT-prosjekter, og årsakssammenhenger som man ikke lærer om på kurs eller i bøker, men som er realiteten. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=823&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Om PROSJEKTSTYRING som du ikke lærer på kurs eller leser om i bøker</strong></p>
<p>Hvorfor skriver jeg denne serien med blogginnlegg om prosjektstyring?</p>
<p>Fordi jeg ønsker å dele egne erfaringer og høre andres synspunkter om den underliggende psykologien i IT-prosjekter, og årsakssammenhenger som man ikke lærer om på kurs eller i bøker, men som er realiteten. IT-prosjekter er som egne økosystemer hvor vi må evne å gjøre bærekraftig for å lykkes. Vi må forstå hvordan enkeltelementene i dette systemet gjensidig påvirker hverandre og hva som optimaliserer helheten (understøtter primærmålet).</p>
<p>Skjønner vi dette så vil vi også i større grad evne å skape bærekraftige endringer i organisasjoner, men vi må gjøre det i små steg &#8211; hver dag (Kaizen).</p>
<p>Det er noe av det samme som <a href="https://twitter.com/#!/jurgenappelo">Jurgen Appelo</a> tar opp i sin nye bok <a href="http://www.management30.com/book/">Management 3.0</a>, når han snakker om &#8220;Complexity theory&#8221; som bl.a handler om å forstå kompleksiteten i å lede endring i en organisasjon eller blant en gruppe mennesker.</p>
<p>Husk å dele dine erfaringer og synspunkter som kommentar til denne artikkelen når du er ferdig!</p>
<div id="attachment_824" class="wp-caption alignleft" style="width: 556px"><a href="http://billigereogbedre.files.wordpress.com/2012/01/lyngsalpene.jpg"><img class="wp-image-824  " title="lyngsalpene" src="http://billigereogbedre.files.wordpress.com/2012/01/lyngsalpene.jpg?w=546&#038;h=185" alt="Skikjørere i Lyngsalpene" width="546" height="185" /></a><p class="wp-caption-text">Skikjørere på vei opp mot en av toppene i Lyngsalpene</p></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>DEL I</p>
<p><strong>&#8220;Vi styrer våre egne valg&#8221; &#8211; en sannhet med modifikasjoner</strong><br />
Jeg går inn i en sportsbutikk og skal kjøpe nye ski til skisesongen. På vei inn minner jeg meg selv på mitt &#8220;budsjett&#8221;.</p>
<p>Selgeren sier: &#8211; <em>Hei, hva kan jeg hjelpe deg med?</em></p>
<p>Jeg sier: &#8211; <em>Jeg skal ha nytt alpinutstyr. Sånne carvingski. De gamle fungerer ikke så bra lenger (Jeg tenker: &#8220;De er ikke ødelagt eller noe, men jeg føler ikke akkurat at jeg følger med i utviklingen&#8221;)</em></p>
<p>Selgeren sier: &#8211; <em>Det finnes ulike alternativer, som varierer litt i pris ift behov og ønsket kjøreopplevelse. Fra kr 4000 til kr 10 000. Hvor mye kjører du? Mest off piste eller i preparert løype?</em></p>
<p>Jeg sier: &#8211; <em>Ja, skjønner. (Jeg tenker: &#8220;Det eneste jeg skjønner er at jeg må revurdere budsjettet mitt.&#8221;). Jeg kjører mest i bakke, men også en del off piste (Jeg tenker: &#8220;I realiteten har jeg hatt 3-4 turer i sesongen de siste 5-6 årene, hvor jeg kun ved to tilfeller har kjørt i løssnø, som skyldtes at preppemaskinen ikke hadde kjørt bakken ennå. &#8220;)</em></p>
<p>Selgeren sier: &#8211; <em>Hvis skal kjøre mest i preparert løype, så vil jeg anbefalle disse skiene. Bestselger, som også fungerer fint om det er litt løsnø i bakken. Ikke fullt så bra om du skal gå mye toppturer med pudderkjøring. Skiene koster kr 4999, men vi har de også i et pakketilbud med støvler, bindinger og staver til kr 8 900. Vi har solgt masse av disse. Jeg kjører selv på fjorårsmodellen og hadde en sinnsyk god opplevelse i de franske alpene. Da har du utstyr i mange år fremover. Aksel Lund Svindal kjører med samme merket.</em></p>
<p>Jeg sier: <em>(Jeg tenker: &#8220;Aksel Lund Svindal &#8211; kult!. Det må jeg bare fortelle gutta! Han sa jo også at det var en bestselger. Nå må jeg bare ikke virke for ivrig. Prute litt&#8221;). Det var litt stiv pris, synes jeg.</em></p>
<p>Selgeren sier: &#8211; <em>Vi har også andre ski som er på tilbud. Bl.a et par fra en modell som utgikk i fjor.</em></p>
<p>Jeg sier: &#8211; <em>Men, som du sier så vil jeg ha utstyret i mange år fremover. (Din rasjonelle hjernehalvdel rettferdiggjør valget og valget ditt bør fremstå veloverveid.). Det er greit. Jeg tar dem. Ha´kke tid til å stå her. Må komme meg ut i pudderet, vet du! (Jeg tenker: &#8220;Pudder? Takket jeg ikke nettopp ja til ski som var best egnet i preparert løype?…&#8221;). Takk for hjelpen!</em></p>
<p>Denne historien illustrerer i hvor stor grad den emosjonelle delen av hjernen vår påvirker våre valg. Det meste handler om det vi opplever som &#8220;magefølelsen&#8221; (som egentlig er <a href="http://en.wikipedia.org/wiki/Limbic_system">Det Limbiske System</a> i hjernen som driver følelser og oppførsel hos mennesker) og gir oss en sterk indikasjon på hva vi virkelig ønsker, mens vårt rasjonelle &#8220;jeg&#8221; febrilsk jobber med å rettferdiggjøre valget. Dette betyr i praksis at vi er mer opptatt av hva andre mener om oss, enn resultatene vi skaper. Det er et helt grunnleggende og naturlig instinkt for de fleste av oss.</p>
<p><strong>Hva gjør en god konsulent her?</strong></p>
<p>Det er ikke selgeren som tar valget, han bare legger frem alternativene så jeg skal kunne gjøre det beste valget utifra mine behov. Problemet oppstår så snart jeg ikke helt vet hva mine behov er. Kanskje burde jeg lånt med meg to par ski og kjørt dem en uke, for så å kjøpe paret som fungerte best i &#8220;produksjon&#8221;?</p>
<p><strong></strong>En virkelig god selger ville foreslått nettopp utlån av ski, for å sikre at jeg gjorde et godt valg.</p>
<p>Denne problemstillingen er velkjent når man jobber med produktutvikling og er nærmere utredet i artikkelen om &#8220;<a href="http://blog.iterate.no/2011/12/13/the-user-feedback-problem/" target="_blank">The User Feedback Problem</a>&#8220;</p>
<p>Hovedpoenget mitt her er at vi må bedre forstå det underliggende behovet hos våre kunder. Vi må både forstå hva bedriften trenger, samtidig som vi forstår hva kundens produkteier eller prosjektleder trenger for å gjøre gode valg. Forstå hvilket enormt press det innbærer å stå mellom leverandøren og sin egen ledelse. Det holder ikke å bare avfeie folk med &#8220;Å, de skjønner jo ingenting!&#8221;.</p>
<p>Hvis kunden forstår hvorfor og selv kan ta nødvendige valg fordi vi er flinke til å presentere valgalternativene med fordeler og ulemper, så blir det enklere å forsvare det mot egen styringsgruppe eller ledelse. Da er også sannsynligheten større for at man vil se på arbeidet som vellykket fordi man tok det beste valget i rådende situasjon (man hadde tross alt ikke noen bedre alternativer).</p>
<p>Som konsulent så forplikter du å gjøre mer enn &#8220;jobben din&#8221;, om det være seg programmere, designe eller å teste. Du forplikter å gjøre kundens jobb så enkel som mulig. Husk at det er ikke engang sikkert vedkommende har bedt om å bli prosjektleder eller produkteier for et IT-prosjekt (i tillegg til jobben i linja). Ta ansvar og bry dere om hverandre. Vi er ikke roboter, men mennesker med kjøtt, blod og følelser &#8211; masse følelser.</p>
<p>Hvilke tanker vekker dette hos deg?</p>
<p>&nbsp;</p>
<p>Neste gang skal jeg ta utdype dette som er din viktigste oppgave som konsulent, rådgiver eller leverandør; nemlig å gjøre kunden god i egen organisasjon.</p>
<p>&nbsp;</p>
<p>Bang</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/billigereogbedre.wordpress.com/823/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/billigereogbedre.wordpress.com/823/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/billigereogbedre.wordpress.com/823/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/billigereogbedre.wordpress.com/823/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/billigereogbedre.wordpress.com/823/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/billigereogbedre.wordpress.com/823/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/billigereogbedre.wordpress.com/823/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/billigereogbedre.wordpress.com/823/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/billigereogbedre.wordpress.com/823/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/billigereogbedre.wordpress.com/823/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/billigereogbedre.wordpress.com/823/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/billigereogbedre.wordpress.com/823/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/billigereogbedre.wordpress.com/823/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/billigereogbedre.wordpress.com/823/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=823&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.iterate.no/2012/01/03/den-nakne-sannhet-om-it-prosjekter-del-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/db89640f93254f313e78138ae5383f01?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">tomjohannesbang</media:title>
		</media:content>

		<media:content url="http://billigereogbedre.files.wordpress.com/2012/01/lyngsalpene.jpg" medium="image">
			<media:title type="html">lyngsalpene</media:title>
		</media:content>
	</item>
		<item>
		<title>The splendid long iterations</title>
		<link>http://blog.iterate.no/2011/12/22/the-splendid-long-iterations/</link>
		<comments>http://blog.iterate.no/2011/12/22/the-splendid-long-iterations/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 19:45:59 +0000</pubDate>
		<dc:creator>Anders Haugeto</dc:creator>
				<category><![CDATA[Lean]]></category>
		<category><![CDATA[Metodikk]]></category>

		<guid isPermaLink="false">http://blog.iterate.no/?p=790</guid>
		<description><![CDATA[Some times, we want longer iterations. We waste to much time in meetings and other activities associated with iteration turnovers, so we decide to extend the duration of the iteration. Let&#8217;s make those planning meetings, estimation workshops, retrospectives and what-have-you happen less frequently. We might even get some work done, right? Sadly, longer iterations don&#8217;t [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=790&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Some times, we want longer iterations.</p>
<p>We waste to much time in meetings and other activities associated with iteration turnovers, so we decide to extend the duration of the iteration. Let&#8217;s make those planning meetings, estimation workshops, retrospectives and what-have-you happen less frequently. We might even get some work done, right?</p>
<p>Sadly, longer iterations don&#8217;t change how customers interact with us. We continue to get expedite requests, like having to fix a bug (which obviously shouldn&#8217;t have been there in the first place). Now that iterations are longer, we appear less responsive to our customers, which of course wasn&#8217;t the idea at all. To compensate, we could introduce mid-iteration releases?</p>
<p>Moreover, with longer iterations management feels less in control, because feedback is less frequent, and problems seem to pile up more now than before. That wasn&#8217;t the idea in the first place, so they feel compelled to introduce stricter reporting. How about a mid-iteration report?</p>
<p>Finally we get to the iteration turnover. We have experienced flow and feel great, except lack of coordination within and between teams makes our stuff not work that well together when we integrate. We decide to talk more. So we introduce a regular integration planning meeting with the other development teams. Would twice each iteration do?</p>
<p>Making iterations longer can be comfortable for a while. It feels better to work longer periods at a time undisturbed, and it feels better to spend our working time developing as opposed to attending meetings.</p>
<div id="attachment_807" class="wp-caption alignright" style="width: 310px"><a href="http://billigereogbedre.files.wordpress.com/2011/12/eternity-love-calvin-klein-adv.jpg"><img class="size-medium wp-image-807 " title="eternity-love-calvin-klein-adv" src="http://billigereogbedre.files.wordpress.com/2011/12/eternity-love-calvin-klein-adv.jpg?w=300&#038;h=205" alt="" width="300" height="205" /></a><p class="wp-caption-text">What&#039;s the scent of your learning cycle?</p></div>
<p>Longer iterations are however nothing more than a dangerous painkiller, which conceals the real problems we have. Double the iteration length, and iteration turnover gets four times as painful and half as useful. The reasons we have iterations in the first place is to create learning opportunities. Why would we want less of them when we could have more?</p>
<p>Longer iterations create room for more waste, forcing us into compensations that drive more compensations. We get iterations within iterations. We get wasteful reporting. We get less coordinated and produce more bugs. We stop doing retrospectives because we don&#8217;t have time to follow up on the resulting action points anyway. The resulting problems call for more meetings, and we get tempted to extend the iterations even further, which makes iteration turnovers even more painful. In the end we&#8217;re so sick of iterations that we start longing for waterfall.</p>
<p>Taiichi Ohno, the great engineer and systems thinker at Toyota had a helpful analogy about rocks and water. Imagine your process being a river with rocks on the bottom. The water is our level of comfort, and the rocks are everything which we shouldn&#8217;t be doing. Ohno calls them waste, which he defines as everything we do that doesn&#8217;t bring value to the customer. When the water level is high, we hardly see any rocks, hence the only way to find waste is to lower the water level. In other words, make ourselves less comfortable.</p>
<p>How does this translate to the pain of iteration turnovers? We do more of it. We have those turnovers so frequently that we have no other choice but to get good at it. In other words: When iteration turnovers are painful, we make the iteration duration <em>shorter</em>.</p>
<p>Here&#8217;s a question to ask our team: What would it take to go to half the iteration length, while keeping our current velocity?</p>
<p>We would have to make meetings shorter and more efficient. We would have to reduce the defect rate. We would have to make deployments faster. We would have to stay coordinated at all times, both within and between teams. We would have to follow up rigorously on action points from retrospectives.</p>
<p>That&#8217;s when we stop curing symptoms and start acting on root causes of problems. That&#8217;s when we start doing continuous process improvement.</p>
<p>That&#8217;s when we want even shorter iterations.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/billigereogbedre.wordpress.com/790/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/billigereogbedre.wordpress.com/790/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/billigereogbedre.wordpress.com/790/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/billigereogbedre.wordpress.com/790/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/billigereogbedre.wordpress.com/790/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/billigereogbedre.wordpress.com/790/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/billigereogbedre.wordpress.com/790/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/billigereogbedre.wordpress.com/790/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/billigereogbedre.wordpress.com/790/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/billigereogbedre.wordpress.com/790/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/billigereogbedre.wordpress.com/790/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/billigereogbedre.wordpress.com/790/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/billigereogbedre.wordpress.com/790/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/billigereogbedre.wordpress.com/790/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=790&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.iterate.no/2011/12/22/the-splendid-long-iterations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/394bb536deda5b78a5a4818d73e0e901?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">andershaugeto</media:title>
		</media:content>

		<media:content url="http://billigereogbedre.files.wordpress.com/2011/12/eternity-love-calvin-klein-adv.jpg?w=300" medium="image">
			<media:title type="html">eternity-love-calvin-klein-adv</media:title>
		</media:content>
	</item>
		<item>
		<title>The user feedback problem</title>
		<link>http://blog.iterate.no/2011/12/13/the-user-feedback-problem/</link>
		<comments>http://blog.iterate.no/2011/12/13/the-user-feedback-problem/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 19:21:44 +0000</pubDate>
		<dc:creator>Anders Haugeto</dc:creator>
				<category><![CDATA[Lean]]></category>
		<category><![CDATA[Metodikk]]></category>

		<guid isPermaLink="false">http://blog.iterate.no/?p=741</guid>
		<description><![CDATA[If you&#8217;re into agile, you&#8217;ve probably encountered this question: If iterating over user feedback is so fundamentally important, how come Apple has repeated success with their apparent one-off, non-iterative, grandiose launches of new products? Agile skeptics love this argument. To them it&#8217;s a once for all win over advocates of frequent releases. They probably feel [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=741&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re into agile, you&#8217;ve probably encountered this question: If iterating over user feedback is so fundamentally important, how come Apple has repeated success with their apparent one-off, non-iterative, grandiose launches of new products?</p>
<div class="wp-caption alignleft" style="width: 342px"><img src="http://sanatas.com/howto/wp-content/uploads/2011/05/04390.jpg" alt="" width="332" height="249" /><p class="wp-caption-text">Is this the place for user feedback? (I told you once)</p></div>
<p>Agile skeptics love this argument. To them it&#8217;s a once for all win over advocates of frequent releases. They probably feel like Michael Palin in his surreal Monthy Python sketch with John Cleese, where they enthusiastically have an argument about whether they have an argument. Desperately fighting and imminent defeat after failing to stop arguing when &#8220;time&#8217;s up&#8221;, Cleese responds &#8220;I might be arguing on my spare time&#8221;, to Palin&#8217;s pointing-in-your-face-gotcha-finger.</p>
<p>&#8220;No you&#8217;re not&#8221;. &#8220;Yes I am&#8221;. &#8220;No you&#8217;re not&#8221;. &#8220;Yes I am&#8221; &#8230;</p>
<p>Similar surreal arguments happen in software companies. There are always someone who doesn&#8217;t want to go into production in short, regular intervals, and there are always someone who wants it.</p>
<p>So what&#8217;s Apple doing? Iterating on their spare time? Maybe the rest of us should look to Apple and grant the skeptics right. Stop nagging ourselves with those tedious deployments, not to mention the even more tedious user feedback. We&#8217;re talented developers, trained professionals, experienced craftsmen &#8211; let&#8217;s go with our vision and gut feelings just like Jobs did!</p>
<p>Both within the agile community and other places I encounter this misunderstanding disturbingly frequently. Moving on from the triumphant Apple argument, the skeptics continue: Users lack fantasy. They don&#8217;t know what they want, and will ask for solutions within a narrow mindset framed by whatever it is they use today. Henry Ford nailed it forever with his famous quote: &#8220;If I had asked people what they wanted, they would have said faster horses.&#8221;</p>
<p>This is where I think things get tricky: In a sense the skeptics are both right and wrong. It&#8217;s true that users lack imagination and even lie some times. Hence, they are right that we shouldn&#8217;t ask users what they want. They are however wrong about not frequently releasing to production.</p>
<p>The fact that users don&#8217;t know what they want is no excuse not to iterate.</p>
<p>We should still interact with our users &#8211; and we should use our software as medium. First and foremost we must have empathy with our users. We need to fundamentally understand them, better than they understand themselves. If we do ask users questions, we don&#8217;t ask about features. We ask how they feel when logging into their computer. We ask what&#8217;s their favorite software, and why. We ask why they are using our product.</p>
<div id="attachment_743" class="wp-caption aligncenter" style="width: 580px"><a href="http://billigereogbedre.files.wordpress.com/2011/12/user-feedback-problem-001.png"><img class=" wp-image-743" title="user-feedback-problem.001" src="http://billigereogbedre.files.wordpress.com/2011/12/user-feedback-problem-001.png?w=570&#038;h=378" alt="" width="570" height="378" /></a><p class="wp-caption-text">When iterating cleverly we&#039;re somewhere in the middle. (Comic: Calvin &amp; Hobbes)</p></div>
<p>From this insight we might get tons of ideas for features. We verify them one at a time, quickly. We refine them and verify the refinements in a tight build-measure-learn loop: Cut a feature into the thinnest slice possible, and deploy it. Monitor what happens. Deploy two different versions of the same feature and monitor what happens. Pull a feature which is hardly used and see what happens.</p>
<p>What&#8217;s interesting about this approach, is that neither the overacting agile crowd, nor the agile skeptics will agree with you. To them you&#8217;re either not listening to your users, or you&#8217;re letting them dictate a product without direction. (Thanks to <a href="http://www.threeriversinstitute.org/blog/">Kent Beck</a> for this perspective).</p>
<p>From Eric Ries book <a href="http://theleanstartup.com/">The Lean Startup</a>: <em>We really did have customers in those early days &#8211; true visionary early adopters &#8211; and we often talked to them and asked for their feedback. But we emphatically did not do what they said. We viewed their input as only one source of information about our product and overall vision. In fact, we were much more likely to run experiments on our customers than we were to cater to their whims.</em></p>
<p>In the Scrum world there is a lot of discussion about a Definition of Done. Jeff Sutherland has a long list of steps that need to be carried out before a task is done. To me he&#8217;s missing the most important part: That you&#8217;re not done with a feature until you&#8217;ve analyzed the behavior of paying customers using it.</p>
<p>Focus groups, user dialog, staged usability tests in artificial environments and situations can all be sources of insight, but they can also be deceiving. The Proof of the Pudding is in the production usage data. Hence we should develop a way to quickly try out features, gather usage statistics, opinions and other knowledge. It might also be a good idea to recap statistics classes from the university days, make A/B-testing easy, and if your product is in the public, use sites like <a href="http://usertesting.com">usertesting.com</a>.</p>
<p>I don&#8217;t believe Apple isn&#8217;t iterating. Having hardware products they cannot iterate like a software company. Having a marketing strategy which builds up hype around spectacular launches calls for subtlety. But you don&#8217;t really think they came up with all those products without seeking insight into their users?</p>
<p>Arguments shouldn&#8217;t be about whether we release frequently or not. It should be about how we do it. So if you haven&#8217;t already, I encourage you to start a discussion with your team about sources of insight into users, tools for gathering such insight and what iterative strategy would support this.</p>
<p>You will be innovating before you know it.</p>
<p>@hauge2</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/billigereogbedre.wordpress.com/741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/billigereogbedre.wordpress.com/741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/billigereogbedre.wordpress.com/741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/billigereogbedre.wordpress.com/741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/billigereogbedre.wordpress.com/741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/billigereogbedre.wordpress.com/741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/billigereogbedre.wordpress.com/741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/billigereogbedre.wordpress.com/741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/billigereogbedre.wordpress.com/741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/billigereogbedre.wordpress.com/741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/billigereogbedre.wordpress.com/741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/billigereogbedre.wordpress.com/741/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/billigereogbedre.wordpress.com/741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/billigereogbedre.wordpress.com/741/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=741&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.iterate.no/2011/12/13/the-user-feedback-problem/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/394bb536deda5b78a5a4818d73e0e901?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">andershaugeto</media:title>
		</media:content>

		<media:content url="http://sanatas.com/howto/wp-content/uploads/2011/05/04390.jpg" medium="image" />

		<media:content url="http://billigereogbedre.files.wordpress.com/2011/12/user-feedback-problem-001.png" medium="image">
			<media:title type="html">user-feedback-problem.001</media:title>
		</media:content>
	</item>
		<item>
		<title>Getting Started with Amazon Web Services and Fully Automated Resource Provisioning in 15 Minutes</title>
		<link>http://blog.iterate.no/2011/12/02/getting-started-with-amazon-web-services-and-fully-automated-resource-provisioning-in-15-minutes/</link>
		<comments>http://blog.iterate.no/2011/12/02/getting-started-with-amazon-web-services-and-fully-automated-resource-provisioning-in-15-minutes/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 16:03:45 +0000</pubDate>
		<dc:creator>Jakub Holý</dc:creator>
				<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[ec2]]></category>

		<guid isPermaLink="false">http://blog.iterate.no/?p=668</guid>
		<description><![CDATA[While waiting for a new project, I wanted to learn something useful. And because on many projects we need to assess and test the performance of the application being developed while only rarely there is enough hardware for generating a realistic load, I decided to learn more about provisioning virtual machines on demand in the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=668&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>While waiting for a new project, I wanted to learn something useful. And because on many projects we need to assess and test the performance of the application being developed while only rarely there is enough hardware for generating a realistic load, I decided to learn more about provisioning virtual machines on demand in the Cloud, namely <a href="http://aws.amazon.com/">Amazon Web Services</a> (AWS). I&#8217;ve learned a lot about the tools available to work with AWS and the automation of the setup of resources (machine instances, security groups, databases etc.) and automatic customization of virtual machine instances in the AWS cloud. I&#8217;d like to present a brief introduction into AWS and a succinct overview of the tools and automation options. If you are familiar with AWS/EC2 then you might want to jump over the introduction directly to the automation section.</p>
<p><span id="more-668"></span></p>
<h2>Why AWS?</h2>
<p>Amazon is a leading provider of &#8220;infrastructure as a service&#8221; and is constantly adding new services to its offerings. AWS allow you to create virtual machines on demand, load balance them, connect them to a &#8220;database as a service&#8221; (with several advantages over a manually managed database) and various other services such as notifications, e-mail, and a queuing service. You get access to built-in monitoring and you can deploy applications to their &#8220;platform as a service&#8221; built on top of that while retaining control over those lower-level resources.</p>
<p>Follow the <a href="http://aws.typepad.com/aws/">official AWS Blog</a> to be informed of new services, features etc.</p>
<h2>Getting started with AWS</h2>
<p>To <a href="https://www.amazon.com/ap/signin/177-1403391-6765917?_encoding=UTF8&amp;openid.assoc_handle=aws&amp;openid.return_to=https%3A%2F%2Faws-portal.amazon.com%2Fgp%2Faws%2Fdeveloper%2Fregistration%2Findex.html%2F177-1403391-6765917&amp;openid.mode=checkid_setup&amp;openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&amp;openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&amp;openid.pape.max_auth_age=600&amp;siteState=awsMode%3A%3Aregistration%3A%3AheaderMessage%3A%3AAmazon%20Web%20Services%20Sign%20Up%3A%3A&amp;pageId=aws.ssop&amp;openid.pape.preferred_auth_policies=http%3A%2F%2Fschemas.openid.net%2Fpape%2Fpolicies%2F2007%2F06%2Fmulti-factor-physical&amp;marketplaceId=ATVPDKIKX0DER&amp;accountStatusPolicy=P1&amp;openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&amp;openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&amp;authCookies=1">create an AWS account</a> you&#8217;ll need a phone and a credit card (which will be charged if you use any of the paid services or exceed any of the free usage limits). Be careful during the sign-up process as the UI isn&#8217;t exactly error-proof. It might take up to two hours before your account becomes fully functional.</p>
<p>The next thing to do is to browse through the <a href="aws.amazon.com/console/">AWS Management Console</a>, which let you create and configure various services and resources, the most interesting being the Elastic Compute Cloud (EC2), where you can start new virtual machines. The management console is quite self-explanatory though not as user-friendly as I might wish. You might want to check these screenshots showing <a href="http://code.google.com/p/xebia-france/wiki/MonitoringOpenSourceJMeter">how to create an EC2 instance</a> in the Management Console.</p>
<h3>Brief Overview</h3>
<p>The core rule of AWS is that you only pay for what you use, i.e. runtime hours of your instances and the traffic &#8211; see the <a href="http://calculator.s3.amazonaws.com/calc5.html">AWS Simple Monthly Calculator</a>.</p>
<p>The most important resource is <strong>EC2</strong> as it allows you to create virtual machines, called &#8220;instances.&#8221; There are different <a href="http://aws.amazon.com/ec2/instance-types/">types of instances</a> regarding their memory and computational power. By default they are transient and discarded (terminated) once you stop using them. You may also have an instance backed by the Elastic Block Storage (EBS) which enables you to stop and start the instance again with any state and changes preserved, Amazon charges $0.10/GB/month for that. You can also mount EBS storage as a volume to your instance if you need to persist only some data. There is no quick way to re-create a terminated instance, you have to go through the wizard again &#8211; that&#8217;s where the command-line tools and automation become handy.</p>
<p>When setting up your EC2 instances, you&#8217;ll likely also need to assign them into the same security group and configure what ports are open to whom in the security group (by default you cannot even SSH in).</p>
<p>If you want to learn all about EC2, go to the <a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/">Amazon EC2 User Guide</a>.</p>
<p>Aside of EC2 there are also many other interesting services such as the Elastic Beanstalk (PaaS, currently for Java webapps, using Tomcat), the distributed storage S3 etc. There are also some additional services such as the Amazon <a href="http://aws.amazon.com/cloudwatch/">CloudWatch</a>, which is a (performance) monitoring tool for your AWS infrastructure. (Which can be complemented by <a href="http://newrelic.com/about/partners/amazon-web-services">New Relic</a> monitoring for even more insight into the application.)</p>
<h2>Leveraging the Amazon Free Tier</h2>
<p>Amazon provides new customers with a <a href="http://aws.amazon.com/free/">certain amount of resources for free</a> for one year, you only need to pay if you consume more than that. It includes for example a non-stop running micro EC2 instance backed by EBS (i.e. it is persistent, you can stop and start it again), 15 GB traffic, 10 GB of EBS storage, 5 GB of S3 storage, 10 CloudWatch metrics etc. It unfortunately doesn&#8217;t include the Amazon-managed MySQL/Oracle database (<a href="http://aws.amazon.com/rds/">RDS</a>) though they provided 1GB of space in the Amazon <a href="http://aws.amazon.com/simpledb/">SimpleDB</a> (a NoSQL key-value store).</p>
<p>This means that you can have a constantly running EC2 Micro instance (613 MB memory) for free. You can use it as your base in the cloud, for example because the traffic between two EC2 instances is faster/cheaper and because it has full access to machines within the same security group.</p>
<p>The best choice is likely to base your instance on the <a href="http://aws.amazon.com/amazon-linux-ami/">Amazon Linux AMI</a>, which is a variation of RedHat Linux optimized for AWS, equipped with most of the AWS API command-line tools and CloudInit for automated system setup (described later). I&#8217;d recommend you to browse through the <a href="http://ec2-downloads.s3.amazonaws.com/AmazonLinuxAMIUserGuide.pdf">user guide</a> that describes what tools are available and how to use CloudInit.</p>
<h2>What about Automation?</h2>
<p>The AWS Management Console is great if you do something for the first time but the wizards are too time-consuming for repeated tasks. Especially if you need to set up more than a single instance &#8211; let&#8217;s say a RDS database instance, an EC2 machine instance and the corresponding security groups or a number of identical instances. We will look into ways how to automate this.</p>
<p>Aside of setting up the infrastructure, you usually also need to customize the EC2 instances (at least by installing and starting the software you need them for). You can log into them via SSH but wouldn&#8217;t it be great to be able to automate that, especially if you need multiple similar instances?</p>
<p>Notice that I&#8217;m now concerned only with automating the work of the AWS user. It is also possible to configure AWS to <a href="http://aws.amazon.com/autoscaling/">automatically start new EC2 instances</a> when needed (e.g. when the load exceeds a limit) but that is a different story.</p>
<p>Overview:</p>
<ul>
<li>Infrastructure provisioning automation:</li>
<ul>
<li>AWS API command-line tools (or AWS Java API or third-party tools/libraries)</li>
<li>AWS CloudFormation</li>
</ul>
<li>Instance OS &amp; SW setup automation:</li>
<ul>
<li>Canonical CloudInit (Ubuntu and Amazon Linux AMIs) &#8211; perhaps leveraging Puppet or Chef</li>
<li>Creating a customized AMI</li>
</ul>
</ul>
<h3>Automating Infrastructure Provisioning</h3>
<p>There are two prominent options for creating your EC2 instances and other resources without the AWS Management Console: AWS API command-line tools and AWS CloudFormation.</p>
<h4>AWS API command-line tools</h4>
<p>Amazon offers command-line tools for most of its services such as EC2 and RDS.</p>
<p><strong>EC2</strong>: Robert Sosinovski published very good instructions for <a href="http://www.robertsosinski.com/2008/01/26/starting-amazon-ec2-with-mac-os-x/">starting with Amazon EC2 command-line tools</a> (which isn&#8217;t specific to Mac OS X despite its title) back in 2008 but they are still valid so just follow them, there is no point in repeating them here (basically download, unpack, set environment variables, provide credentials). Alternatively, you can go to the <a href="aws.amazon.com/developertools/351">download page</a> and follow the <a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?SettingUp_CommandLine.html">official instructions</a>. I&#8217;d recommend you to create a folder to include all the tools =&gt; $AWS_FOLDER/ec2/ etc. instead of ~/.ec2/.</p>
<p>If you want to use another AWS region than the default us-east-1 then you need to set also the environmental variable EC2_URL, see the list of <a href="http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html#ec2_region">regional endpoints</a> or the command <em>ec2-describe-regions</em>. Ex. (my URL has ec2 in the middle contrary to the list of endpoints but evidently it works too):</p>
<p><pre class="brush: bash;">export EC2_URL=https://eu-west-1.ec2.amazonaws.com</pre></p>
<p><strong>Authentication setup for the other tools</strong>: While the documentation for the EC2 tools describes only authentication via the X.509 certificate (environmental variables EC2_PRIVATE_KEY, EC2_CERT), the other tools (at least RDS, CloudFormation) support uniform authentication via the environmental variable AWS_CREDENTIAL_FILE pointing to a file containing your AWS Access Key Id and Secret Key (which you can find in your <a href="aws.amazon.com/account">AWS account</a> under Security Credentials &#8211; Access Keys), the configuration is described in the tools&#8217; readme files.</p>
<p><strong>RDS</strong>: Setup of the RDS command-line tools is quite similar to EC2, just <a title="RDS tools download page" href="http://aws.amazon.com/developertools/2928">download them</a> and add environmental variables as described in the included readme.txt.</p>
<p>As with EC2, you may want to change your default <a href="http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html#rds_region">RDS region</a>:</p>
<p><pre class="brush: bash;">export RDS_URL=https://eu-west-1.rds.amazonaws.com</pre></p>
<h5>Examples from the Vaadin Test Setup</h5>
<p>My original plan was to try the performance testing described in <a href="https://vaadin.com/wiki/-/wiki/Main/Vaadin Scalability Testing with Amazon Web Services">Vaadin Scalability Testing with Amazon Web Services</a>, which unfortunately proved to be impossible because the test application failed to run. During the process I&#8217;ve automated the individual setup steps, shown below. You may want to check the blog post to understand the context.</p>
<p>I didn&#8217;t need to create a security group and allow access to it via the command-line as I&#8217;ve done it via the Management Console. You could open the SSH port as follows:</p>
<p><pre class="brush: bash;">ec2-authorize  -p 22</pre></p>
<p>Create two EC2 instances:</p>
<p><pre class="brush: bash;">ec2-run-instances ami-1a0f3d6e -t m1.large -k VaadinAS --instance-count 2 -z eu-west-1c -g quick-start-1</pre></p>
<ul>
<li>-k specifies the name of an existing key-pair (the Management Console offers you to create it the first time you create an instance) that will be associated with the instance to make ssh login without a password possible</li>
<li>-z specifies the availability zone (AZ) within the region (you can see the available ones when creating an instance in the Mgmt Console), it&#8217;s likely better to have all resources in the same AZ</li>
<li>-g specifies an existing security group (again created in the Console); default is &#8220;default&#8221;, I believe</li>
</ul>
<p>The <em>ec2-run-instances</em> command also supports the &#8211;user-data or &#8211;user-data-file attribute to pass setup instructions to CloudInit, as described later on.</p>
<p>To log into instances you will need their public domain name/IP (printed when the command finishes) and user name, which depends on the AMI used (easiest: right-click on the instance in the Mgmt Console and select &#8220;Connect&#8221; to get a complete SSH connect command), and the key file (./VaadinAS.pem in my case). Thus I would log into my first instance as follows (provided that I&#8217;ve already opened port 22 in the security group):</p>
<p><pre class="brush: bash;">ssh -i VaadinAS.pem ubuntu@ec2-46-137-136-253.eu-west-1.compute.amazonaws.com</pre></p>
<p>Create a RDS instance using MySQL (it may take few minutes before its startup finishes):</p>
<p><pre class="brush: bash;">rds-create-db-instance quicktickets --allocated-storage 5 -c db.m1.large  -e MySQL5.1 -u quicktickets -p V3ryS3cr3t  -z eu-west-1c --backup-retention-period 0 --db-name quicktests</pre></p>
<ul>
<li>quicktickets will be the name of the instance</li>
<li>the max. size will be 5 GB (can be changed later)</li>
<li>-c &#8211; it will be based on the db.m1.large instance</li>
<li>-e &#8211; the DB type is MySQL, -u username quicktickets, -p password V3ryS3cr3t</li>
<li>-z eu-west-1c puts it into the same AZ as the EC2 instances</li>
<li>&#8211;backup-retention-period 0 &#8211; don&#8217;t keep backups (default: 1 day)</li>
<li>&#8211;db-name quicktests &#8211; needed for connecting to it</li>
</ul>
<p>Next I need to make the DB accessible from my EC2 instances (that are in the security group quick-start-1 ):</p>
<p><pre class="brush: bash;">rds-authorize-db-security-group-ingress default --ec2-security-group-name quick-start-1 --ec2-security-group-owner-id </pre></p>
<ul>
<li>You can find your AWS Account ID in your <a href="aws.amazon.com/account">AWS account</a> under the Security Credentials</li>
</ul>
<p>To find out the hostname of the instance execute <em>rds-describe-db-instance</em>, which will also tell you whether it is still launching or already running.</p>
<p>Now you can connect to the DB from an EC2 instance in the security group:</p>
<p><pre class="brush: bash;">mysql -h quicktickets.cpokd2djuazy.eu-west-1.rds.amazonaws.com -u quicktickets --password=V3ryS3cr3t quicktickets</pre></p>
<h4>AWS CloudFormation</h4>
<p><a href="http://aws.amazon.com/cloudformation/">CloudFormation</a> is a new (2/2011) free service from Amazon that enables you to describe the resources you want and their dependencies in a text format and to use this &#8220;template&#8221; to instantiate them (&#8220;to create a stack&#8221;) either via the AWS Management Console or via the <a href="http://aws.amazon.com/developertools/AWS-CloudFormation/2555753788650372">CloudFormation Command Line Tools</a>. You can also share you template and use and combine templates created by others. The templates also support the UserData attribute that you can use to pass setup instructions to CloudInit, as described later on. Check out this screenshot-based post about <a href="http://bioteam.net/2011/02/amazon-cloudformation-first-look/">setting up a CF stack via the Management Console</a>.</p>
<p>An example template file:</p>
<p><pre class="brush: jscript; collapse: true; highlight: [4,16,31,56]; light: false; toolbar: true; wrap-lines: false;">
{  &quot;AWSTemplateFormatVersion&quot;: &quot;2010-09-09&quot;,
  &quot;Description&quot; : &quot;One EC2 instance with a security group open for SSH&quot;,

  &quot;Parameters&quot;: {
    &quot;KeyName&quot;: {
      &quot;Description&quot; : &quot;Name of an existing EC2 KeyPair to enable SSH access&quot;,
      &quot;Type&quot;: &quot;String&quot;
    },
    &quot;InstanceType&quot;: {
      &quot;Default&quot;: &quot;m1.large&quot;,  &quot;Type&quot;: &quot;String&quot;
    }
  },

  &quot;Resources&quot;: {

    &quot;EC2SecurityGroup&quot;: {
      &quot;Properties&quot;: {
        &quot;SecurityGroupIngress&quot;: [
          {
            &quot;FromPort&quot;: &quot;22&quot;,
            &quot;CidrIp&quot;: &quot;0.0.0.0/0&quot;,
            &quot;ToPort&quot;: &quot;22&quot;,
            &quot;IpProtocol&quot;: &quot;tcp&quot;
          }
        ],
        &quot;GroupDescription&quot;: &quot;SSH access&quot;
      },
      &quot;Type&quot;: &quot;AWS::EC2::SecurityGroup&quot;
    },

    &quot;Ec2Instance&quot;: {
      &quot;Properties&quot;: {
        &quot;SecurityGroups&quot;: [{&quot;Ref&quot;: &quot;EC2SecurityGroup&quot;}],
        &quot;ImageId&quot;: { &quot;Fn::FindInMap&quot;: [&quot;AWSRegionArch2AMI&quot;,
            {&quot;Ref&quot;: &quot;AWS::Region&quot;}, &quot;64&quot;
          ]
        },
        &quot;UserData&quot;: {
          &quot;Fn::Base64&quot;: { &quot;Fn::Join&quot;: [&quot;&quot;, [
              &quot;#!/bin/bash -v\n&quot;,
              &quot;# you init bash script here...\n&quot;
        ]]} },
        &quot;KeyName&quot;: { &quot;Ref&quot;: &quot;KeyName&quot; },
        &quot;InstanceType&quot;: { &quot;Ref&quot;: &quot;InstanceType&quot; }
      },
      &quot;Type&quot;: &quot;AWS::EC2::Instance&quot;
    }
  },

  &quot;Mappings&quot;: {
    &quot;AWSInstanceType2Arch&quot; : {
      &quot;m1.large&quot;    : { &quot;Arch&quot; : &quot;64&quot; }, &quot;m1.xlarge&quot;   : { &quot;Arch&quot; : &quot;64&quot; }, ...
    }
  },

  &quot;Outputs&quot; : {
    &quot;InstanceId&quot; : {
      &quot;Description&quot; : &quot;InstanceId of the newly created EC2 instance&quot;,
      &quot;Value&quot; : { &quot;Ref&quot; : &quot;Ec2Instance&quot; }
    },
    &quot;AZ&quot; : {
      &quot;Description&quot; : &quot;Availability Zone of the newly created EC2 instance&quot;,
      &quot;Value&quot; : { &quot;Fn::GetAtt&quot; : [ &quot;Ec2Instance&quot;, &quot;AvailabilityZone&quot; ] }
    },
    &quot;PublicIP&quot; : {
      &quot;Description&quot; : &quot;Public IP address of the newly created EC2 instance&quot;,
      &quot;Value&quot; : { &quot;Fn::GetAtt&quot; : [ &quot;Ec2Instance&quot;, &quot;PublicIp&quot; ] }
    }
  }
}
</pre></p>
<ul>
<li>4: As you can see, you can define properties (with defaults) for which values may be supplied when a new stack is being created from the template</li>
<li>16, 31: Next it defines two resources: a security group and an EC2 instance (which uses some mappings because the names of AMIs differ based in region)</li>
<li>38: Setup instructions can be supplied to CloudInit via base64-encoded UserData</li>
<li>56: You can also define what information should be available via the DescribeStacks function (command line: cfn-describe-stacks)</li>
</ul>
<p>CloudFormation let you define any resource (EC2 instances, RDS instances, load balancers, security groups, &#8230;), their dependencies, and, via CloudInit, various boot-time actions such as SW installation. The templates are valid JSON documents.</p>
<p>Example: <a href="http://docs.amazonwebservices.com/FeaturedArticles/latest/index.html?cloudformation-waitcondition-article.html">Using CloudFormation and Cloud-Init to install and start a RoR application</a> (featuring the WaitCondition) &#8211; it is not too long and describes the individual sections of the template file. You can also browse through the <a href="http://aws.amazon.com/cloudformation/aws-cloudformation-templates/">public template files</a>, for example this: <a href="https://s3.amazonaws.com/cloudformation-templates-us-east-1/Drupal_Single_Instance_With_RDS.template">Single EC2 Instance web server with Amazon RDS database instance</a>.</p>
<p>In June 2011 Amazon launched also <a href="https://forums.aws.amazon.com/ann.jspa?annID=1048">CloudFormer</a>, a prototype tool that enables you to create CloudFormation templates from the existing AWS resources in your account.</p>
<p>If you still desire more information, read the <a href="docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/">CloudFormation User Guide</a>.</p>
<h5>Customizing an Instance with CloudFormation Metadata and Helper Scripts</h5>
<p>From <a href="https://s3.amazonaws.com/cloudformation-examples/BoostrappingApplicationsWithAWSCloudFormation.pdf">Bootstrapping Applications via AWS CloudFormation</a>:</p>
<blockquote><p>AWS CloudFormation allows you to define the set of packages, files and operating system services through metadata in a template. In addition, it provides helper functions to<br />
interpret the metadata and act on it, installing packages, creating files and starting or restarting services on the instance.  The AWS CloudFormation scripts build on the basic CloudInit functionality and enable you to create a common, simple CloudInit startup script that is data-driven through metadata. You describe what needs to be installed on the host in metadata and AWS CloudFormation takes care of the how.</p></blockquote>
<p>See the document for instructions on how to use the metadata and <a href="http://aws.amazon.com/developertools/AWS-CloudFormation/4026240853893296">helper scripts</a> such as <em>cfn-init</em>, which installs packages, downloads and unpacks archives, starts services, and creates files based on data in the metadata section. It also mentiones the integration of CloudFormation and Chef or Puppet, which is described in more detail in the whitepapers <a href="https://s3.amazonaws.com/cloudformation-examples/IntegratingAWSCloudFormationWithOpscodeChef.pdf">Integrating AWS CloudFormation with Opscode Chef</a> and <a href="https://s3.amazonaws.com/cloudformation-examples/IntegratingAWSCloudFormationWithPuppet.pdf">Integrating AWS CloudFormation with Puppet</a>. If you intended to use CloudFormation then you should absolutely read this 22 pages guide.</p>
<p>(Note: <em>cfn-init</em> supports downloading and unpacking packages, which can be used e.g. to fetch the latest source code of you application provided on-demand by GitHub.)</p>
<p>You can see an example of usage in this <a href="https://s3.amazonaws.com/cloudformation-templates-us-east-1/Drupal_Single_Instance_With_RDS.template">template leveraging metadata &amp; helper scripts</a>.</p>
<h4>Other Alternatives</h4>
<ul>
<li>AWS Java API (the command-line tools use it, it&#8217;s based on web service calls)</li>
<li>Third-party tools/libraries, e.g. the Ruby gem <a href="https://github.com/fog/fog">Fog</a>.</li>
<li><a href="http://wiki.opscode.com/display/chef/Launch+Cloud+Instances+with+Knife">Chef + Knife</a>, Puppet (I believe they provide their own wrappers for the AWS WS calls and leverage CloudInit)</li>
</ul>
<h3>Automating EC2 Instance OS/SW Setup</h3>
<p>To customize the software inside EC2 instances and its configuration you can either create a customized AMI or use Canonical&#8217;s CloudInit with AMIs that support it (Amazon Linux and Ubuntu and maybe others). If you use CloudFormation, you have also another possibility based on CloudInit, described in the C.F. section above.</p>
<h4>Canonical CloudInit and Instance User Data</h4>
<p>You can pass whatever text data to a new instance via the <a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?instancedata-data-categories.html">User Data</a> attribute (up to 16KB), the data is then available from within the instance at http://169.254.169.254/latest/user-data (you can also <a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?AESDG-chapter-instancedata.html">access various metadata</a> in a similar way). <a href="https://help.ubuntu.com/community/CloudInit">CloudInit</a> is a Linux utility developed by Canonical, the company behind Ubuntu, that reads these data and processes any instructions embedded in them at boot time (approximately when rc.local runs). For example if it starts with #! then it is run as a shell script under root.</p>
<p>CloudInit accepts different types of instructions in user data, distinguished by the first line: a script (#!&#8230;), cloud config data i.e. packages to install etc. (#cloud-config), URLs of files to process (#include &#8230;), #upstart-job to add something to /etc/init (run on each boot) and more. It can even handle gzip-compressed user data and multi-part data, combining several of the instruction types (see <a href="https://launchpad.net/cloud-utils">cloud-utils</a> and the command <a href="http://www.makelinux.net/man/1/W/write-mime-multipart">write-mime-multipart</a>).</p>
<p>The type <a href="http://ubuntu-smoser.blogspot.com/2010/03/introducing-cloud-inits-cloud-config.html">#cloud-config</a> is quite useful as it is a simpler way to install packages and execute commands than a bash script. It contains YAML-formatted instructions, f.ex. &#8220;runcmd&#8221; to run a command-line tool, &#8220;packages&#8221; to install packages via the OS&#8217; package manager. Example: <a href="http://code.google.com/p/xebia-france/wiki/CloudInitConfigurationToAutomateInstallationOfJenkins">Installing Jenkins CI with </a><a href="http://code.google.com/p/xebia-france/wiki/CloudInitConfigurationToAutomateInstallationOfJenkins">#cloud-config</a>.</p>
<p>CloudInit isn&#8217;t very well documented yet, you may ocassionaly need to <a href="http://code.launchpad.net/~cloud-init-dev/cloud-init/trunk">read the Python source codes</a>. If something goes wrong, you can check the logs in the instance&#8217;s /var/log/cloud-init.log.</p>
<p>Aside of the official documentation you might want to see Xebia&#8217;s <a href="http://www.slideshare.net/XebiaFrance/cloudinit-introduction">CloudInit introduction presentation</a> and read the section on CloudInit in the Amazon Linux AMI <a href="http://ec2-downloads.s3.amazonaws.com/AmazonLinuxAMIUserGuide.pdf">user guide</a>.</p>
<h4>Creating a Customized Amazon Machine Image</h4>
<p>CloudInit installs and configures software at launch time and thus the instance takes longer to become fully available. If that is a problem then you may prefer to create your own customized <a href="http://aws.amazon.com/amis">Amazon Machine Image</a> (AMI) with all the software already installed and configured. It&#8217;s described e.g. in this brief <a href="http://docs.amazonwebservices.com/AWSEC2/2007-08-29/GettingStartedGuide/creating-an-image.html">how to create a new AMI from an existing one</a> (2007) or in the <a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?creating-an-ami.html">official AMI customization docs</a> and you may also want to have a look at the <a href="http://aws.amazon.com/developertools/368">EC2 AMI command line tools</a>. You&#8217;d then create new EC2 instances based on the customized AMI.</p>
<h2>Some Related Stuff</h2>
<p>If your EC2 instances need to communicate and use a technology that requires them to be on the same subnet then you can use Amazon <a href="http://aws.amazon.com/vpc/">Virtual Private Cloud</a> (VPC; free) and even connect it to your data center via VPN ($0.05/h). This may be necessary for example for running <a href="http://jmeter.apache.org/usermanual/remote-test.html">multiple JMeter instances</a>.</p>
<p>Regarding JMeter, Jörg Kalsbach has created an AMI that simplifies the creation of JMeter master-slaves farms (3/2010): <a href="http://aws.amazon.com/amis/2924">JMeter In The Cloud &#8211; A cloud based load testing environment</a> (read the doc). (The trick is that the master instance starts the slave instances and thus knows their IPs. I guess that something similar could be done with CloudFormation, Auto Scale and user data/CloudInit.)</p>
<h2>Summary</h2>
<p>AWS is a dynamically developing platform with continually improving tooling and a growing offer of services. It&#8217;s very easy to get started with using the web-based Management Console but it becomes soon more convenient to move to a more automated interface, such as the command-line tools or even CloudFormation for whole infrastructure stack setup. The support for customizing instances either by creating custom images or at launch time via CloudInit and/or CloudFormation&#8217;s metadata and scripts is very good and people have already been combining it with their favorite DevOps tools Chef and Puppet.</p>
<p>I&#8217;d recommend you to start with AWS using the Management Console and then to switch to the command-line tools and CloudInit when you become comfortable with the concepts and usage. If you need to provision multiple resources repeatedly, you should use CloudFormation with its metadata and helper scripts (perhaps leveraging also Puppet/Chef).</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/billigereogbedre.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/billigereogbedre.wordpress.com/668/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/billigereogbedre.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/billigereogbedre.wordpress.com/668/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/billigereogbedre.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/billigereogbedre.wordpress.com/668/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/billigereogbedre.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/billigereogbedre.wordpress.com/668/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/billigereogbedre.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/billigereogbedre.wordpress.com/668/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/billigereogbedre.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/billigereogbedre.wordpress.com/668/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/billigereogbedre.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/billigereogbedre.wordpress.com/668/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=668&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.iterate.no/2011/12/02/getting-started-with-amazon-web-services-and-fully-automated-resource-provisioning-in-15-minutes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31250f85a9622e5a298c96fc18785f8c?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">theholyjava</media:title>
		</media:content>
	</item>
		<item>
		<title>Ungdommen nå til dags</title>
		<link>http://blog.iterate.no/2011/11/29/ungdommen-na-til-dags/</link>
		<comments>http://blog.iterate.no/2011/11/29/ungdommen-na-til-dags/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 08:00:14 +0000</pubDate>
		<dc:creator>Anders Haugeto</dc:creator>
				<category><![CDATA[Metodikk]]></category>

		<guid isPermaLink="false">http://blog.iterate.no/?p=631</guid>
		<description><![CDATA[Ivar og jeg har holdt workshop for IT-elevene på Sandvika videregående skole. TV8-innslag fra workshoppen her. Temaet var smidig utvikling. Jeg er alltid spent på utfallet av en workshop. Ved siden av mange tilfeldigheter spiller også bedriftskultur, motivasjon og trygghet inn på deltagernes evne til å løse oppgavene. (Litt på samme måte som med systemutvikling [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=631&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ivar og jeg har holdt workshop for IT-elevene på Sandvika videregående skole. <a href="http://tv-8.no/ab/musicvideo.php?vid=819e33880">TV8-innslag fra workshoppen her</a>. Temaet var smidig utvikling.</p>
<p>Jeg er alltid spent på utfallet av en workshop. Ved siden av mange tilfeldigheter spiller også bedriftskultur, motivasjon og trygghet inn på deltagernes evne til å løse oppgavene. (Litt på samme måte som med systemutvikling forøvrig). Denne gangen var det imidlertid ikke ansatte hos Aker Solutions, Widerøe, Statistisk Sentralbyrå eller andre profesjonelle systemutviklere som skulle i ilden. Hvordan ville de unge og uerfarne elevene prestere? Kom det til å bli for vanskelig for dem?</p>
<p>De fikk to oppgaver. Den første utfordret lagarbeid og prosessforbedring. Den andre utfordret planlegging og innovasjonsevne. Det var voksne oppgaver for et ungt publikum.</p>
<p>De klarte seg imidlertid svært godt, faktisk bedre enn de fleste. Spesielt flinke var de på å utfordre rammene for oppgavene.</p>
<p>Noe av poenget med oppgavene er nettopp å gjøre deltagerne mer bevisste på selvpålagte begrensninger, og det hadde disse ungdommene lite av. Dermed kom de også frem til løsninger tidligere enn normalt, i en inspirerende blanding av ungdommelig overmot, tett samhandling og evne til å jobbe målrettet uten sløsing.</p>
<p>Dette minner meg om en reklamefilm som gikk for noen år siden. Det kryssklippes mellom to grupper, den ene på kurs i å uttrykke følelser, den andre på fotballkamp. De stakkars kursdeltagerne er så stivbente i sine forsøk på å gi hverandre en klem at man blir &#8211; nettopp &#8211; helt beklemt av å se på. Lettelsen er tilsvarende når man ser gjengen på fotballkamp brøle og kaste seg rundt halsen på hverandre i vill begeistring når laget deres scorer.</p>
<p>Å uttrykke begeistring på en fotballkamp er en evne som må falle seg naturlig &#8211; den kan ikke instrueres på detaljnivå. Det samme gjelder team-arbeid og innovasjon.</p>
<p>Elevene angrep problemstillingene uten hensyn til egne begrensninger, verken som personer eller som team. Som en gjeng som trikser med en fotball, ble idéer fortløpende kastet ut, og sparket opp, ned eller ut. Like lett gikk de inn i de påfølgende diskusjonene om realisering. Deres manglende innsikt i teknologiske begrensninger var like mye en fordel for deres evne til kreativ problemløsning.</p>
<p>Min erfaring er at vi som profesjonelle fagfolk jobber motsatt. Vi tenker begrensninger og analyse først, og løsning etterpå. Klok av skade, vil kanskje noen si. Iallefall de som kjørte på som ungdom, og opplevde konsekvensene av å være ugjennomtenkt. Jeg tror imidlertid at vi overkompenserer på dette området.</p>
<p>Elevene hjalp oss iallefall innse at oppgavene de fikk er mer tiltrengt når man har mistet det ungdommelige overmotet. Jeg håper derfor de klarer å bevare energien sin gjennom studier og inngangen til arbeidslivet. Ikke bare er det bra for hver enkelt av dem, det smitter også over på omgivelsene.</p>
<p>Slik det gjorde på Ivar og meg <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/billigereogbedre.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/billigereogbedre.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/billigereogbedre.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/billigereogbedre.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/billigereogbedre.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/billigereogbedre.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/billigereogbedre.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/billigereogbedre.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/billigereogbedre.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/billigereogbedre.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/billigereogbedre.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/billigereogbedre.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/billigereogbedre.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/billigereogbedre.wordpress.com/631/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=631&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.iterate.no/2011/11/29/ungdommen-na-til-dags/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/394bb536deda5b78a5a4818d73e0e901?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">andershaugeto</media:title>
		</media:content>
	</item>
		<item>
		<title>The 3 Most Important Things I&#8217;ve Learned This Year</title>
		<link>http://blog.iterate.no/2011/11/26/the-3-most-important-things-ive-learned-this-year/</link>
		<comments>http://blog.iterate.no/2011/11/26/the-3-most-important-things-ive-learned-this-year/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 17:28:39 +0000</pubDate>
		<dc:creator>Jakub Holý</dc:creator>
				<category><![CDATA[Lean]]></category>
		<category><![CDATA[Ledelse]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.iterate.no/?p=639</guid>
		<description><![CDATA[In Iterate we are mostly dealing with technology but why do we actually use technology? We use it because we want to help people achieve something &#8211; and in the process of doing that we have to cooperate and communicate with many humans. The human factor is far more determining for our success than any [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=639&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In Iterate we are mostly dealing with technology but why do we actually use technology? We use it because we want to help people achieve something &#8211; and in the process of doing that we have to cooperate and communicate with many humans. The human factor is far more determining for our success than any kind of technology could ever be. Why do most project fail? Because of a bad technology? No &#8211; usually it&#8217;s a failure of communication, leadership, process change. And this week I&#8217;ve learnt some very important things about this crucial human factor &#8211; and thus this post may well be the most valuable piece published here til now &#8211; or ever.</p>
<p>First, I&#8217;ve learned <a title="Jonah Lehrer: How We Decide" href="http://fora.tv/2010/01/05/Jonah_Lehrer_How_We_Decide">how we decide</a> (and a project &#8211; IT or other &#8211; is nothing but a bunch of hundreds, millions of decisions, both small and big). To deal with the incredibly complex world around us, human brain has many decision strategies ranging from a very rational decision making to &#8220;gut feeling&#8221; decisions based on our emotions and subconsciousness. Every of these strategies is perfectly suitable for some situations (for example relying on emotions and intuition is often the best thing, conversely to what we&#8217;ve been thought) &#8211; and leads to suboptimal results (read: terrible failures) in others. Thus the single most important factor that determines how successful we are is our ability of metacognition, i.e. being aware of how we think, and thus being able to select the most appropriate strategy for the situation at hand. (Which might not be as easy as it sounds and may require that we &#8220;trick&#8221; our mind somehow, i.e. by distracting it or forcing it into a certain decision mode.) Jonah Lehrer documents that on the &#8220;Marshmallow experiment&#8221; &#8211; the children who knew that they got to distract themselves somehow not to eat the marshmallow, which they&#8217;ve been given, not only managed to wait those 15 minutes for another one but were also much more successful in their later lives &#8211; presumably because their ability of metacognition helped them to make better decisions more often.</p>
<p><span id="more-639"></span>Second, I&#8217;ve learned that <a href="http://www.ted.com/talks/simon_sinek_how_great_leaders_inspire_action.html">the most important thing to succeed is to know (and communicate) why</a> &#8211; not just &#8220;what&#8221; we do or want to achieve, but &#8220;why,&#8221; what&#8217;s our purpose, our goal. Because &#8220;what&#8221; talks just to our thin, rational neocortex &#8211; but that &#8220;why&#8221; strikes deep into the center that drives our motivation and behavior. Great leaders don&#8217;t present plans, they inspire people with their cause &#8211; as did Martin Luther King with his &#8220;<a href="http://www.americanrhetoric.com/speeches/mlkihaveadream.htm">I have a dream</a>&#8221; talk, brothers Wrights who were able to inspire themselves and their coworkers to achieve something a much better equipped team didn&#8217;t, and Apple with its vision of great and friendly world that makes people stand in a queue for six hours to be the first to purchase their new product. You may not want to aspire to the same world-changing goals as they do but still, whatever you do, you should know that to attract people you have to know and communicate &#8220;why.&#8221; I&#8217;d certainly much rather work &#8211; likely even with sweat and blood &#8211; for a company that has a cause that resonates with me other than &#8220;to make money&#8221;. (That may be also the reason why I don&#8217;t like certain dominant company for I feel that their goal is to rule the world [of technology], to get it into and keep it in its iron embrace.)</p>
<p>Last, I&#8217;ve learned that <a title="RSA Animate - Drive: The surprising truth about what motivates us " href="http://www.youtube.com/watch?v=u6XAPnuFjJc">what motivates us isn&#8217;t money, but purpose, mastery, autonomy</a> (not such a big surprise anyway, but it&#8217;s nice to have it backed by actual research results). For a simple, physical task a financial reward increases performance &#8211; but for even a mildly cognitive task it decreases it. Thus to motivate employees, once the question of money is &#8220;out of the table,&#8221; i.e. once they&#8217;ve enough for what they need, you need something else. And it turns our that we are motivated by three desires -the desire for autonomy, for deciding ourselves our course of action, the desire to be better in what we do, to feel more competent, and &#8211; as mentioned already in the previous talk &#8211; by a purpose. (Frankly, who would be surprised that people prefer to do something meaningful, to participate on something bigger, on creating a better world of tomorrow?) This is a good guide both for attracting employees and choosing and employer &#8211; but it certainly applies in other dimensions of life too.</p>
<h2>Conclusion</h2>
<p>We are human. We are not just rational machines, as the majority of the western science claimed in the last centuries. And that&#8217;s a good thing. To be successful and happy we need to understand little more about ourselves and others to be able both to drive ourselves better and to communicate with others better. We should be more aware about how we think and decide and choose the right decision strategy without blindly preferring one (such as the rational one). When we want to appeal to other people to help us with our goal, we have to formulate and communicate our purpose, so that they can identify themselves with the purpose and help us with all their power. Finally, we should be aware of what motivates us and seek and foster such an environment where it flourishes. (One of the reasons why I prefer Scrum/lean that empowers the autonomy and responsibility of individuals over a tight, top-down controlled process.)</p>
<p>PS: The <a href="http://www.semco.com.br/en/content.asp?content=3&amp;contentID=567">rules of the Semco group</a>, which a very non-standard company &#8211; open, cooperative, encouraging autonomy &#8211; is very inspiring.</p>
<p style="text-align:center;"><em>Cross-posted from <a href="http://theholyjava.wordpress.com/2011/11/26/the-3-most-important-things-ive-learned-this-year/">The Holy Java</a></em>.</p>
<div class="linkscent-iconblock" style="float:none!important;border:0 solid #ff0000!important;background:none repeat scroll center center transparent!important;width:auto!important;height:auto!important;display:block!important;overflow:visible!important;position:static!important;text-indent:0!important;z-index:auto!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:auto!important;top:auto!important;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;margin:0!important;padding:0!important;"><img class="linkscent-icon" style="float:none!important;border:0 solid #ff0000!important;width:16px!important;height:16px!important;display:none;overflow:visible!important;position:absolute!important;text-indent:0!important;z-index:2147483635!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:554px;top:302px;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;visibility:hidden;background:url('http://www.americanrhetoric.com/favicon.ico') no-repeat scroll center center transparent!important;opacity:0;margin:0;padding:0!important;" src="//interclue/content/cluecore/skins/default/pixel.gif" alt="" /><img class="linkscent-icon" style="float:none!important;border:0 solid #ff0000!important;background:url('//interclue/content/cluecore/skins/default/sprites.png') no-repeat scroll -48px -96px transparent;width:16px!important;height:16px!important;display:none;overflow:visible!important;position:absolute!important;text-indent:0!important;z-index:2147483635!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:572px;top:302px;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;visibility:hidden;opacity:0;margin:0;padding:0!important;" src="//interclue/content/cluecore/skins/default/pixel.gif" alt="" width="16" height="16" /><img class="linkscent-icon" style="float:none!important;border:0 solid #ff0000!important;background:none repeat scroll center center transparent;width:16px!important;height:16px!important;display:none;overflow:visible!important;position:absolute!important;text-indent:0!important;z-index:2147483635!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:590px;top:302px;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;visibility:hidden;opacity:0;margin:0;padding:0!important;" src="//interclue/content/cluecore/skins/default/pixel.gif" alt="" /><img class="linkscent-icon" style="float:none!important;border:0 solid #ff0000!important;width:16px!important;height:16px!important;display:none;overflow:visible!important;position:absolute!important;text-indent:0!important;z-index:2147483635!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:496px;top:410px;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;visibility:hidden;background:url('http://www.youtube.com/favicon.ico') no-repeat scroll center center transparent!important;opacity:0;margin:0;padding:0!important;" src="//interclue/content/cluecore/skins/default/pixel.gif" alt="" /><img class="linkscent-icon" style="float:none!important;border:0 solid #ff0000!important;background:url('//interclue/content/cluecore/skins/default/sprites.png') no-repeat scroll -48px -96px transparent;width:16px!important;height:16px!important;display:none;overflow:visible!important;position:absolute!important;text-indent:0!important;z-index:2147483635!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:514px;top:410px;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;visibility:hidden;opacity:0;margin:0;padding:0!important;" src="//interclue/content/cluecore/skins/default/pixel.gif" alt="" width="16" height="16" /><img class="linkscent-icon" style="float:none!important;border:0 solid #ff0000!important;background:none repeat scroll center center transparent;width:16px!important;height:16px!important;display:none;overflow:visible!important;position:absolute!important;text-indent:0!important;z-index:2147483635!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:532px;top:410px;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;visibility:hidden;opacity:0;margin:0;padding:0!important;" src="//interclue/content/cluecore/skins/default/pixel.gif" alt="" /></div>
<div class="linkscent-iconblock" style="float:none!important;border:0 solid #ff0000!important;background:none repeat scroll center center transparent!important;width:auto!important;height:auto!important;display:block!important;overflow:visible!important;position:static!important;text-indent:0!important;z-index:auto!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:auto!important;top:auto!important;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;margin:0!important;padding:0!important;"><img class="linkscent-icon" style="float:none!important;border:0 solid #ff0000!important;width:16px!important;height:16px!important;display:none;overflow:visible!important;position:absolute!important;text-indent:0!important;z-index:2147483635!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:505px;top:708px;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;visibility:hidden;background:url('http://www.youtube.com/favicon.ico') no-repeat scroll center center transparent!important;opacity:0;margin:0;padding:0!important;" src="//interclue/content/cluecore/skins/default/pixel.gif" alt="" /><img class="linkscent-icon" style="float:none!important;border:0 solid #ff0000!important;background:none repeat scroll center center transparent;width:16px!important;height:16px!important;display:none;overflow:visible!important;position:absolute!important;text-indent:0!important;z-index:2147483635!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:523px;top:708px;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;visibility:hidden;opacity:0;margin:0;padding:0!important;" src="//interclue/content/cluecore/skins/default/pixel.gif" alt="" /></div>
<div class="linkscent-iconblock" style="float:none!important;border:0 solid #ff0000!important;background:none repeat scroll center center transparent!important;width:auto!important;height:auto!important;display:block!important;overflow:visible!important;position:static!important;text-indent:0!important;z-index:auto!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:auto!important;top:auto!important;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;margin:0!important;padding:0!important;"><img class="linkscent-icon" style="float:none!important;border:0 solid #ff0000!important;width:16px!important;height:16px!important;display:none;overflow:visible!important;position:absolute!important;text-indent:0!important;z-index:2147483635!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:679px;top:711px;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;visibility:hidden;background:url('http://s2.wp.com/i/favicon.ico') no-repeat scroll center center transparent!important;opacity:0;margin:0;padding:0!important;" src="//interclue/content/cluecore/skins/default/pixel.gif" alt="" /><img class="linkscent-icon" style="float:none!important;border:0 solid #ff0000!important;background:url('//interclue/content/cluecore/skins/default/sprites.png') no-repeat scroll -48px -96px transparent;width:16px!important;height:16px!important;display:none;overflow:visible!important;position:absolute!important;text-indent:0!important;z-index:2147483635!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:697px;top:711px;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;visibility:hidden;opacity:0;margin:0;padding:0!important;" src="//interclue/content/cluecore/skins/default/pixel.gif" alt="" width="16" height="16" /><img class="linkscent-icon" style="float:none!important;border:0 solid #ff0000!important;background:none repeat scroll center center transparent;width:16px!important;height:16px!important;display:none;overflow:visible!important;position:absolute!important;text-indent:0!important;z-index:2147483635!important;max-width:none!important;min-width:0!important;max-height:none!important;min-height:0!important;left:715px;top:711px;bottom:auto!important;right:auto!important;line-height:16px!important;white-space:nowrap!important;visibility:hidden;opacity:0;margin:0;padding:0!important;" src="//interclue/content/cluecore/skins/default/pixel.gif" alt="" /></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/billigereogbedre.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/billigereogbedre.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/billigereogbedre.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/billigereogbedre.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/billigereogbedre.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/billigereogbedre.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/billigereogbedre.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/billigereogbedre.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/billigereogbedre.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/billigereogbedre.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/billigereogbedre.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/billigereogbedre.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/billigereogbedre.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/billigereogbedre.wordpress.com/639/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=639&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.iterate.no/2011/11/26/the-3-most-important-things-ive-learned-this-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31250f85a9622e5a298c96fc18785f8c?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">theholyjava</media:title>
		</media:content>
	</item>
		<item>
		<title>Gaining Productivity by Writing Unit Tests in Groovy (or Scala&#8230;) Instead of Java</title>
		<link>http://blog.iterate.no/2011/11/25/gaining-productivity-by-writing-unit-tests-in-groovy-or-scala-instead-of-java/</link>
		<comments>http://blog.iterate.no/2011/11/25/gaining-productivity-by-writing-unit-tests-in-groovy-or-scala-instead-of-java/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 15:31:08 +0000</pubDate>
		<dc:creator>Jakub Holý</dc:creator>
				<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[polyglot]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://blog.iterate.no/?p=635</guid>
		<description><![CDATA[I like writing unit tests but Java doesn&#8217;t make it particularly easy. Especially if you need to create objects and object trees, transform objects for checking them etc. I miss a lot a conscise, powerful syntax, literals for regular expressions and collections, conscise, clojure-based methods for filtering and transforming collections, asserts providing more visibility into [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=635&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I like writing unit tests but Java doesn&#8217;t make it particularly easy. Especially if you need to create objects and object trees, transform objects for checking them etc. I miss a lot a conscise, powerful syntax, literals for regular expressions and collections, conscise, clojure-based methods for filtering and transforming collections, asserts providing more visibility into why they failed. But hey, who said I have to write tests in the same language as the production code?! I can use Groovy &#8211; with its syntax being <a href="http://groovy.codehaus.org/Differences+from+Java">~ 100%</a> Java + like thousand % more, optional usage of static/dynamic typing, closures, hundreds of utility methods <a href="http://groovy.codehaus.org/groovy-jdk/">added to the standard JDK classes</a> and so on. Groovy support for example in IntelliJ IDEA (autocompletion, refactoring &#8230;) is very good so by using it you loose nothing and gain incredibly much. So I&#8217;ve decided that from now on I&#8217;ll only use Groovy for unit tests. And so far my experience with it was overwhelmingly positive (though few things are little more complicated by the positives more than compensate for them). Read on to find out why you should try it too.</p>
<p>(<em>The arguments here focus on Groovy but I guess similar things could be said about JRuby, Scala etc. &#8211; with the exception of Java code compatibility, which you only get in Groovy.</em>)</p>
<h2>Few examples</h2>
<p>Some of the example below use some Groovy magic but don&#8217;t be scared. You can write Groovy just as if it was Java and only learn and introduce its magic step by step as you need it.</p>
<p>Bean construction:</p>
<p><pre class="brush: groovy;">
def testBean = new Customer(fname: &quot;Bob&quot;, sname: &quot;Newt&quot;, age: 42)
// Java: c = new Customer(); c.setFname(&quot;Bob&quot;); c.setSname(&quot;Newt&quot;); c.setAge(42);
</pre></p>
<p>(Of course this starts to pay of if either you don&#8217;t want to create a constructor or if there are &#8220;many&#8221; properties and you need to set different subsets of them (constructor with 4+ arguments is hard to read).)</p>
<p>Reading a file:</p>
<p><pre class="brush: groovy;">
assert test.method() == new File(&quot;expected.txt&quot;).getText()
// Java: buffered reader line by line ...; Note: == actually uses equals()
</pre></p>
<p>Checking the content of a collection/map:</p>
<p><pre class="brush: groovy;">
assert customerFinder.findAll().collect {it.sname}.sort() == [&quot;Lizard&quot;,&quot;Newt&quot;]
// Java: too long to show here (extract only surnames, sort them, compare ...)
assert getCapitalsMap() == [&quot;UK&quot; : &quot;London&quot;, &quot;CR&quot; : &quot;Prague&quot;]
</pre></p>
<p>Regular expressions:</p>
<p><pre class="brush: groovy;">
assert (&quot;dog1-and-dog2&quot; =~ /dog\d/).getAt([0,1]) == [&quot;dog1&quot;, &quot;dog2&quot;]
</pre></p>
<p><span id="more-635"></span></p>
<h2>What is Groovy?</h2>
<p><a href="http://groovy.codehaus.org/Differences+from+Java">Groovy</a> 1.8 is a mature scripting language for the JVM written as an extension of Java with optional dynamic typing, closures, and more. It&#8217;s now developed by SpringSource, the company behind the Spring framework.</p>
<p>As mentioned, nearly all Java code is a valid Groovy code with basically one exception: To initialize an array you can&#8217;t use { &#8230; } (for that would be a closure), you must use [...] instead (notice that by default it actually creates a List, only when assigned to an array variable or casted to array will it produce an array). Make sure to check the few <a href="http://groovy.codehaus.org/Differences+from+Java">common gotchas</a> before you dive into using Groovy.</p>
<p>You can experiment with Groovy online in the <a href="http://groovyconsole.appspot.com/">GAE Groovy console</a>.</p>
<h2>Groovy features especially beneficial for testing</h2>
<p>General</p>
<ul>
<li>Dynamic typing at request =&gt; conscise, avoids code cluttered with casts</li>
</ul>
<p><a href="http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html">Collections</a>: Closure-based methods like every, each, find</p>
<p><a href="http://groovy.codehaus.org/groovy-jdk/java/io/File.html">Files</a>: Read all the text with one call, withReader { .. } etc.</p>
<p>Testing/advanced:</p>
<ul>
<li><em>assert</em>- you can use the Java keyword assert instead of JUnit methods, upon failure Groovy will provide you with pretty good info of what went wrong:
<pre>Assertion failed:

assert config.getResolvers()) == ["h:dataTable" : resolver, "my:dt2" : null]
       |      |                |                  |
       |      |              false                |
       |      |                                   MyResolver@731d2572
       |      [h:dataTable:MyResolver@731d2572, my:dt2:MyResolver@731d2572]
       LocalVariableConfiguration@7e859a68</pre>
</li>
<li>Here-docs: embed <a href="http://groovy.codehaus.org/Strings+and+GString">multi-line strings</a> easily in a test (also supports replacing references like $variable with values)</li>
<li><a href="http://groovy.codehaus.org/Groovy+way+to+implement+interfaces">Implementing interfaces with a map</a> (map coercion)</li>
<li><a href="http://groovy.codehaus.org/Developer+Testing+using+Maps+and+Expandos+instead+of+Mocks">Use expandos to define dynamic beans </a>(similarly to JavaScript, you instantiate an <a href="http://groovy.codehaus.org/api/index.html">Expando</a> and just add properties and closures as methods) &#8211; as described on the linked page, expandos and maps are usually enough to replace a mocking library</li>
<li><a href="http://groovy.codehaus.org/Groovy+Mocks">Build-in mocking</a></li>
<li>With Groovy you can of course also use <a href="http://code.google.com/p/spock/">Spock</a>, the excellent specification &amp; testing framework</li>
</ul>
<h2>Complications</h2>
<ul>
<li>Neither JUnitMax nor Infinitest (in IntelliJ) seem to support Groovy test cases</li>
<li>You need a decent IDE such as IntelliJ IDEA</li>
<li>If using Maven, you have to <a href="https://github.com/jakubholynet/static-jsfexpression-validator/blob/54802e77ac2225cf61664730e022ed261e73574c/pom.xml#L136">explicitely configure the GMaven plugin</a> (esp. with a newer Groovy version)</li>
<li>IntelliJ 10.5: Click &amp; alt+enter on a non-existing method to create it only works if the target type is a nested class within the test, not if it is a standalone Java class (so I just create my class there and when done TDDing I extract it into a top-level Java class)</li>
</ul>
<h2>Conclusion</h2>
<p>Groovy makes test writing much more productive and thus developers happy. I intend to use on all my open source projects and to try push it into our commercial projects too. You should give it a try too!</p>
<h2>Additional Links</h2>
<ul>
<li><a href="http://www.docjar.com/docs/api/org/codehaus/groovy/runtime/DefaultGroovyMethods.html">DefaultGroovyMethods</a>.java (<a href="http://grepcode.com/file/repo1.maven.org/maven2/org.codehaus.groovy/groovy-all/1.8.2/org/codehaus/groovy/runtime/DefaultGroovyMethods.java">src</a>): defines the methods added to all objects</li>
<li><a href="http://grepcode.com/file/repo1.maven.org/maven2/org.codehaus.groovy/groovy-all/1.8.2/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java#DefaultTypeTransformation">DefaultTypeTransformation</a>.java: methods used internally to convert between types and when using &#8220;as aType&#8221; &#8211; useful to know what <em>as</em> can convert</li>
</ul>
<p style="text-align:center;"><em>Cross-posted from <a href="http://theholyjava.wordpress.com/2011/10/18/only-a-masochist-would-write-unit-tests-in-java-be-smarter-use-groovy-or-jruby-or-st-else-similar/">The Holy Java</a></em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/billigereogbedre.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/billigereogbedre.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/billigereogbedre.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/billigereogbedre.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/billigereogbedre.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/billigereogbedre.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/billigereogbedre.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/billigereogbedre.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/billigereogbedre.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/billigereogbedre.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/billigereogbedre.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/billigereogbedre.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/billigereogbedre.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/billigereogbedre.wordpress.com/635/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=635&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.iterate.no/2011/11/25/gaining-productivity-by-writing-unit-tests-in-groovy-or-scala-instead-of-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31250f85a9622e5a298c96fc18785f8c?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">theholyjava</media:title>
		</media:content>
	</item>
		<item>
		<title>Ikke så smidig likevel</title>
		<link>http://blog.iterate.no/2011/11/17/ikke-sa-smidig-likevel/</link>
		<comments>http://blog.iterate.no/2011/11/17/ikke-sa-smidig-likevel/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 12:00:52 +0000</pubDate>
		<dc:creator>Anders Haugeto</dc:creator>
				<category><![CDATA[Metodikk]]></category>

		<guid isPermaLink="false">http://blog.iterate.no/?p=606</guid>
		<description><![CDATA[I TU nr 38 17/11 2011 fremmes det en advarsel om at smidige metoder går utover det grunnleggende ingeniørhåndverket. IT-arkitekten Simon Brown mener at arkitekturen kan lide dersom man har en rendyrket smidig tilnærming til IT-utvikling. Han tillegger bransjen et ønske om å være kjappe og effektive, og mener dette er årsaken til problematikken. Et [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=606&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I TU nr 38 17/11 2011 fremmes det en advarsel om at smidige metoder går utover det grunnleggende ingeniørhåndverket.</p>
<p>IT-arkitekten Simon Brown mener at arkitekturen kan lide dersom man har en rendyrket smidig tilnærming til IT-utvikling. Han tillegger bransjen et ønske om å være kjappe og effektive, og mener dette er årsaken til problematikken. Et eksempel han trekker frem er et system som gikk i produksjon med passordet &#8220;password&#8221;, og således stilte seg lagelig til for hack.</p>
<p>Løsningen på dette skal ifølge Brown og Bouvet være å kombinere smidige metoder med tradisjonell tankegang. Dette for å redde software engineering.</p>
<div id="attachment_625" class="wp-caption aligncenter" style="width: 610px"><a href="http://billigereogbedre.files.wordpress.com/2011/11/skjermbilde-2011-11-17-kl-13-10-44-e1321534244844.png"><img class="size-full wp-image-625" title="Skjermbilde 2011-11-17 kl. 13.10.44" src="http://billigereogbedre.files.wordpress.com/2011/11/skjermbilde-2011-11-17-kl-13-10-44-e1321534244844.png?w=600&#038;h=531" alt="" width="600" height="531" /></a><p class="wp-caption-text">Fra Teknisk Ukeblad nr 38, 17. november 2011</p></div>
<p>Vi mener ingen metoder kan forhindre oss i å jobbe feil. Metoden er teori, produktet du utvikler er praksis. Teorien til smidig tankegang er like enkel som den er krevende å gjennomføre: Jo tidligere og hyppigere vi kan få tilbakemeldinger, desto kortere tid bruker vi på å realisere gevinster.</p>
<p>Tilbakemeldinger kommer fra en rekke kilder, og dyktige utviklere vet hvilke kilder de skal oppsøke. Brukere er en åpenbar kilde, som de fleste oppsøker. Forretningsutviklere, driftere, brukeropplevelse-eksperter og arkitekter er andre eksempler. Jeg kjenner ikke det omtalte &#8220;password-prosjektet&#8221; fra innsiden, men jeg tillater meg å spekulere i om utviklerne oppsøkte tilstrekkelige tilbakemeldingskilder før de gikk kjapt &#8211; men ikke effektivt &#8211; i produksjon.</p>
<p>Vi ser tradisjonelle selskaper der den minste arkitekturendring krever store seremonier, politisk spill og tautrekking for å bli implementert, som regel kvartaler etter at behovet oppsto. Implementasjonen blir gjerne også ugunstig, fordi den i slike prosesser alltid blir påvirket av agendaer, som ikke er relevante. Konsekvensen er en metode som hverken er kjapp eller effektiv. Det eneste en slik tankegang fremmer er svært effektive blaim games. Det blir som tittelen til artikkelen ganske riktig påpeker: Ikke så smidig likevel.</p>
<p>Det er mange utfordringer knyttet til innføring av nye tankesett. En av dem er at gamle roller blir utfordret. Med smidig utvikling ønsker vi ikke den klassiske arkitekten lenger, fordi arkitektur skal være utviklerteamet sitt ansvar. De må imidlertid gjerne benytte arkitekter som kilde til kunnskap. Det kan vi anbefale, iallefall i en overgangsperiode.</p>
<p>Smidig tankegang gir oss et konkurransefortrinn gjennom å skape selvstendige enheter som har tilstrekkelig kompetanse til å finne de beste løsningene, gjennom små iterasjoner som i seg selv skaper mye lærdom. Tar enheten avgjørelser uten å oppsøke tilstrekkelige tilbakemeldinger &#8211; ja, da gjør de rett og slett ikke jobben sin. Og når noe går galt har de heller ikke muligheten til å skylde på en storebror, det være seg en arkitekt eller andre skrivebordsgeneraler.</p>
<p>Det er når teamet eier løsningen, at de også finner løsningene.</p>
<p>Dersom du står ansvarlig for et smidig utviklingsløp, vil vi heller anbefale deg å forbedre den iterative prosessen, enn å skape rom for utdaterte roller og seremonier. Spør heller teamet ditt jevnlig: Hvilke kilder til tilbakemelding benytter dere nå? Hvilken ny innsikt fikk dere fra forrige produksjonsetting? Hvilke kriterier legger dere til grunn for deres arkitekturvalg?</p>
<p>Endringer kan være smertefulle, men de er betraktelig hyggeligere enn å bli akterutseilt av en konkurrent &#8211; som ikke fokuserer på å jobbe kjapt &#8211; men derimot klarer å jobbe effektivt. Skal IT-bransjen lykkes med gevinstrealisering må vi slutte å kurere symptomer hver gang vi får problemer med å endre oss.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/billigereogbedre.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/billigereogbedre.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/billigereogbedre.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/billigereogbedre.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/billigereogbedre.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/billigereogbedre.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/billigereogbedre.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/billigereogbedre.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/billigereogbedre.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/billigereogbedre.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/billigereogbedre.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/billigereogbedre.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/billigereogbedre.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/billigereogbedre.wordpress.com/606/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.iterate.no&amp;blog=9288595&amp;post=606&amp;subd=billigereogbedre&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.iterate.no/2011/11/17/ikke-sa-smidig-likevel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/394bb536deda5b78a5a4818d73e0e901?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">andershaugeto</media:title>
		</media:content>

		<media:content url="http://billigereogbedre.files.wordpress.com/2011/11/skjermbilde-2011-11-17-kl-13-10-44-e1321534244844.png" medium="image">
			<media:title type="html">Skjermbilde 2011-11-17 kl. 13.10.44</media:title>
		</media:content>
	</item>
	</channel>
</rss>
