"Hallo Amigo!"

"Hallo Bilaabo!"

"Vandaag ga ik je vertellen hoe programma's gewoonlijk worden ontwikkeld."

"In de 20e eeuw, toen moderne IT nog in de kinderschoenen stond, leek iedereen te denken dat programmeren net zoiets was als constructie of fabricage."

"Dingen gingen meestal ongeveer zo:"

" De klant zou uitleggen welk type programma hij nodig had - wat het zou moeten doen en hoe het het zou moeten doen."

" Bedrijfsanalisten luisterden naar hem en maakten een volledige lijst met programmavereisten op basis van wat hij zei."

"Vervolgens zouden projectmanagers deze vereisten in taken verdelen en ook bepalen welke programmeur welke taak zou doen en in welke volgorde."

"Dan gingen de programmeurs aan de slag. Soms werkten ze meerdere jaren(!)."

"Toen ze klaar waren, werd het programma aan testers gegeven."

"De testers zouden alle vereisten van het programma doornemen om te verifiëren dat ze waren geïmplementeerd en dat het programma werkte zoals het hoort."

"Als er iets misging, logden de testers de bugs en stuurden ze naar de programmeurs."

"Vervolgens repareerden de programmeurs de bugs en stuurden het gerepareerde programma terug naar de testers. En de cyclus zou zich herhalen."

"Toen de belangrijkste bugs waren opgelost, werd het programma aan de klant gegeven."

"Is dat echt hoe het ging?"

"Nou, ik heb natuurlijk veel vereenvoudigd, maar dat komt aardig in de buurt van hoe dingen werden gedaan."

"En een project kan echt anderhalf tot twee jaar duren?"

"Soms, als de ontwikkeling van een project erg lang duurde, braken ze het op in afzonderlijke releases. Elke 3-6 maanden moesten ontwikkelaars een specifiek onderdeel van de functionaliteit van het programma maken, het testen, alle bugs repareren en het aan de klant."

"Ten eerste, zodat hij zijn indrukken kon delen. En ten tweede, en nog belangrijker, zodat hij zou blijven betalen voor de ontwikkeling van het programma."

"Blijf betalen?"

"Toen duurde de ontwikkeling vaak 2-3 keer langer dan gepland. En omdat programmeurs vaak per uur werden betaald, werd het programma 2-3 keer duurder. Bovendien werden de voordelen ook minder. Immers, wat de klant vandaag wil voor $ 100.000 is misschien niet nodig in 3 jaar - vooral niet bij drie keer de prijs.

"Hebben klanten vaak geweigerd te betalen?"

"Ja. Later begonnen ze boetes toe te voegen aan het contract, maar dit verbeterde de situatie niet. De ontwikkeling van software sleepte zich voort en niemand kon er iets aan doen, ook al zouden ze dat willen."

"Maar waarom?"

"Nou, ten eerste is er te weinig bekend tijdens de planningsfase. Vaker wel dan niet, in het begin kon niemand voorspellen met welke problemen de programmeurs te maken zouden krijgen."

"Maar ervaren programmeurs zouden toch alles moeten kunnen voorzien?"

"Zie je dat programmeren een uniek vak is?"

"Een gewone arbeider voert vaak hetzelfde werk keer op keer uit. Horlogemakers maken horloges, koks koken, leraren geven les, dokters behandelen, enz."

"Elk van deze professionals doet in principe dag in dag uit hetzelfde. Het resultaat is dat ze steeds beter worden in hun werk."

"Bij programmeren is de aanpak anders. Zodra een programmeur elke dag voor dezelfde taak staat, schrijft hij een functie, module of programma om die uit te voeren, en komt er nooit meer op terug."

"Elke programmeur lost elke taak gewoonlijk één keer in zijn of haar leven op."

"Zoiets als wetenschappers of ontwerpingenieurs die dingen uitvinden."

"Ah. Nou, wat is de belangrijkste rol in een project?"

"Hmm, hoe moet ik dat beantwoorden. Het is gemakkelijk om te zeggen wat het belangrijkste is, maar het is moeilijk om het minst belangrijke te identificeren."

" De primaire taak van een tester ( Kwaliteitsborging , QA )  is het bewaken van de status van een programma en het direct rapporteren van bugs. Hoe meer en eerder een tester bugs vindt, hoe meer er kan  worden  opgelost . een goede programmeur wel ."

"Waarom kunnen programmeurs hun eigen programma's niet testen. Weten zij tenslotte niet beter dan testers wat wel en niet werkt?"

