Software craftsmanship draait om passie en trots

Door Victor van der Hulst In Smart@Vantage

De term craftsmanship wordt steeds meer gebruikt door software developers als een reactie op de negatieve berichtgeving rondom falende softwareprojecten bij organisaties. Waar komt dit vandaan en is het een goede ontwikkeling? Zorgt craftsmanship voor betere software? Of dien je als opdrachtgever vooral waakzaam te zijn voor deze zelfbenoemde craftsman? Passie én trots zijn doorslaggevend. In deze blog leg ik uit waarom.

Pete McBreen, een van de eerste die de term hanteert, schrijft in zijn boek Software Craftsmanship (2001):

Becoming a good software developer involves a lot more than just learning to write programs. Software development is a craft, it blends science, engineering, mathematics, linguistics and art.

Een interessante beschouwing die wat uitwerking vereist. Tot nu toe werd software development veelal als engineering beschouwd.

Historie in engineering

Grote softwareprojecten kenden tot voor kort veelal een ‘engineering’ insteek. We spreken daardoor ook vaak over een software engineer. Engineering houdt zich bezig met het ontwikkelen en construeren van producten en systemen waarbij natuurwetenschappelijke kennis wordt aangewend. Voorbeelden zijn bouwkunde, civiele techniek en werktuigbouwkunde. Nadruk ligt op plannen en het maken van een gedetailleerd ontwerp voordat de bouw start (waterval). Binnen engineering is er veel aandacht voor processen om beheersbaarheid, meetbaarheid en voorspelbaarheid te waarborgen. Dit leidde ook tot de opkomst van licensering, certificering (denk aan Microsoft, Oracle, etc.) en handboeken voor het uitwisselen van engineeringskennis en het volwassen maken van het vakgebied.

Met de opkomst van Agile werken en de nadruk op agility (in plaats van voorspelbaarheid), is software development een creatiever proces gaan lijken dan engineering. Het is meer creëren dan bouwen. Software development is een jong beroep zonder noemenswaardige minimale instapeisen. Er zijn geen verplichte opleidingen, beschermde titels of rankings beschikbaar om de vakbekwaamheid te meten, zoals bijvoorbeeld voor een arts of advocaat. Tevens hebben bedrijven als Microsoft, destijds met talen als Visual Basic, programmeren toegankelijk gemaakt voor de massa. Deze eenvoudige instap, de ruime beloning en het fysiek lichte werk hebben een grote aantrekkingskracht op de arbeidsmarkt gehad, waardoor een groot verschil in vaardigheden is ontstaan in het vakgebied. Reputatie bepaalt dan ook vaak het niveau van de software ontwikkelaar, omdat objectieve maatstaven ontbreken.

Tegelijkertijd is software development een arbeidsintensieve industrie geworden. Ontwikkelaars zijn inmiddels de duurste resources in een softwareproject. In de geschiedenis werd craftsmanship vaak toegepast bij ambachten met dure arbeidskrachten en lastig aan te leren vaardigheden, waar beginners in de leer gingen om het vak onder de knie te krijgen.

Als tegenreactie op falende projecten en de grote instroom van matig getalenteerde ontwikkelaars, trachten software ontwikkelaars die staan voor hun vak zich als craftsman te onderscheiden van de massa.

Wat is een craftsman?

Er wordt vaak een parallel getrokken met Europa in de middeleeuwen, waarin vaklieden in een gilde, een soort beroepsgroep, werden opgeleid tot een vakman met een meester-gezel aanpak. Denk aan de opleiding tot advocaat of medisch specialist. In een gilde werd kennis en ervaring uitgewisseld. Nieuwe gildeleden werden opgeleid in het vak. Na een gedegen opleiding kon een leerling erkend worden als vakman met de titel gezel en uiteindelijk de titel ‘meester’ verkrijgen na het doen van de gilde- of meesterproef. Het gilde behartigde de belangen van de gildeleden en beschermde hen. Vaak had een gilde het alleenrecht op het uitoefenen van het vak, wat leidde tot de zekerheid van kwaliteit van het werk, soms zelfs tot een monopolie.

