Follow Us on Twitter

Door vakmanschap de kwaliteit van software verbeteren

Gepubliceerd in

Oktober 2014 - Al sinds de introductie van het Manifesto for Software Craftmanship, is er een discussie over softwareontwikkeling als vakmanschap. We kunnen voorzichtig zeggen dat er nogal wat ophef is ontstaan rond het Manifesto en een aantal van de reacties die erop zijn gegeven. Wat kunnen we van deze discussie leren en welke kansen liggen er als we ontwikkelen van software als vakmanschap beschouwen? Waarom is hier zoveel discussie over? Hoe kunnen we bepaalde elementen ervan meenemen in onze dagelijkse werkzaamheden en zijn er ook aandachtspunten? In dit Whitebook ga ik hier verder op in.

Manifesto voor software vakmanschap

Het Manifesto bestaat uit de volgende regels:

  • Not only working software, but also well-crafted software
  • Not only responding to change, but also steadily adding value
  • Not only individuals and interactions, but also a community of professionals
  • Not only customer collaboration, but also productive partnerships

Waarbij wordt gezegd dat om de zaken aan de linkerkant te bereiken, de zaken rechts onmisbaar zijn.

Het is een reactie op het Agile Manifesto en legt nog meer de nadruk op programmeervaardigheden van de ontwikkelaars en de kwaliteit van de software. Onder de druk van snel software in de markt zetten wordt er vaak minder geïnvesteerd in de kwaliteit ervan. Het verhogen van de kwaliteit zou ten koste gaan van de snelheid waarmee een product naar de markt kan worden gebracht.

Dilbert on productivity (Comic Strip 1993-08-28)
Bron: http://dilbert.com/strips/comic/1993-08-28/

De snelheid waarmee teams in het begin ontwikkelen kan in een later stadium flink stagneren door een gebrek aan kwaliteit. Elke wijziging kan op een aantal andere plaatsen in de code voor problemen zorgen. De hoge snelheid aan het begin van het project verlies je daardoor vanaf een bepaald moment. Robert C. Martin auteur van Clean Code: A Handbook of Agile Software Craftmanship laat dit effect in de volgende grafiek zien.

Effect van kwaliteitsverlies op productiviteit
Bron: What Is Clean Code?

Als er te weinig aandacht is voor de kwaliteit van de software, is de basis vaak zwak en bestaat er meer kans op foutgevoelige onderdelen. Het oplossen van problemen en onderhoudsupdates verzwakken deze basis nog verder en zorgen ervoor dat iedere wijziging moeilijker wordt. De kosten van het onderhoud van software zullen alleen maar verder stijgen (lees ook The economics of software maintenance in the twenty first century). De kwaliteit van de software bepaalt voor een belangrijk deel deze kosten.

Daarom gaat dit Manifesto een stap verder dan het Agile Manifesto. Waar het Agile Manifesto uitgaat van: werkende software boven allesomvattende documentatie, legt het Manifesto voor software vakmanschap de nadruk op de kwaliteit van de software.

Een van de belangrijkste onderdelen van vakmanschap is het vak in leven houden en verder ontwikkelen door de overdracht van kennis.

Leren gebeurt op verschillende manieren, maar vooral door al vroeg deel te nemen aan het proces en door informele contacten met vakgenoten (community of professionals). Door goed op te leiden gaat uiteindelijk de kwaliteit omhoog. Het opleiden is essentieel.

De tegengeluiden

Het belangrijkste tegengeluid komt van Dan North in zijn blog post Programming Is Not A Craft. Het Manifesto maakt de software belangrijker dan de voordelen die het moet opleveren voor de klant. Door een gemeenschap op te bouwen die gericht is op het verbeteren van technische vaardigheden ben je vooral intern gericht. De grootste uitdaging van softwareontwikkeling ligt juist in het overwinnen van barrières. Barrières tussen ontwikkelafdelingen en andere bedrijfsonderdelen, tussen ontwikkelaars en de gebruikers van hun software. Door je af te zonderen om je te richten op kwaliteit raak je verder verwijderd van diegene waar we het allemaal voor doen: de klant.

