Capgemini-bloggen

Capgemini-bloggen

Software Craftsmanship - ett år senere

Kategorier : SmidigTrender

Software Craftsmanship er en grasrotbevegelse som i varierende grad har påvirket vår bransje de siste ti årene. Vi programvareutviklere har kanskje ikke gjort en god nok jobb i å forklare hvorfor vi snakker om craftsmanship. Hvorfor oppsto den, hvorfor er det viktig, og hva kan vi få ut av det? 

Software Craftmanship vil formidle at programvareutvikling er et avansert håndverk som det er vanskelig å definere en komplett og entydig prosess for. En konsekvens av dette er å øke fokus på fagpersonens kunnskap og ferdigheter. Pete McBreen skrev om problemstillingen allerede i 2001 i sin bok Software Craftsmanship. Det ble likevel ikke noen særlig stor oppmerksomhet rundt begrepet før i 2009 da man fikk Software Craftsmanship Manifesto. De siste par årene har vi sett utallige konferanser, bloggposter og tweets om emnet.

Ser man på aktiviteten rundt craftsmanship i dag er det sannsynlig at vi har passert “hype-fasen”. Ledere i IT-organisasjoner sitter kanskje igjen med ansvaret for å definere hva craftsmanship betyr for organisasjonen. Det kan være en vanskelig oppgave – bildet der ute er rimelig forvirrende. Vi som jobber med programvareutvikling har kanskje ikke gjort en god nok jobb i å forklare hvorfor vi snakker om craftsmanship og hvorfor det er viktig. Har vi gjort en dårlig salgsjobb? For å forstå innholdet i Software Craftsmanship kan det være lurt å tenke over hvorfor vi fikk denne bevegelsen. Smidige prosesser har forandret mye på hvordan vi driver prosjektledelse, men vi har kanskje glemt det tekniske aspektet ved å være endringsdyktig og smidig? Martin Fowler sier det slik::

  • Organisasjoner ønsker å være smidig, og velger gjerne Scrum som metodikk
  • Man innfører praksiser og prinsipper fra Scrum med variert hell
  • Etter en stund erfarer man at progresjonen i prosjektet går ned på grunn av kvalitetsproblemer
Slike problemer resulterte i en slags identitetskrise for mange programmerere. Man fikk et behov for å øke bevissthet og klargjøre hva det betyr å være profesjonell og ansvarlig systemutvikler. Dermed har mange i løpet av de siste to år i en eller annen form måttet forholde seg til
  • Clean Code: en økt bevissthet på å skrive kildekode som er ryddig og vedlikeholdbar
  • Teknikker for programmerere inspirert av eXtreme Programming: Test Drevet Utvikling, Kontinuerlig Integrasjon, Par-programmering, refactoring m.m.
Dette er grunnleggende deler av en programmerers verktøykasse, som man kanskje føler man har måttet kjempe mot beslutningsstakere og de med budsjettansvar for å kunne bake inn i utviklingsprosessen. Jeg mener vi som fagpersoner har feilet litt på dette punktet, vi har ikke vært god nok i hvordan vi kommuniserer. Våre kunder har alltid et kost/nytte perspektiv på vår aktivitet, og vi må kommunisere gjennom dette perspektivet. La oss se for eksempel se på refactoring. En analogi:

Du har hatt elektrikeren på besøk, du har fått lys i stua og alt fungerer som det skal. Uken etterpå  får du en telefon fra elektrikeren som lurer på om han kan komme tilbake for å rydde opp i jobben han gjorde. Han sier at det fungerer slik det er - men ryddigheten i kablene er ikke slik han ønsker. Det vil koste 10 000 kr å rydde opp.

Hvordan ville vi forholde oss til det? Refactoring er en nødvendig aktivitet for oss programmerere, men vi må være pragmatiske i bruken av dette verktøyet, og vi må forklare våre arbeidsgivere hvorfor det er viktig.

Hva har vi fått ut av craftsmanship, og hva kan vi ta med oss videre?

