Ciò che più contraddistingue le metodologie agili dai normali processi di sviluppo del software è che si tiene conto dei cambiamenti, cioè si progetta per il cambiamento, con uno sviluppo di tipo iterativo (o evolutivo, o incrementale, o prototipale).

Si inizia impostando la base per una funzionalità e si prosegue con cicli di refactoring (miglioramenti successivi) e testing.

Lo sviluppo iterativo è importante perchè:
- non è possibile effettuare la fase di analisi in un colpo solo
- certi dettagli di design si apprendono solo in fase di codifica
- le fasi di sviluppo del software non sono indipendenti, ma collegate