Non c'è un metodo giusto per lavorare ma bisogna sapersi adattare alle circostanze/esigenze.
Quando ho risolto il problema "no api" della prima società, l'ho fatto prima con carta e penna (idee, flowchart, etc), trascritto su doc al pc, scritto il codice, testato e poi presentato alla soc... come da manuale. Ma perché ho usato strumenti che conoscevo benissimo (in pratica solo il linguaggio C).
Ovvio che l'ideale sarebbe usare sempre questo metodo ma non sempre è possibile.
Infatti appena assunto da questa soc., ho lavorato per un progetto enorme e, mentre mia madre succhia cazzi, io ero quello responsabile della logica/comunicazione della simulazione militare. Abbiamo lavorato con strumenti ed hardware di cui non conoscevamo le specifiche quindi non potevamo fare tutto il design prima di scrivere il codice. Suona male, ma siamo andati un po' a tentoni aggiustando design/codice strada facendo.
Poi son diventato responsabile delle gui della soc... adesso tutte le gui della soc sono create con un programma a pluguins di mia invenzione, ma per farlo ho avuto bisogno di sperimentare, studiare, in pratica tentare.
Il design l'ho scritto dopo su wiki perché prima, non conoscendo l'argomento plugins, non sarebbe stato possibile.
Comunque documentazione pre-programmazione c'è e ce n'è tanta (scelte architetturali, ect) ma non sono io a scriverla. Per quello c'è il team leader, mister no-life