Le fasi di progettazione di un software sono solitamente suddivise in:
Ideazione, momento in cui si ipotizzano le funzionalità principali, gli obiettivi dell'applicazione e il target di utenti (end-users).
Studio di fattibilità o PoC (Proof of Concept), è importante comprendere se quanto ipotizzato sia realmente realizzabile o se vi siano soluzioni migliori, più performanti o meno onerose, per raggiungere lo stesso obiettivo.
Documentazione e analisi dei requisiti, in questa fase vengono descritti i requisiti, definendo le logiche di funzionamento (senza tecnicismi). Quindi pre-condizioni, post-condizioni, scenario principale e scenari alternativi.
Modellazione, utile per schematizzare mediante diagrammi le logiche e le architetture (es. Use Case, diagrammi di flusso, database, ecc.)
Progettazione architetturale, in questa fase si definisce lo "scheletro" del software descrivendo i linguaggi, i framework, le librerie e i servizi che lo comporranno.