Dat is natuurlijk niet helemaal waar.
Functionele specificatie, design en archictuur staat los van uitvoering/implementatie, sterker nog, daarvoor is implementatie helemaal niet relevant.
Met andere woorden, als de functionele eis is "ik wil reizen van Amsterdam naar Rotterdam", en zegt dat niets over of dat lopend, op de fiets, met de auto of met het OV moet gebeuren. En andersom, als je niet weet dat je die reis wilt gaan maken, dan heeft het weinig zin om te gaat uitzoeken met welke transportmiddelen dat zou kunnen.
Denk dat Rob daarop doelt...
Precies dat bedoel ik steeds duidelijk te maken.
Eerst precies opschrijven wat je (als gebruiker) verwacht; pas als daarover overeenstemming is bereikt heeft het zin naar operationele zaken te kijken. En dan volgt in de praktijk van de IT-ontwikkeling een fase waarin heen en weer wordt gesproken tussen gebruiker en (systeem-)ontwikkelaar.
Voorbeeld van een gebruikelijke situatie:
Gebruiker stelt als eis: ik wil met het vliegtuig van Amsterdam naar Parijs.
Na enig heen en weer praten blijkt de eis niet te zijn 'per vliegtuig' te moeten gaan, maar binnen een bepaalde tijd van huis (en dat huis stond niet op Schiphol, maar in Amsterdam-centrum) naar kantoor te moeten gaan (en dat kantoor stond niet op Charles de Gaulle, maar in noord-Parijs).
Nu is de eis dus ineens heel anders geworden, simpelweg doordat de gebruiker bij het formuleren ervan in eerste instantie al op de stoel van de uitvoerder (het reisbureau) was gaan zitten. In dit geval was de oplossing een TGV-retourtje; goedkoper en sneller. Maar daar kom je pas achter na uitvoerig vaststellen van de eisen (= ondervragen van de gebruiker).
Dit ondervragen vaan de gebruiker is een vak apart; tijdens dat proces krijgt de gebruiker in de praktijk ook pas door wat hij nu eigenlijk wil. Gebruikelijk is dat de gebruiker al heel gedetailleerd bepaalde functionaliteit voor zich ziet (het 'hoe', in dit geval het vliegtuig) terwijl hij nog niet eens precies weet wat hij wil bereiken (in dit geval binnen een bepaald etijd van A naar B reizen).
Na dit vaststellen op hoofdlijnen, volgt meestal een meer gedetailleerde eisenlijst (in dit geval zaken als comfort/stilte/stroomvoorziening/eten/WiFi).
In dit ondervragen gaat bij het ontwerpen van een systeem meestal relatief veel tijd zitten; tijd die later ruimschoots wordt terugverdiend doordat de ontwikkelaar veel preciezer weet wat er wordt verwacht en er integraal wordt nagedacht over de som van de eisen. Resultaat is een logisch opgezet, en daardoor goed te onderhouden, systeem, met een intuitieve UI.
Voorwaarde bij dit alles is dat de gebruiker niet dezelfde is als de systeemontwerper, en de systeemontwerper weer een ander is dan degene die uiteindelijk gaat coderen.
Littlesat is nu een drie-in-één spel aan het spelen; ondanks alle goede bedoelingen is het vrijwel onmogelijk zoiets tot een goed einde te brengen (hoewel er uiteindelijk ongetwijfeld een werkbare oplossing tevoorschijn resulteert).
Ook het idee van 'eerst dit, dan zien we later wel weer verder' (om te verbeteren of extra functionaliteit in te brengen), is niet goed. Alle (voorzienbare) eisen moeten duidelijk zijn, alvorens ook nog maar aan één regel code te denken. Dit voorkomt veel herschrijven, of zelfs dat latere eisen niet meer inpasbaar zijn in het gekozen ontwerp.