Prinsippene i craftsmanship er fortsatt like viktige, også ett år etter “hypen”. Smidig metodikk vil aldri fungere uten de tekniske praksiser i bunn som gir endringsdyktighet. Vi teknikere må bare ikke glemme å koble vårt håndtverk til forretningsverdi. Da vil vi få større gjennomslagskraft for det vi mener er viktig. Her er noen tanker som kanskje kan være en ledetråd for videre arbeid med Software Craftsmanship:

  • Vårt mål er å løse forretningsproblemer i programvare. Vi bør alltid søke teknologi, teknikker og metodikk som best støtter problemet vi skal løse.
  • Som fagpersoner må vi være ansvarlige. Det betyr at vi må kunne gjøre pragmatiske valg. For våre kunder vil alt vi gjør være en kost/nytte vurdering. Lager man programvare som skal leve i flere tiår er sannsynligvis kvalitet, vedlikeholdbarhet og testbarhet essensielt. En perfekt kodebase er derimot feil prioritering i en løsning med kort varighet. Det er vårt ansvar som fageksperter å sørge for en balanse.
  • Verktøykasse; for å kunne være effektive og ansvarlige problemløsere må vi ha et bredt spekter av teknologi, teknikker og metodikk å kunne velge blant.
  • Dedikert trening. En verktøykasse bygges gjennom øvelse og erfaring. En systemutvikler bør ha et bevisst forhold til hvordan man øver for å hele tiden bli bedre i faget sitt.
For at disse fire punktene skal fungere ser jeg to umiddelbare forutsetninger: man må tilrettelegge for faglig utvikling, og man må gi frihet til de tekniske ekspertene slik at man kan ta tekniske avgjørelser som bidrar til høyest verdi i sluttproduktet. Beslutningstakere i forretningen må gi ansvar til systemutviklerne, og systemutviklere må vise seg ansvaret verdige ved å kunne reflektere forretningsbehov i sine valg av framgangsmåte.

Om forfatteren

oborstad
3 Kommentarer Legg igjen en kommentar
Som nyutdannet og uerfaren programmerer var det en fryd å få være med på Capgemini Summer of Code 2010 der Software Craftmanship konseptet var hovedfokus. Når jeg nå, fortsatt som nytudannet og uerfaren programmerer, har kommet ut i "ordentlig" jobb, så føler jeg at ikke klarer å opprettholde samme fokus som jeg hadde når det var "mentorer" til å både hjelpe og "tvinge" meg til å utføre arbeid med kvalitet. Ofte er det ikke viljen eller tid det står på, men evnen. Uten noen som kan pushe deg over kneika når du står fast er det vanskelig å opprettholde den kvaliteten du ønsker. Det jeg egentlig vil fram til er at jeg er helt enig i det som står over - man trenger en mentor for å bygge seg en verktøykasse som gjør arbeidet gjennomførbart.</p><p>Så klart, det er bare å spørre de mer erfarne rundt deg når du har problemer, men samtidig er det lettere for disse å bruke både tid og energi på å hjelpe deg med å utføre kvalitetsarbeid hvis bedriften eller prosjektet oppfordrer til det.</p><p>Etter min introduksjon til Craftmanship konseptet for drøye 2 år siden og til idag, så synes jeg snakken rundt det har forsvunnet mer og mer, til å nesten være borte når jeg har startet i jobb. Og det synes jeg er dumt.
oborstad's picture
Takk for tilbakemelding, Torbjørn! Veldig hyggelig å se en dedikert programmerer som deg bidra i diskusjonen. Er stor fan av programmeringsbloggen din!</p><p>Du peker på noe viktig. Å bli en dyktig programmerer er en lang lære utover det man får på skolen. Jeg leste nylig en blogg som snakket om akkurat dette: http://jgneuf.wordpress.com/2011/12/20/all-programmers-are-self-taught/</p><p>Du nevner det bedriftene kan gjøre; i tillegg vil jeg nevne det man som utøver kan gjøre: "Stand on the shoulders of giants". Boken Pragmatic Programmer snakker om dette, å finne seg gode mentorer som man kan lene seg på og trekke erfaringer av. Uformelle mentorer er utrolig verdifullt!
En fin artikkel, og et bra budskap. Jeg føler bransjen i stor grad har innsett at programmering er et "craft", og at man ønsker at utvikleren skal ta ansvaret for nødvendig kvalitet. Men at for få er bevisste dette ansvaret, og gjør alt for lite for å opparbeide og utvikle den nødvendige kunnskapen og erfaringen.</p><p>Et viktig element er å innse en gang for alle at man ikke utdanner seg til komplette utviklere; det tar mange år med ulike erfaringer å bli dyktig på de tingene som kreves for å ta ansvaret du beskriver. Derfor må vi ikke gi ansvaret til nyutdannede utviklere, men la dem gå "i lære" som man gjør i andre erfaringsbaserte fag. Og utviklere med erfaring må veilede og lære opp aspirantene.</p><p>For å kombinere dine fire punkter ønsker jeg altså at man legger opp til strukturert og planlagt trening, slik at man kan bygge opp verktøykassen og erfaringen som er nødvendig for å bli ansvarlige og løse forretningsproblemene best mulig for kunden.

Legg igjen en kommentar

E-postadressen din vil ikke bli publisert. Ønskede felter er markert *.