Se stai fornendo una soluzione, e non solo scrivendo del codice, devi considerare molte cose.
Stai scrivendo un software o stai consegnando un sistema? Questa domanda vuole essere retorica.
Se stai consegnando un sistema,
Funziona in un ambiente.
Esistono requisiti di interoperabilità.
Esistono requisiti di manutenibilità (aggiornamento, convalida della configurazione, messa in servizio e disattivazione).
Ci sono requisiti di prestazione (abbastanza veloci da valere la pena di usare)
Ci sono requisiti di affidabilità.
[Nello spazio integrato, l'interruzione di corrente è un evento comune.]
Ero solito porre una domanda di interruzione di corrente quando stavo intervistando perché gli ingegneri del software lavorassero su sistemi critici.
Un file system di journaling e due copie di documenti critici, che vengono scritti per coprire una moltitudine di peccati.
Se la corrente si spegne, il sistema dovrebbe agire in modo appropriato.
Se il sistema operativo è in grado di supportare tutti i requisiti di affidabilità, è grandioso.
Se l'hardware è in grado di supportare tutti i tuoi requisiti di affidabilità, (Una buona risposta alla mia domanda di interruzione di corrente è stata "Prendi un UPS") che è grandioso.
A volte l'ingegneria deve accadere per rendere l'affidabilità.
Spesso i clienti non specificano le cose nei requisiti, quindi potrebbero non pagare finché il prodotto non soddisfa i requisiti inizialmente non dichiarati. L'elicitazione dei requisiti e la convalida dei requisiti possono semplificare la vita degli ingegneri del software. Guarda lo standard CMMI (GRATUITO!) Per un'idea di ciò che queste attività potrebbero comprendere.
Se sei un programmatore TL; DR Qualcun altro lo fa.