Selecteer de taal

Stel je een mechanische werkplaats voor. Je komt met een probleem dat zij oplossen. Wat verwacht je? Je verwacht met hen samen te werken, grofweg in de volgende vijf stappen:

  1. Specificeer. Je beschrijft het probleem in de vorm van een functionele specificatie
  2. Ontwerp. Ze gaan een tekening maken
  3. Onderdelen. Zij (mogelijk meerdere mensen parallel) zullen het ontwerp gebruiken om onderdelen te selecteren en te vervaardigen
  4. Product. Ze zullen de stukken aan elkaar lassen tot het ding dat je nodig hebt
  5. Test. Je test het en het kan kleine aanpassingen vereisen

Stel je nu een softwareworkshop voor. Je komt met een probleem dat zij oplossen. Wat verwacht je?

  1. Specificeer. Je beschrijft het probleem in de vorm van een functionele specificatie
  2. Product. Zij zullen de softwaretool maken
  3. Test. Je alfatest, ze repareren, je bètatest, ze repareren. Herhaal tot bevredigend

Hoe komt het dat deze lijst slechts drie in plaats van vijf stappen bevat? En waarom veroorzaakt de laatste stap altijd zoveel pijn? Zou dit verschil de oorzaak kunnen zijn waarom zoveel softwareproducten falen? Wat is het echte verschil tussen software- en hardwareontwikkeling?

In plaats van te proberen het softwareprobleem in één keer op te lossen, stelt u zich eerst een hardwarewerkplaats voor die als volgt werkt:

  1. Specificeer. Je beschrijft het probleem in de vorm van een functionele specificatie
  2. Product. Ze zullen materialen aan elkaar lassen tot een stuk gereedschap
  3. Test. Je test, zij repareren, je test opnieuw, zij repareren. Herhaal tot bevredigend

Hoe waarschijnlijk is het dat deze procedure sneller is dan de procedure in vijf stappen? Hoe duidelijk is het welke stukken aan elkaar moeten worden gelast? Kunnen hierdoor meerdere mensen samenwerken aan het product? En hoeveel werk is het testen voor jou? Hoeveel afval komt er vrij in het proces? Je zou dit soort beunhazerij niet accepteren! En mijn punt: je moet het ook niet accepteren van een softwarewerkplaats.

Een goede softwarewerkplaats zou dezelfde vijf stappen gebruiken als de goede mechanische werkplaats:

  1. Specificeer. Je beschrijft het probleem in de vorm van een functionele specificatie
  2. Ontwerp. Zij maken een (modulair) ontwerp
  3. Stukken. Zij (eventueel meerdere programmeurs parallel) zullen het ontwerp gebruiken om softwaremodules te bouwen en te selecteren
  4. Product. Zij zullen de modules gebruiken om de software te bouwen die je nodig hebt
  5. Test. Je test het en er zijn misschien kleine aanpassingen nodig

Investeren in een ontwerp zal resulteren in een oplossing die het gestelde probleem echt oplost en geen eindeloze iteraties vereist om het goed te krijgen. Het lijkt misschien een trage oplossing, maar dat is bedrog: je krijgt daadwerkelijk een resultaat dat je brengt waar je wilt zijn, ook als je in de toekomst nieuwe aanvullende wensen hebt.

(Ik wil graag een oud-collega bij Bruker AXS bedanken die me deze mooie vergelijking heeft gegeven. Ik weet dat hij anoniem wil blijven op het internet. Beeldcredits: Dystopos op Flickr)