Para aplicativos de interface do usuário, é improvável que diminua a quantidade geral de bugs, mas mudará o equilíbrio da mistura de bugs em direção a problemas causados pela comunicação.
Por falar em aplicativos / sites de interface do usuário - os usuários são extremamente pacientes e exigem baixo tempo de resposta. Isso transforma qualquer atraso na comunicação em bugs. Como resultado, será negociado um potencial decréscimo de bugs devido à menor complexidade de um único componente, com bugs muito rígidos e requisitos de tempo de comunicação entre processos / máquinas.
Se as unidades de dados com as quais o programa lida são grandes (ou seja, imagens), qualquer atraso no processo seria mais longo e mais difícil de eliminar - algo como "aplicar transformação à imagem de 10 mb" ganhará instantaneamente + 20 mb de E / S de disco / rede, além conversão para 2 do formato na memória para o formato serializabe e vice-versa. Realmente, não há muito que você possa fazer para ocultar o tempo necessário ao usuário.
Além disso, qualquer comunicação e, especialmente, E / S de disco, está sujeita a verificações de antivírus / firewall - isso inevitavelmente adiciona outra camada de bugs difíceis de reproduzir e ainda mais atrasos.
"Programa" monolítico dividido brilha onde os atrasos na comunicação não são críticos ou já são inevitáveis
- processamento em massa paralelamente agradável de informações, onde você pode negociar pequenos atrasos extras para melhorar significativamente as etapas individuais (às vezes eliminando a necessidade de componentes personalizados usando uma vez de prateleira). A presença de uma etapa individual pequena pode permitir o uso de várias máquinas mais baratas, em vez de uma única e cara, por exemplo.
- dividir serviços monolíticos em microsserviços menos acoplados - chamar vários serviços em paralelo em vez de um provavelmente não adicionará atrasos extras (pode até diminuir o tempo geral se cada indivíduo for mais rápido e não houver dependências)
- movendo operações que os usuários esperam levar muito tempo - renderizando cenas / filmes em 3D complexos, computando métricas complexas sobre dados, ...
- todos os tipos de "preenchimento automático", "verificação ortográfica" e outros auxílios opcionais podem e muitas vezes podem ser externos - o exemplo mais óbvio são as sugestões automáticas de URL do navegador, onde sua entrada é enviada para o serviço externo (mecanismo de pesquisa) o tempo todo .
Observe que isso se aplica aos aplicativos de desktop e aos sites - parte do programa voltada para o usuário tende a ser "monolítica" - todo o código de interação do usuário vinculado a um único dado é geralmente executado em um único processo (não é incomum dividir processos por peça de dados, como uma página HTML ou uma imagem, mas é ortogonal a esta pergunta). Mesmo para o site mais básico com entrada do usuário, você verá a lógica de validação sendo executada no lado do cliente, mesmo que torná-lo no servidor seja mais modular e reduza a complexidade / duplicação de código.
If the animation and modelling capabilities were split into their own separate application and developed separately, with files being passed between them, would they not be easier to maintain?
Não misture mais fácil estender com mais fácil manter um módulo - por si - não está livre de complicações ou desenhos dúbios. O Maya pode ser o inferno na terra para manter enquanto seus plugins não o são. Ou vice-versa.