Er zijn verschillende geluiden. Als we hier goed naar luisteren wat kunnen we hiervan meenemen in ons dagelijks werk? Kwaliteit is doorslaggevend in de kosten van een software product. Het verbeteren van de kwaliteit begint bij een goede opleiding en voortdurend leren. Om de kwaliteit in je eigen omgeving te verbeteren, moet leren onderdeel worden van onze dagelijkse werkzaamheden.

Voortdurend leren

Er wordt te weinig geïnvesteerd in het op peil houden of verbeteren van de vaardigheden van mensen. Zeker op de werkvloer waar de nadruk ligt op het produceren van code ten behoeve van een product. Er zijn veel mogelijkheden om te leren en de vaardigheden te verbeteren. Doordat de kwaliteit van de ontwikkelaars omhoog gaat, gaat de kwaliteit van de software ook omhoog. Door te investeren in lesgeven, investeer je indirect in de kwaliteit van het product.

Leren door te doen en daarop te reflecteren

  • Zelf software ontwikkelen is uiteindelijk de beste leerschool;
  • Peer review
    Peer review is een software review waarbij de code wordt onderzocht en beoordeeld door een collega. Het doel is om zo vroeg mogelijk fouten te detecteren en direct te corrigeren. De collega’s raken op deze manier ook bekend met andere delen of modules van het project waar ze zelf niet aan gewerkt hebben. De kwaliteit gaat omhoog doordat er meer mensen naar de code hebben gekeken.
  • Pair Programming
    Pair programming gaat ervan uit dat twee programmeurs samen achter één computer werken aan hetzelfde stuk code. Er wordt continu kennis gedeeld tussen de twee programmeurs, van tips over het gebruik van de programmeertaal tot ontwerpkeuzes. Pair programming geeft een ontwikkelaar ook de kans om terug te koppelen op basis van de code. De programmeur ontwikkelt vaardigheden om beter op het eigen werk te reflecteren. Een bijkomend voordeel van pair programming is dat de kwaliteit van de code en de gekozen oplossingsrichting omhoog gaat (The
    Costs and Benefits of Pair Programming
    van Alistair Cockburn en Laurie Williams is interessant).
  • Code Kata
    In tegenstelling tot wat er veelal gedacht wordt is alleen maar het schrijven van productiecode niet hetzelfde als echt oefenen van bepaalde vaardigheden. Je moet tijd reserveren om geconcentreerd te oefenen om ergens beter in te worden. Net als bij sport trainen mensen met een goede conditie regelmatig en ze moeten dit volhouden anders gaat de conditie achteruit. Voor programmeren geldt hetzelfde. Het concept van de Kata is afkomstig uit de oosterse vechtkunsten, waarbij men een stijloefening doorloopt met een reeks vastgestelde bewegingen. De Code Kata is een poging het element van gericht oefenen te introduceren binnen softwareontwikkeling. Kijk voor een aantal voorbeelden op codekata.com, katas.softwarecraftsmanship.org en github.com/paulwpagel/codekata.

    Kata Guruma
    Kata Guruma

  • Les geven
    Volgens het principe "The best way to learn is to teach" van Frank Oppenheimer.

