Erros críticos são corrigidos. Geralmente eles são consertados antes que o produto entre em produção. A menos que você esteja usando amostras antigas, você poderá nunca ver os piores erros.
Corrigir bugs é difícil e caro. Não é apenas mudar uma linha do código RTL. Se você fez isso, teria que re-sintetizar, refazer o layout físico, ajustar o layout para corrigir qualquer problema de tempo, comprar um conjunto de máscaras totalmente novo, produzir novas bolachas, testar as bolachas (normalmente), validar as novas correções e possivelmente caracterizar ou qualificar o produto novamente. Isso leva meses e custa uma quantia angustiante de dinheiro. Por esse motivo, tentamos corrigir erros diretamente no layout (de preferência em uma única camada de metal). Isso é mais rápido e mais barato do que começar da síntese RTL, mas ainda não é bom.
Se estamos corrigindo um erro crítico de qualquer maneira, por que não corrigir todos os outros erros também? Novamente, isso leva tempo - tempo para descobrir e implementar uma correção - tempo para executar novamente os testes de verificação do projeto. Esse tempo significa que levará mais tempo para lançar o próximo produto no mercado. Enquanto isso, você quase certamente encontrará mais bugs no seu produto atual se procurar com atenção. É uma batalha perdida. A correção de bugs é ainda mais difícil em um produto lançado há muito tempo, pois as pessoas precisam mergulhar no design antigo para descobrir o que está acontecendo. Como diz Null, os clientes podem precisar requalificar seu produto em seus sistemas. Se o seu produto ainda estiver em desenvolvimento, atrasar o lançamento da produção pode causar um atraso na programação dos clientes, o que deixa os clientes muito insatisfeitos.
Normalmente, os erros deixados apenas acontecem em configurações estranhas, causam problemas muito pequenos, têm soluções fáceis ou todas as opções acima. Eles não são ruins o suficiente para valer a pena. E se você reutilizar um módulo de hardware no próximo produto, seus clientes existentes já terão a solução alternativa em seu software.
As cadeias de ferramentas de software são outro fator. Se um módulo permanecer por tempo suficiente, sua cadeia de ferramentas poderá mudar o suficiente para refazer os testes de validação antigos se tornar um projeto importante em si. E você provavelmente não pode simplesmente carregar as ferramentas antigas, porque não está mais pagando pela licença do site. Mas enquanto você não alterar o módulo, poderá continuar copiando e colando em novos MCUs.
O software também é um problema do lado do cliente. Se o seu bugfix quebrar a compatibilidade com versões anteriores de qualquer forma, todos os seus clientes terão que atualizar o código, para o qual talvez nem tenham mais as ferramentas.
Como alguém que trabalha no desenvolvimento de microcontroladores, posso dizer que todos gostaríamos de corrigir todos os erros. Mas tentar fazer isso atrasaria o desenvolvimento imprevisivelmente, incomodaria os clientes, custaria uma tonelada de dinheiro e, no final de tudo, provavelmente ainda falharíamos.