Eu tive a chance de ser desenvolvedor de software há anos e agora trabalho como engenheiro eletrônico.
Qualquer sistema com complexidade vem com erros e bugs. Tanto os microcontroladores quanto os ICs têm suas vantagens e desvantagens com base em suas áreas de uso.
Para projetos de pequena escala, os CIs são mais rápidos, mais baratos e mais confiáveis que os microcontroladores. Para projetos de grande escala com milhões de entradas, análises e comparações lógicas, com certeza os microcontroladores têm vantagem sobre os CIs.
Todo o software falha em algum momento, mesmo o código sem bugs é propenso a modificações porque ele é salvo em uma ROM, resultando em erros lógicos (por exemplo, vazamentos de memória) que são difíceis de detectar, mas terminam em catástrofes.
Para sistemas à prova de balas, baseados em software, contra falhas em aplicações críticas (como sistemas militares ou sistemas de salvação, como sistemas de controle de trens), conceitos "à prova de falhas" são implementados e desenvolvidos.
Os sistemas à prova de falhas são revertidos para um estado seguro caso ocorra um erro excepcional. Normalmente, dois processadores executam o mesmo código, comparam os resultados de cada instrução e, se forem iguais, a instrução é executada. Caso contrário, o sistema utiliza relés elétricos físicos para reverter para um estado seguro.
Os sistemas baseados em software à prova de falhas são usados nos sistemas de intertravamento de trens e ATPs (proteção automática de trens).
Projetar o mesmo sistema complexo com o Ics é uma grande dor de cabeça para qualquer engenheiro. E é por isso que o software foi projetado desde o primeiro dia!