Leren door te kijken bij anderen

  • Peer review
  • Pair programming
  • Code bekijken
    Door te kijken naar de code van anderen kun je veel leren. Veel softwareprojecten zijn vrij toegankelijk. Een goed voorbeeld is Github, een grote hosting partij van software waar veel open source projecten beschikbaar zijn voor iedereen.
  • Coding Dojo
    Een Coding Dojo is een meeting waarin programmeurs samenkomen om te werken aan programmeeropdrachten (dit kunnen de al genoemde code Kata's) zijn. Er wordt geprogrammeerd aan de opdracht in een kort tijdsbestek (1 of 1,5 uur), waarbij het publiek meekijkt tijdens de oefening. Een van de belangrijkste elementen is dat er geen code mag worden geschreven zonder dat er eerst een test is geschreven (Test Driven Development). Het doel is dat ook de aanwezigen na afloop thuis de oefening kunnen doorlopen. Voor meer informatie kunt u kijken op www.codingdojo.org.

Leren door onderzoek te doen

  • Boeken lezen
  • Artikels schrijven
    Binnen Whitehorses schrijven we bijvoorbeeld allemaal artikelen in de vorm van Whitebooks en op ons blog.
  • Conferenties bezoeken
    Conferenties zijn mogelijkheden om nieuwe kennis op te doen, maar misschien nog wel belangrijker: ze wakkeren de passie aan. Ze zijn een motivatie om te willen blijven leren en geven je een richting op basis van de laatste ontwikkelingen.
  • Communities
    Er zijn tal van communities die regelmatig bij elkaar komen om van elkaar te leren en kennis te delen. Het grootste netwerk met lokale groepen is Meetup. Hier kun je makkelijk een groep vinden met een bepaald interessegebied. Zo kun je hier een overzicht vinden van alle meetup groepen die gericht zijn op software vakmanschap.

Leren door verandering

  • Leer verschillende talen en tools
    Door verschillende soorten talen te leren en met verschillende tools te werken kun je je kennis en begrip van softwareontwikkeling enorm verbeteren. Binnen Whitehorses organiseren wij jaarlijks een Developer Derby, hierin geven we ontwikkelaars de kans met nieuwe technologieën te werken tijdens een enerverende wedstrijd.
  • Leren door een andere rol te vervullen
    Doordat je een ander aandachtsgebied hebt binnen softwareontwikkeling leer je ook de vaardigheden die daarbij komen kijken. Verschillende perspectieven helpen je ook om objectiever naar problemen te kijken.
  • Draag bij aan opensource projecten
    Het is ook mogelijk om bij te dragen aan opensource softwareprojecten. Als je hier graag hulp bij willen hebben van een mentor, kijk dan eens op openhatch. Dit is een non profit organisatie die ontwikkelaars helpt bij het vinden van een geschikt project en begeleiding biedt.

Aandachtspunten

Zoals je ziet zijn er veel mogelijkheden om te leren en om steeds beter te worden in ons vak, maar waar is de klant? Hoe kun je goede software schrijven en ontwerpkeuzes maken als je niet begrijpt hoe de klant het daadwerkelijk gaat gebruiken? Een goed begrip van de bedrijfsvoering van de klant leidt tot betere software. Hier moeten de organisaties het initiatief nemen door kennisoverdracht te faciliteren tussen de gebruiker en de ontwikkelaar. Laat een ontwikkelaar eens een dag meelopen met de gebruikers. Bij het bepalen van de acceptatietesten kunnen we gebruikers en ontwikkelaars al bij elkaar brengen. Het zorgt ervoor dat er een duidelijker beeld is over wat we doen en waarom we het doen. Net zo goed als er kennis kan worden overgedragen tussen de ontwikkelaars kunnen we actief stimuleren dat ontwikkelaars en gebruikers kennis delen.

Tot slot

In dit Whitebook heb ik een aantal manieren benoemd waarop je kunt leren. De beste manier om te leren is door les te geven. Door lesgeven aan te moedigen draag je zorg voor continu leren. Binnen Whitehorses hebben we Rodeo’s waarin een collega les geeft of een workshop verzorgt. Daarnaast hebben we regelmatig trainees die onder begeleiding kennis maken met het vak. Maar nog veel belangrijker is dat leren onderdeel moet worden van ons dagelijkse werk. Opzettelijk en gericht lesgeven als onderdeel van de werkzaamheden. Alleen hiermee kun je op termijn de kwaliteit van je product verhogen. Leren doe je in een vertrouwde en veilige omgeving. Het belangrijkste advies is om hier ruimte voor te creëren. Investeer in een cultuur van lesgeven. Hier liggen ook kansen om de afstand tussen de ontwikkelaar en de klant te slechten. Er zijn nog te weinig conferenties of communities waar zowel ontwikkelaars als de gebruikers van de software elkaar ontmoeten. We hebben dus nog een weg te gaan.

Referenties:

Waardering:
 

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.