Ci sono molte domande a cui è necessario dare una risposta qui:
- Stai utilizzando un vcs?
- Qual è la tua strategia di ramificazione?
- Puoi distribuire utilizzando un solo pulsante?
- Hai test automatici?
- Quando esegui i test?
- Hai un'integrazione continua?
- Cosa succede alla tua squadra mentre il lavoro è nell'area di Staging? Stai lavorando a qualcos'altro? O stai solo aspettando?
- Che succede con il team addetto al controllo qualità mentre la parte UAT sta succedendo?
- Quanto tempo impieghi per la distribuzione?
- La distribuzione significa che l'utente non può lavorare sul sistema?
- Hai un database? Puoi annullare una distribuzione sul tuo database?
Le basi di ciò che stai facendo va bene, soprattutto a causa di quel tratto lussuoso di avere una specifica completamente chiusa (mai successo a me). Ma le basi non ti semplificano la vita, né forniscono il miglior valore per la tua azienda.
Suppongo tu abbia un vcs. Quale strategia di ramificazione stai usando? Quelle strategie cambieranno in base al vcs. Vorrei scegliere una diversa strategia di ramificazione se sto usando Subversion / TFS Source Control o se sto usando quelli distribuiti come git o hg.
Esegui test (unità, integrazione, requisiti) e assicurati di poterli eseguire automaticamente. I test devono essere eseguiti su un ambiente CI che va tra l'ambiente di sviluppo e gli ambienti di gestione temporanea. Qualsiasi bug riscontrato dal team addetto al controllo qualità dovrebbe diventare un test automatico ove possibile (a seconda della tecnologia dell'interfaccia utente che non potrebbe essere sempre possibile). Queste azioni consentiranno di: ridurre il tempo speso in "Staging", ridurre il numero di bug visualizzati, ridurre il numero di errori di regressione che verranno visualizzati.
L'ambiente CI dovrebbe compilare ed eseguire automaticamente tutti i test (potrebbe essere ben possibile che tu voglia eseguire test unitari tutto il tempo, ma test di integrazione solo in un punto specifico del giorno). Questa azione fornirà alla tua squadra la certezza che non stai rompendo nulla o che lo saprai praticamente subito. Strumenti per CI? Jenkins, Team City, TFS, ...
A un certo punto stavo lavorando a un team in cui una distribuzione della nostra applicazione significava in genere un processo manuale di due ore che richiedeva la disconnessione di tutti gli utenti. Siamo riusciti a migliorarlo, anche se ancora manuale, a meno di 5 minuti con solo un riavvio per gli utenti se non ci fosse stato alcun cambio di database. Se c'era una modifica del database, richiedeva ancora mezz'ora di uscita degli utenti. Ma quando ho lasciato l'azienda, stavamo cercando di utilizzare strumenti (Octopus in questo caso) per renderlo ancora più semplice e una strategia verde / blu sul nostro database per eliminare completamente i tempi di inattività (tranne il riavvio dei terminali client).
Separerei completamente l'ambiente di staging per il QA interno dall'ambiente di staging per UAT. La mia precedente esperienza è molto confusa per averli insieme.
Avrei un ambiente di prelettura solo per testare la distribuzione nelle stesse identiche condizioni in cui ci sono in diretta. Ho avuto delle sorprese prima perché il nostro sistema dipendeva da qualche libreria o patch del sistema operativo presente in tutte le fasi, ma dal vivo.
Che quindi vorrà dire che c'è un'altra domanda, il tuo team IT può replicare l'installazione di live? Se non possono, dovrebbero lavorarci sopra. Il provisioning di una macchina / ambiente dovrebbe essere completamente automatico una volta che hai l'hardware.
Puoi sempre migliorare il tuo processo. All'inizio di solito puoi fare dei passi da gigante, più tardi, è più preciso. Dovresti chiedere a te stesso (e al tuo team) la domanda che hai postato ogni mese.