Hva er smidig utvikling?


fredag 24. februar 2012 Softwareutvikling Smidig

Jeg følte bloggen min manglet en post som dette. Med fare for at jeg egentlig er 10 år for sent ute så har jeg likevel lyst til å dele noen tanker om smidig utvikling – sette foten ned og si hvor jeg står!

Det er mange som har forsøkt å definere hva smidig utvikling er for noe. Vi har jo det smidige manifestet, og vi kan si at smidig utvikling er å følge det. Eller man kan si at smidig er å bruke Scrum, å bruke Kanban, eller å følge eXtreme Programming.

Og WikiPedia sier: "Agile software development is a group of software development methodologies based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams."

For meg er smidig egentlig ganske enkelt. Det er å innse og deretter ta følgende av disse tre sannhetene:

  • Du vil aldri klare å samle alle krav til en løsning før du begynner!
     
  • Kravene vil garantert komme til å endre seg underveis!
     
  • Det vil alltid være mer å gjøre enn man har tid til!

Når man innser betydningen av disse påstandene følger resten naturlig av seg selv:

  • Man må utvikle noe som fungerer så raskt som mulig, sånn at man kan se det, vise det til andre, og gjennom det oppdage veien videre.
     
  • Man må ikke få panikk når veien endrer seg – det spiller liten rolle hva man tenkte for en uke siden hvis det ikke er det man trenger i dag.
     
  • Man må utvikle systemer på en måte som gjør at de kan endres – for eksempel ved å bruke testdrevet utvikling, og vet at alle er med og tar ansvar.
     
  • Man må sørge for at teamet har nok, delt kunnskap om løsningen og hvordan veien endrer seg, siden man ikke kan ha en ferdig plan å jobbe ut fra. Dette krever tett og hyppig kommunikasjon. Parprogrammering hjelper veldig.
     
  • Og man må prioritere hardt og gjøre det viktigste først, samtidig som man alltid har noe som er testet og fungerer – sånn at arbeidet ikke er bortkastet når tiden og pengene tar slutt.

Å jobbe smidig er mere krevende enn tradisjonell fossefallsutvikling. En smidig utvikler må beherske flere egenskaper enn programmering, han må i stor grad overta oppgavene til alle rollene som normalt sett kom både før og etter selve utviklingssteget. Dine oppgaver som en smidig utvikler er:

  • Kravanalyse og kundekontakt: Å hele tiden jobbe med å forsøke å forstå behovet til "kunden"
     
  • Prosjektplanlegging: Å hele tiden tenke smart i forhold til hva neste steg optimalt sett bør være
     
  • Design og Arkitektur: Å hele tiden tenke på hvordan løsningen bør designes for å være mest mulig fleksibel
     
  • Prosjektstyring: Å hele tiden kommunisere med alle andre team-medlemmer om endringene som skjer
     
  • Implementasjon: Å hele tiden tilføre verdi gjennom å kode løsningen med så høy kvalitet som mulig
     
  • Quality Assurance: Å hele tiden tenke kritisk og teste løsningen så effektivt som mulig

I tillegg flyter den smidige utvikleren også ofte over i en driftsrolle, fordi man ofte vil rulle ut løsningen hyppigere for å utnytte verdien som allerede finnes i systemet. En smidig utvikler er altså en generalist og en multi-tasker, med en mye mere interessant hverdag enn den tradisjonelle utvikleren.

Og med mye mere stress om man ikke fullt og helt aksepterer hva smidig egentlig betyr!

Det var alt jeg hadde å si om den saken. Les også Forvirring rundt smidig utvikling eller Utviklerprofiler og fire ferdighetskategorier.


comments powered by Disqus