"Een goede programmeur is simpelweg niet in staat om een ​​goede tester te zijn. Een programmeur weet heel goed hoe het programma werkt, dus hij of zij gebruikt het altijd op een bepaalde manier. In tegenstelling tot gewone gebruikers die het programma gebruiken zoals ze willen. "

"Bovendien testen testers niet wat nog niet werkt. De tester test de functionaliteit of onderdelen van het programma die volgens de programmeur al bijna perfect werken."

"En als de tester heel veel bugs in die functionaliteit vindt en de programmeur lost ze op, dan komt het product eigenlijk dichter bij perfectie."

" De primaire taak van een programmeur ( S oftware  D ontwikkelaar  E ngineer,  D e ontwikkelaarSDE ) is het implementeren van nieuwe functionaliteit. Of, eenvoudiger gezegd, het uitvoeren van de hem of haar opgedragen taken. Wanneer programmeurs taken met nieuwe features krijgen toegewezen , ze voeren ze uit. Wanneer ze bugs toegewezen krijgen, repareren ze bugs. "

"Maar soms zijn er meer uitdagende taken, bijvoorbeeld het bedenken van de architectuur voor het programma of delen ervan. Hoe beter de voorgestelde architectuur, hoe gemakkelijker het zal zijn om dingen voor elkaar te krijgen in de toekomst."

"Het probleem is dat de architectuur helemaal aan het begin moet worden gekozen, maar pas als je midden in de ontwikkeling zit, wordt duidelijk of je de juiste architectuur hebt gekozen."

"Bovendien, als de architectuur succesvol is en het programma geweldig blijkt te zijn, dan zal de klant het waarschijnlijk willen gebruiken als basis voor nieuwe versies van het programma."

"Dit is waar ik op doel."

"Welke architectuur je ook kiest, er zullen altijd een heleboel veranderingen, toevoegingen en nieuwe functies zijn waar de architectuur geen rekening mee houdt."

"Hier is een goed voorbeeld."

"Een klant vraagt ​​je om een ​​gebouw van 5 verdiepingen te bouwen, dus je ontwerpt een architectuur en bouwt het huis."

"Dan vraagt ​​de klant om nog een verhaal toe te voegen, en dan nog een, enzovoort."

"Maar de muren van de eerste verdieping waren niet ontworpen voor zoveel gewicht, en de fundering ook niet. Dus alles moet opnieuw worden gedaan."

"Maar nadat het gebouw van 5 verdiepingen is voltooid, wat als de klant onmiddellijk besluit dat hij een gebouw van 50 verdiepingen wil?"

"Het zou gemakkelijker zijn om de bestaande structuur af te breken en alles opnieuw op te bouwen..."

'Maar ik heb een advies voor je met betrekking tot architectuur.'

"De architectuur van een applicatie moet in de eerste plaats flexibel zijn, wat betekent dat je niet helemaal opnieuw hoeft te beginnen als je besluit de helft van de applicatie opnieuw te doen. Dit type architectuur wordt meestal flexibel en modulair genoemd . "

" De primaire taak van de projectmanager is het nemen van beslissingen. De projectmanager is degene die het grote geheel ziet en vanuit dat perspectief beslissingen neemt."

"Stel dat tijdens de ontwikkeling duidelijk wordt dat een bepaalde taak niet wordt afgerond zoals gepland. De projectmanager kan dan:"

" a)  probeer met de klant te onderhandelen om de taak te wijzigen"

" b)  wijs meer tijd toe aan de taak"

" c)  meer ervaren programmeurs van andere projecten binnenhalen."

"En er zijn nog veel meer mogelijkheden."

"Elke optie vereist dat je iets opoffert, en het is de taak van de manager om de totale verliezen van deze offers te minimaliseren. "

"Stel bijvoorbeeld dat concurrenten de hoofdprogrammeur stelen door hem twee keer zoveel geld te bieden."

"De projectmanager kan:"

" a)  niets doen. De programmeur zal vertrekken en het project zal waarschijnlijk achterop raken en sancties oplopen."

" b)  zijn salaris verdubbelen. Dan zullen alle anderen in het team ook loonsverhoging willen. Als je ze allemaal meer geld geeft, zullen de kosten van het project stijgen en kan het onrendabel worden."

" c)  een andere optie die je bedenkt."

"Ik zie."

"Met een slechte projectmanager verlengt een goed team meestal een project, maar niet altijd."

"Een goede manager met een team van gemiddelde programmeurs zal een project vrijwel altijd sneller afronden dan een slechte manager met een team van uitstekende programmeurs."

"Ik zie."

"Oké, laten we even pauzeren en dan gaan we verder."