Een groot maatschappelijk nadeel van de gilden was de corrumperende werking van het monopolie. De eeuwenoude werkwijzen mochten niet vernieuwd, laat staan veranderd worden. Iemand met vernieuwende ideeën moest dus ofwel lid worden van het gilde (en deze ideeën dus opgeven), ofwel een ander beroep kiezen.

(http://nl.wikipedia.org/wiki/Gilde_(beroepsgroep))

Overeenkomsten met software development

In zijn blog (http://blog.8thlight.com/doug-bradbury/2009/08/22/why-software-development-is-a-craft.html) beschrijft Doug Bradbury dat een ‘craft’ historisch gezien wordt bepaald door een belangrijke samenwerking tussen de handen en de ogen van de vakman. Een glasblazer kan door een getrainde hand-oogcoördinatie het perfecte glas blazen. Alleen wanneer het effect snel zichtbaar is kan de handeling worden bijgestuurd om het resultaat te perfectioneren. Agile werken propageert een iteratief proces waarin met korte sprints werkende (zichtbare) software wordt opgeleverd. Elke sprint biedt de mogelijkheid de handelingen bij te sturen, net als de craftsman uit de middeleeuwen. Daar waar engineering kiest voor een gedetailleerd ontwerp vooraf met weinig ruimte voor bijsturing.

Andere parallellen met de middeleeuwse craftsman zijn het zowel ontwerpen als ontwikkelen van het product (waar dat binnen engineering vaak gescheiden is), de aanwezigheid van materiaal (taal), de tooling en de wijze van leren (meester-gezel/by doing). De uitdaging is nu dat een niet getrainde glasblazer geen fatsoenlijk glas geblazen krijgt en zich daarom geen glasblazer (craftsman) kan noemen. Een middelmatige software developer kan echter wel een werkende applicatie opleveren, waar de opdrachtgever blij mee is. Het is voor de opdrachtgever simpelweg niet zichtbaar hoe de software ‘onder de motorkap’ is ontstaan. Om er toch iets over te kunnen zeggen is er in parallel met het Agile manifesto een Craftsmanship manifesto opgesteld (http://manifesto.softwarecraftsmanship.org/). De vraag is of dit werkelijk iets toevoegt en niet een hoog open-deuren-gehalte heeft. Ik mis vooral het waarom en hoe achter deze vier principes. Daarnaast staat het een ieder vrij het manifesto te tekenen, zonder dat er naar de staat van dienst wordt gevraagd of gekeken. Er is meer invulling nodig in mijn optiek. Ik geef een voorzet.

Eigenschappen en verleidingen van een craftsman

Een goede software developer onderscheidt zich door kennis en vaardigheden. Kennis van talen, architectuur, design patterns, methodieken en frameworks. Deze kennis is echter niet uniek en vrij toegankelijk en beschikbaar op het internet. Voor vaardigheden is het een ander verhaal. Vaardigheden leer je aan door te oefenen. Oefening baart kunst. Vaardigheden zijn doorslaggevend in het succes en de kwaliteit van een software ontwikkeltraject. Vooral omdat kennis voor iedereen toegankelijk is. We zien dit ook terug in de definitie van McBrean, die het een samensmelting van wetenschap, techniek, wiskunde, taalkunde en kunst noemt. Vooral bij de laatst genoemde ligt het zwaartepunt op vaardigheden.

Vaardigheden als software testen, adviseren, analyseren, ‘clean coding’, communiceren met stakeholders, plannen, samenwerken en misschien wel het belangrijkste: blijven verbeteren (leren). Jezelf constant de vraag stellen hoe het de volgende keer beter kan worden gedaan, zowel technisch als in de samenwerking. Engineering speelt hier ook een belangrijke rol. Binnen Groupon (http://www.slideshare.net/AndyMaleh/software-craftsmanship-vs-software-engineering-13620307) combineren ze deze twee stromingen door te stellen dat:

While engineering is about the macro goal of delivering economical software that is reliable and efficient, craftsmanship is about the micro process of mastering the skills to achieve that macro goal.

Ik ben dan ook van mening dat een software developer zich als craftsman moet inzetten door ernaar te streven steeds beter te worden in het vak. Elke volgende opdracht kan beter (sneller, goedkoper, fraaier) worden uitgevoerd dan de vorige, doordat de vaardigheden weer beter zijn getraind. Belangrijk is wel om de vaardigheden goed in te zetten. Het doel van een software ontwikkeltraject is het opleveren van werkende software die voldoet aan de eisen van de stakeholders. Niets meer en niets minder. Een Rolls Royce maken terwijl een Golf gevraagd wordt, maakt je geen craftsman. Scott Norberg beschrijft dit gevaar in zijn blog (http://www.infoworld.com/article/2895914/application-development/does-software-craftsmanship-make-project-success-harder-to-attain.html) aan de hand van zijn ervaringen als fluitreparateur. Als vakman voerde hij reparaties uit die een veelvoud kostten van de waarde van de fluit. Tevens werd de fluit voor de eigenaar moeilijker te bespelen. Als vakman schoot Scott door. In zijn betoog overigens ook. ‘Gold plating’ ligt bij een ieder met een passie op de loer. Juist de professionaliteit van de engineer waakt voor onrendabele keuzes. Het gaat om vaardigheden die aangewend worden om het resultaat te bereiken, niet zozeer het resultaat.

Kwaliteit en gereedschap

De benodigde vaardigheden betreffen ook het inzetten van de juiste tooling en technieken zoals unit testing, DevOps/continuous deployment, standaardisering, design patterns, etc. Met juiste bedoel ik vooral die technieken en tools die bijdragen aan het gevraagde resultaat. Die passend zijn bij de werkzaamheden. Het lijkt voor de hand te liggen, maar juist de vaardigheid de juiste te kiezen vergt veel oefening of kennisdeling. Dit vergt ook veel inzicht en begrip van de wensen en behoeften van de opdrachtgever. Voor throw-away software (bijvoorbeeld eenmalig voor een evenement) gelden andere eisen aan ontwerp en onderhoudbaarheid dan bijvoorbeeld een webshop.

Passie en trots maken een software craftsman

Welke eigenschappen maken dan een software craftsman? Neil Roodyn (http://www.roodyn.com/Downloads/Software%20Development%20Craft%20vs.%20Engineering.pdf) komt tot:

  • Een craftsman wijdt zijn werkende leven aan het beter worden in zijn vak;
  • Een craftsman leert vaardigheden als ‘gezel’ in de praktijk;
  • Een craftsman streeft beheersing van het vak na;
  • Een craftsman leert beginners het vak als ‘meester’;
  • Een craftsman bouwt een reputatie op basis van wat hij oplevert, niet op basis van gehaalde examens;
  • Een craftsman werkt nauw samen met de klant om te kunnen realiseren wat gevraagd wordt;
  • Een craftsman bespreekt implicaties met de klant;
  • Een craftsman verzekert zichzelf dat de klant tevreden is met het resultaat;

Met andere woorden: passie voor het vak en trots op het resultaat zijn doorslaggevend. Passie zorgt voor continu leren en delen van vaardigheden met vakgenoten. Trots zorgt er juist voor dat de craftsman ook zijn ‘handtekening’ op het resultaat durft te zetten omdat hij én de klant tevreden zijn met het resultaat. Passie en trots hebben direct invloed op reputatie, waardoor de positie van de craftsman stijgt in de markt. Hierdoor onderscheidt de craftsman zich van de massa.

Meer informatie

victor-van-der-hulst

Victor van der Hulst

Managing Consultant

+31 6 22 98 68 76 Stuur Victor een e-mail

Reacties

Er zijn nog geen reacties op dit bericht.

Plaats een reactie

Dit veld is verplicht.

Vul een geldig e-mailadres in.

Dit veld is verplicht.