Arquitetura perfeita na minha opinião é over engeneering.
Obviamente tem que ter arquitetura, mas sem se bitolar com isso.
Vou te dar dois exemplos práticos para não ficar na conversa.
1
vc está criando uma primeira versão de projeto que precisa enviar um email. vc é fullstack e nao tem equipe.
vai integrar com sendgrid.
na teoria vc talvez tenha que criar a sua integração dentro da camada de infra e também um adapter para começar a comunicar.
na pratica vc pode separar a infra, claro (faça isso). mas deixa o adapter e toda sua abstração para quando precisar integrar com outro provedor de e-mail. aí vc refatora.
muitas vezes primeiros projetos sao jogados fora em favor de um mais robusto, com equipe. aí sim se preocupe mais.
2
Vc tem que usar uma lib de data e hora em um projeto node. vc faz uma abstração pra lib? na arquitetura perfeita sim.
No mundo real? em 2012 vc usou o momentjs.
Só que em 2020 ela ficou "deprecated". como nao tem um adapter vc vai dar ctrl+shift+f na busca global do vscode e em 10 ou 60 minutos daria replace e refactoring em tudo para colocar o dayjs.
presta atenção no daria. um projeto de 2012... quais as chances de um projeto de 2012 ainda estar vivo? adapter naquela época seria perda de tempo. o momentjs aqui provavelmente seria tão "deprecated" quanto o próprio projeto em si.