"программу" придется писать одну или несколько для избежания ошибок?
для избежания ошибок - нужно уметь не только проектировать, но и грамотно тестировать.
А резервирование функциональных узлов или систем - это уже не про ошибки, а про сбои и отказы.