Qual è il modo migliore per progettare un software?

Questo è come chiedere: come può un grammatico scrivere una buona storia? Richiede un diverso set di abilità. Inoltre, a che tipo di progettazione ti riferisci?

Quindi sei in grado di occuparti dei dettagli di implementazione. Questo è un buon inizio. Se il tuo progetto è molto piccolo e hai un'idea abbastanza buona di ciò che vuoi ottenere, puoi tentare il metodo del cowboy coder: inizia a scrivere il programma più semplice possibile, rifattorizza, estendi, rifattorizza. Questo metodo (o la sua mancanza) ha la virtù di far sporcare le mani al programmatore. Imparerete qualcosa. Costruirete qualcosa. Potrebbe essere mostruoso. Almeno, eviterete la paralisi dell'analisi e, possibilmente, l'overengineering.

Tradizionalmente, la progettazione nell'ingegneria del software significa che dovreste cercare di mappare come intendete far funzionare tutto insieme, anche prima di scrivere una singola linea di codice. È qui che entrano in gioco il design orientato agli oggetti e altri metodi simili -- vedi il post di Keith Ensign per alcuni link sull'argomento. Le metodologie agili non sono una scusa per saltare questo passo, ma possono servire come promemoria per mantenere il progetto iniziale semplice ed evitare di progettare estensioni future troppo presto. La fase di progettazione dell'ingegneria inizia con buone specifiche e una buona progettazione tende a sorgere da intuizioni tratte dall'esperienza pratica più che dall'applicazione di metodologie note. Ha poco a che fare con il design del prodotto, in quanto richiede di sapere prima cosa si costruirà e rispondere adeguatamente a questi requisiti.

Buone specifiche sono anche progettate. Decidere cosa farà il vostro software e come servirà il suo scopo attinge a varie competenze. Le persone della vecchia scuola (ingegneri del software) la chiamano la fase di analisi. Altri parlano di design del servizio. Questa attività può variare a seconda del tipo di software che andrete a costruire. La conoscenza del dominio, le intuizioni sul comportamento degli utenti e la capacità di adattare i processi organizzativi sono buone qualità per iniziare prima di tentare di scrivere le user stories e i test di accettazione. Carta e penna possono anche fare meraviglie in questa fase, poiché possono aiutarvi ad esplorare soluzioni basate sulle vostre osservazioni con pochi vincoli.

Una terza categoria di design è il design delle immagini e dell'esperienza utente. Un buon tocco finale può fare una notevole differenza per il vostro prodotto finale. Di nuovo, la loro competenza non può essere riassunta così succintamente...

Ognuno di questi sforzi di design viene con il suo sacco di pratiche. Molte di queste pratiche mirano a guidare o strutturare le intuizioni del designer. Più sai dei tuoi utenti, dei loro obiettivi e dei materiali con cui lavorerai, più sarai vicino a proporre una soluzione soddisfacente. La vostra esperienza di programmazione dovrebbe guidarvi lungo le linee della progettazione ingegneristica. Potrebbe aiutarti a immaginare nuove possibilità sul fronte del design del servizio. Tuttavia, potresti aver bisogno di lasciare da parte la tecnologia e imparare da prospettive diverse per immaginare un prodotto che serva al suo scopo.