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 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 beschouwt.
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 voor 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 bijv. 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, waarin beginners in de leer gingen om het vak onder de knie te krijgen.
Als tegenreactie op falende projecten en de grote instroom matig getalenteerde ontwikkelaars, trachten software ontwikkelaars die staan voor hun vak zich als craftsman te onderscheiden van deze 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 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-oogcoordinatie 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 parallelen met middeleeuwse craftsman zijn het zowel ontwerpen als ontwikkelen van het product (waar dat binnen engineering vaak gescheiden is), aanwezigheid van materiaal (taal), 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. De vraag is of dit werkelijk iets toevoegd en niet een hoog open-deuren-gehalte heeft. Ik mis vooral het waarom en hoe achter deze 4 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). Je 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 combineren ze deze 2 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 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 werd, maakt je geen craftsman. Scott Norberg beschrijft dit gevaar in zijn blog 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 als 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 (bijv. 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 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.
Hoe was die reclame ook al weer:
Vakmanschap is meesterschap 🙂
Het vakgebied IT kent vele vakmannen (en -vrouwen) maar onder druk van de projecten krijgen deze vaklui doorgaans niet de tijd om de kwaliteit te leveren die ze graag zouden willen.
Goed werk heeft tijd nodig, en dat geldt ook voor het maken van software.
Goede vergelijking en leuk geschreven stuk. Zelf gebruik ik wel eens de vergelijking met de manier waarop een beeldhouwer stap voor stap uit een stuk steen een beeld moet zien te maken. Dat is hele andere koek dan als engineer een uitgewerkt bouwplan uitvoeren.
Leuke opinie, zo lees ik ze graag, geen saai verhaal maar een originele insteek.
Veruit het grootste gedeelte van mijn werkende leven heb ik software gemaakt en dat doe ik nog steeds, al schrijf ik zelf niet veel code meer.
Het maken van software geeft ongelofelijk veel voldoening, fantastisch hoe je soms met je handen in het haar zit en op een gegeven moment toch de manier vind om iets goed werkend te krijgen.
Toch zou ik mezelf een craftsman willen noemen. Mijn kracht zit in het conceptuele en het in de basis uitwerken van dat concept. Het nadeel van “Craftsman” vind ik dat het gericht is op het individu en bovendien op één taak. Het maken van software kan nauwelijks meer vanuit 1 specialisme gerealiseerd worden. Een software ontwikkelaar moet heel breed zijn en kan maar op een paar vlakken echt de diepte in (dat geloof ik althans).
Zo kom ik craftsmannen tegen die *alles* oplossen met code en bijvoorbeeld de database slechts zien als een bit-bucket.
Een simpele web-applicatie bevat al zoveel werkgebieden: Front-end, data/logica laag, authenticatie laag (Oauth 2.0, saml 2), rdms, nosql, javascript (frameworks!) en bijv. ETL processen. Software is niet het houwen van een beeld, maar het bouwen van een kathedraal.
Je hebt craftsmen nodig om de diepte in te kunnen, maar het is uiteindelijk teamwerk, misschien dat je uiteindelijk de craftsman nodig hebt om net dat ene stukje naar het allerhoogste niveau te kunnen tillen. Zeg maar de schaalbaarheid van WhatsApp.
Al ben ik het er absoluut mee eens dat je bepaalde software kwaliteit alleen maar kan bereiken als er een bepaald niveau aanwezig is.
Daarnaast lijkt code soms wel te leiden tot religie en religie verblind.
“Toch zou ik mezelf een craftsman willen noemen.”
Hier bedoel ik “geen” niet “een”.
Daarnaast: Coderen is slechts 1 onderdeel van het maken van software, denk ook aan deployen, testen, onderhoudbaarheid, resilience.
Kansloos tegen het “Enterprise manifesto” :
Time to market over control and quality.
Certified millenial over proven mastership.
Following latest trend over knowledge and experience.
Releasing after smoketest over strong architecture.
Software ontwikkelen is inderdaad een vakmanschap.
Alleen krijg je niet altijd de indruk als je bij een sollicitatie/intake gesprek waarbij de interviewer blijkbaar mee waarde hecht aan je uiterlijk, sociale vaardigheden en of je wel braaf naar de baas gaat luisteren. Dan krijg je de indruk dat je opleiding en certificaten secundaire of zelfs tertiaire zaken zijn.