Il processo di sviluppo di solito si svolge in questo modo:
Qualcuno ha un'idea. Ha bisogno di un nuovo rapporto, di un nuovo campo aggiunto ad una schermata, di un intero nuovo modo di fare il punto vendita, di un nuovo gioco; non ha davvero importanza. L'idea viene analizzata e convertita in qualcosa che il computer può capire. Il computer viene poi messo alla prova per vedere se ha davvero capito quello che gli avete detto. Dopo che si è dimostrato degno, si fa una fusione mentale vulcaniana su disco o CD per il trasferimento ad un cliente pagante.
Quando ho iniziato c'era una vera e propria separazione dei compiti. L'"analista" faceva l'analisi vera e propria, creava un grafico di qualche tipo che dettagliava i passi della procedura da fare. Questo veniva consegnato a un "programmatore" che, in alcuni casi, creava uno pseudocodice per trasformare i passi della procedura in istruzioni. Poi il "codificatore" avrebbe trasformato quello pseudo codice in codice reale in qualsiasi lingua stesse lavorando.
Oggi, nel mio caso, faccio tutto io. Il mio capo chiama e dice: "Rich vuole una schermata di manutenzione per essere in grado di definire le 'sezioni' della planimetria del ristorante, per assegnare i server a una sezione". Trasformo quella richiesta in codice, bypassando molti dei passaggi perché li ho fatti per 48 anni, so più o meno cosa sono. Scrivo, provo, correggo i miei errori di battitura, provo di nuovo, e taglio una nuova versione che poi aspetto fino alle 11 di sera per installare.
La maggior parte delle software house riceve una richiesta da un cliente attraverso un tecnico del supporto clienti che la gira al dipartimento di programmazione dove un manager la assegna a qualcuno. Questo qualcuno può essere un singolo o un team, a seconda delle dimensioni dell'organizzazione e della dimensione del progetto. Potrebbero avere un dipartimento di QA (fortunati loro) che accetta il taglio finale e lo consegna su per la catena alimentare.