In de wereld van softwareontwikkeling is het niet altijd eenvoudig voor opdrachtgevers om de juiste keuzes te maken. Er zijn namelijk veel verschillende methoden, technieken en filosofieën die worden gebruikt om software van hoge kwaliteit te leveren. Als opdrachtgever is het belangrijk om te weten waar u op moet letten en welke aanpak het beste past bij uw behoeften.
Dit artikel biedt een overzicht van de belangrijkste aspecten van softwareontwikkeling, van Agile tot DevOps en van CD/CI tot versiebeheer. Hierdoor krijgt u als opdrachtgever een beter inzicht in de verschillende werkwijzen en kunt u de juiste keuzes maken voor uw project. Voelt u zich vrij om uw ontwikkelaar om meer informatie te vragen als het niet helder is welke methode zij standaard hanteren.
De waterval-methode (grote projecten)
De watervalmethode is een traditionele methode voor softwareontwikkeling, waarbij elke fase van het project strikt gescheiden is van de volgende. Het is een sequentiële methode, waarbij elk project vooraf in sterk gedefineerde fases wordt opgedeeld en elke fase pas begint als de vorige volledig is afgerond. Deze methode is wat gedateerd en komt het meest voor bij enorm grote projecten, zoals van overheden, waarbij het belangrijk is om de voortgang te bewaken door fases definitief te sluiten. Hoewel deze methode vaak wordt bekritiseerd vanwege het ontbreken van flexibiliteit, kan het in de juiste omstandigheden nog steeds zeer effectief zijn. Mits er een goede voorbereiding aan vooraf ging.
De V-methode (kritieke projecten)
Deze methode lijkt sterk op de watervalmethode. Het verschil zit hem in het feit dat in dit model testen in elke fase van het ontwikkelingsproces worden geïntegreerd om de kwaliteit van het eindproduct te waarborgen. Het V-model wordt vaak gebruikt bij kritieke systemen, zoals in de lucht- en ruimtevaart en de medische industrie. Hoewel deze methode zo specialistisch is dat het vrijwel nergens anders wordt gebruikt, is het toch van cruciaal belang voor de veiligheid en betrouwbaarheid van deze systemen. In de commerciële sector wordt de DevOps filosofie vaak gebruikt als equivalent. Hierover later meer.
De Agile-methode (reguliere projecten)
Agile is een pure methode gericht op het plannen en beheersen van softwareontwikkeling, met een focus op iteratieve ontwikkeling van software in kleine stappen genaamd sprints. Na elke sprint is er opnieuw overleg en, indien nodig, bijsturing, ook wat betreft prijs. In tegenstelling tot de watervalmethode kunnen sommige sprints parallel lopen. Deze methode wordt momenteel veel gebruikt omdat het de complexiteit van softwareontwikkeling behapbaar maakt voor zowel opdrachtgever als ontwikkelaar. Scrum en Kanban zijn varianten van deze methode. De voorganger van de Agile-methode is de Incrementele methode, maar hierbij lag de nadruk op de software zonder de samenwerking en communicatie van het team daaromheen.
De spiraal-methode (risicovolle projecten)
De spiraalmethode is, net als de Agile-methode, een iteratieve methode. Maar deze methode is gericht op het beheersen van risico's in het ontwikkelproces. De ontwikkeling van het project verloopt in cycli waarbij elke cyclus begint met het identificeren van doelen en risico's voor die cyclus en voor het totale project tot dat punt. Vervolgens wordt er een prototype ontwikkeld om deze doelen en risico's te testen en te verifiëren. Op basis van de bevindingen uit de prototypefase wordt de ontwikkeling aangepast en geoptimaliseerd. Deze methode is vooral geschikt voor risicovolle projecten met veel veranderingen en een hoge mate van onzekerheid over de totale haalbaarheid. Deze methode is er tevens op gericht om de investering zo min mogelijk te verspillen door, indien nodig, zelfs zo vroeg mogelijk 'de stekker uit het project te trekken'.
De Lean filosofie (budget projecten)
Dit is geen pure methode, maar eerder een filosofie die samen met een methode kan worden gebruikt. Het is gericht op het minimaliseren van verspilling in processen, zowel in de bedrijfsprocessen van de softwareschrijver als in de softwareontwikkeling zelf. Het doel is om elke euro van de opdrachtgever maximaal te benutten. Dit kan bijvoorbeeld worden bereikt door de complexiteit te verminderen en te bedenken wat echt noodzakelijk is, maar ook door overbodige vergaderingen en overlegmomenten te verminderen. Deze filosofie is vooral geschikt voor prototyping en minimum viable products, hoewel het altijd kan worden toegepast. Het is de meest directe route naar resultaat met zo min mogelijk verspilling, maar het resultaat kan wel minimaal zijn.
De DevOps filosofie (moderne projecten)
Dit is geen pure methode, maar eerder een hybride van een methode en filosofie. DevOps richt zich voornamelijk op het automatiseren van het ontwikkelen, testen en implementeren van software, maar het is meer dan dat. Het is ook gericht op het verbeteren van de samenwerking tussen ontwikkeling en operations om software van hoge kwaliteit sneller en betrouwbaarder te kunnen leveren. DevOps omvat agile en lean principes, zoals iteratieve ontwikkeling en continue verbetering. Het heeft echter ook aandacht voor de software en leefomgeving in zijn volledigheid, en werkt bij de ontwikkeling en oplevering veel geautomatiseerd om snel en nauwkeurig resultaten te behalen in elke omgeving. Over die omgevingen hebben we het later uitgebreider.
Interlude; halverwege de eindstreep
Als u het tot hier hebt gehaald, dan is het tijd voor een slokje water. Er zijn nog enkele termen om te bespreken en daarna heeft u alle relevante informatie om uw volgende project in te laten richten zoals dit voor uw organisatie het beste past. Neem even een pauze en kom dan terug om samen de eindstreep te halen.
SDLC; een gestructureerde leidraad voor efficiënte softwareontwikkeling
Het is tijd voor wat laatste termen. Te beginnen met SDLC. Dit staat voor 'Software Development Life Cycle'. Het is geen ontwikkelmethode of filosofie, maar een raamwerk om een project in te richten. Het biedt een generieke leidraad die bestaat uit zes fases:
- Analyse van de behoeften (ook wel 'inventarisatie')
- Planning
- Architectuur (ook wel 'ontwerp')
- Ontwikkeling
- Testen
- Implementatie (ook wel 'uitrollen')
Het volgen van SDLC kan helpen om software efficiënter en gestructureerder te ontwikkelen, dankzij de duidelijke richtlijnen voor elk stadium van het ontwikkelproces. SDLC kan worden gebruikt in combinatie met verschillende methoden en filosofieën en is schaalbaar, van grote watervalstappen en korte Agile-sprints tot minuscule DevOps iteraties. De laatste stap van SDLC is echter bijzonder en kan alleen worden gerealiseerd met de DevOps-filosofie. DevOps maakt het namelijk mogelijk om de allerkleinste stappen, zelfs veel kleiner dan een Agile-sprint, uit te rollen. Ook naar productieomgevingen. Hoewel de Agile-methode het resultaat van een sprint bespreekt met de opdrachtgever, gebeurt dit nog altijd in een gecontroleerde omgeving. Om dit verder toe te lichten, moeten we eerst de verschillende omgevingstypes bespreken.
Van ontwikkeling tot productie: een kijkje in de verschillende softwareomgevingen
- Ontwikkelomgeving
Dit kan variëren van een thuiswerkplek tot een kantoorwerkplek. Het is de plek waar de softwareontwikkelaar de code schrijft en voor het eerst uitprobeert om te bevestigen dat het doet wat het moet doen. - Integratieomgeving
Dit is vaak op kantoor, maar kan ook een server zijn in een datacentrum. Het is de plek waar het werk van één of meerdere ontwikkelaars voor het eerst samenkomt en samengevoegd wordt door middel van versiebeheer. - Testomgeving
Als het samenvoegen in de vorige omgeving slaagt, krijgt de software een versienummer en komt het in deze omgeving terecht. Hier werken QA (Quality Assurance) medewerkers aan het controleren of de software werkt zoals bedoeld, geen onbedoelde bijwerkingen heeft en of er geen regressie optreedt. - Stagingomgeving
Dit is de omgeving die voor het eerst ook toegankelijk is voor personen anders dan personeel van het softwarebedrijf. Stagingomgevingen zijn vaak gedeeld met de opdrachtgever, en soms met andere betrokken partijen. Het is belangrijk dat een stagingomgeving zo identiek mogelijk is aan de productieomgeving om zeker te zijn dat de software zich in deze omgeving hetzelfde gedraagt als in de productieomgeving. - Productieomgeving
Dit is de omgeving waar de software uiteindelijk beschikbaar zal zijn voor alle gebruikers. In het geval van een webwinkel is dat op het openbare internet, toegankelijk voor alle consumenten. In het geval van industriële software is dit de fysieke fabriek waar de software daadwerkelijk gebruikt zal worden.
Terugkomend op SDLC en het verschil tussen Agile sprints en DevOps iteraties: in het geval van Agile wordt het resultaat vaak in de integratie- of testomgeving samen met de opdrachtgever bekeken en besproken. Bij DevOps wordt het resultaat echter in de stagingomgeving met de opdrachtgever beoordeeld en kan het na goedkeuring zelfs direct in de productieomgeving worden uitgerold. Door de betrouwbaarheid van de automatisering binnen DevOps is het uitrollen van de zesde fase van SDLC mogelijk in zowel de staging als de productieomgeving. Bij de Agile-methode is dat niet aan te raden.
Hoe SDLC en DevOps elkaar versterken voor betrouwbare softwareontwikkeling
DevOps is een populaire aanpak in de softwareontwikkeling van de laatste jaren. Belangrijke termen binnen DevOps zijn Continuous Development (CD) en Continuous Integration (CI). Deze termen verwijzen naar geautomatiseerde stappen die worden genomen binnen de DevOps iteraties, waardoor de code snel en betrouwbaar door alle omgevingen heen kan worden gestuurd. Het opzetten van een CD/CI-pipeline vereist enige inspanning, maar het biedt de garantie dat elke iteratie op dezelfde consistente wijze kan worden uitgerold, zelfs tot in de productieomgeving.
Om die reden gebruikt Exclusive-IT standaard een DevOps SDLC, tenzij er in overleg met de opdrachtgever wordt besloten om anders te werken. Er zijn legitieme redenen om hiervan af te wijken, zoals lean voor prototyping of opdrachten met een beperkt budget, en de V-methode voor 'mission critical' opdrachten met extreem hoge kwaliteitseisen. In dergelijke gevallen is DevOps SDLC niet de beste keuze. Toch is het in vrijwel alle andere gevallen de enige robuuste aanpak voor betrouwbaar en kwalitatief resultaat.
Het einde van een kijkje onder de oppervlakte
Het is fascinerend om te beseffen dat wat u zojuist hebt gelezen slechts het topje van de ijsberg is als het gaat om de wereld van softwareontwikkeling. Er valt nog zoveel te ontdekken en te leren, en het kan soms overweldigend lijken. Maar door de juiste informatie en inzichten te hebben, kunt u als opdrachtgever weloverwogen beslissingen nemen die aansluiten bij de doelstellingen van uw organisatie.
Mijn hoop is dat deze informatie u niet alleen heeft geïnformeerd, maar ook heeft geïnspireerd om vertrouwen te hebben in het nemen van beslissingen voor uw volgende softwareproject.