Il sistema software mission-critical (come il software di controllo dei sistemi nei veicoli spaziali) spesso impiega più moduli software ridondanti sviluppati da diversi team (a volte utilizzando diversi linguaggi di programmazione), alla stessa interfaccia e alle specifiche comportamentali. L'idea è che i bug del software che emergono solo durante alcuni casi estremi, non presi nei test di pre-produzione, dovrebbero essere localizzati per l'implementazione in uno solo dei moduli, lasciando gli altri moduli intatti dal momento che sono sviluppati da diversi team che usano strumenti diversi / lingue.
Tuttavia, ci sono questi sistemi un po 'meno (mission) critici che l'intero malfunzionamento può avere un impatto finanziario significativo, riescono a essere tolleranti ai guasti, apparentemente usando un'istanza ridondante di software scritto nella stessa lingua, forse dallo stesso team di sviluppatori, che non solo garantiscono l'alta disponibilità ma anche la tolleranza d'errore per le transazioni in corso, in modo tale che l'errore su un nodo che serve una richiesta possa continuare senza problemi su un altro nodo. In caso di guasto hardware, posso capire perché questo potrebbe funzionare. Tuttavia, in caso di errore del software, perché / come funziona? Non è che lo stesso errore software che ha causato il fallimento del primo nodo, avrebbe avuto un impatto anche sull'altro nodo?
Inoltre, ci sono alcuni schemi di progettazione che consentono di comporre un sistema fault tolerant utilizzando componenti intrinsecamente non fault tolerant?