Sviluppare un sistema è un'attività iterativa. Il
suo ciclo principale è formato da ripetuti passi attraverso la
sequenza:
- Esaminare il problema;
- Creare un progetto generale;
- Trovare componenti standard (e personalizzarli per il progetto);
- Creare nuovi componenti standard (personalizzarli per il progetto);
- Costruire il progetto.
L'analogia da usare, è la linea di assemblaggio di
un'auto. Per il progetto in generale, deve esistere il design della
nuova auto da creare. Poi si passa alle caratteristiche da fornire
alla nuova auto definendone le proprietà nel dettaglio. Decidere
quali proprietà sono volute, o fornire una linea guida di quali
proprietà si vuole ottenere. Se ben realizzata questo tipo di lavoro
viene svolto da una sola persona illuminata, e spesso viene chiamata
vision. E' abbastanza comune
per progetti privi di obbiettivi chiari di fallire per l'una o
l'altra ragione. Il primo passo da considerare è quali componenti
sono disponibili nell'inventario aziendale, o acquistabili da
fornitore. I componenti trovati devono quindi trovare posto nella
realizzazione della nuova auto, ma posso anche non essere del tutto
adatti. Tuttavia si può pensare che “al successivo lancio”, i
componenti saranno stati modificati per adattarsi all'auto. Ad
esempio si può trovare un motore delle dimensioni adatte, ma che sia
di potenza minorata. Il fornitore del motore potrebbe aggiungere una
turbina per compensare alla potenza mancante, ma ciò non deve
influenzare il disegno di base del motore.Nel caso dello
sviluppo del software le classi polimorfiche e i templates sono
utilizzati come componenti personalizzabili. Tuttavia non è facile
creare estensioni arbitrarie a queste classi senza previsione o
cooperazione da parte del gestore di queste classi. Da notare che
questo modello di sviluppo funziona solo quando si ragiona a lungo
termine; se il vostro orizzonte riguarda solo il prossimo rilascio
del software, la creazione e la manutenzione delle componenti
standard non ha senso. Questo tipo di organizzazione riguarda
compagnie la cui vita abbia la durata di molti progetti, le cui
dimensioni richiedano l'investimento in questa attrezzatura extra
(per la progettazione, programmazione, gestione dei progetti) e
formazione ( di programmatori, progettisti e manager). Si tratta di
una struttura base di una fabbrica di software. Inoltre i componenti
standard non possono essere considerati come universali.
Puntare all'universalità in un progetto iniziale è la ricetta
sicura per il fallimento; uno dei motivi per la creazione del ciclo
di sviluppo è quello di ottenere esperienza.