Executando verificação de segurança...
1

A que ponto a arquitetura de um software se torna mais importante que o funcionamento pleno do projeto?

Olá,

Atualmente trabalho praticamente como um dev fullstack na empresa em que atuo, resolvendo problemas e criando novas features desde backend até frontend, porém, com mais experiência no back.

De uns tempos pra cá comecei a conseguir propor inúmeras soluções técnicas que fariam sentido nos produtos, correções pontuais, mas também apanhei MUITO para desbloquear algumas skills. E quando eu digo muito, foi muito mesmo.

Porém, as habilidades que conquistei, são apenas uma longa parte do processo de entendimento de um framework ou outro, de uma linguagem ou outra. Ultimamente tenho me preocupado muito sobre as arquiteturas de determinadas linguagens. Entendo que, quanto melhor arquitetado um projeto, mais fácil será a manutenção, a maneira com que os dados percorrem entre as camadas e etc.

Só que, vi um post no linkedin que dizia o seguinte:

"Engenheiros de software de sucesso evitam uma arquitetura de código perfeita. Eles escrevem a quantidade de código necessária para que as coisas funcionem. Não acredite no mito do código perfeito, faça as coisas funcionarem"

Confesso que, ao mesmo tempo em que ler isto me aliviou de certa forma, ainda colocou uma pulga a mais na minha orelha no sentido de, OK nos preocuparmos TANTO com uma arquitetura "perfeita" (que não existe), só que, a que ponto ela deverá ser mais importante do que o funcionamento do projeto. A tal da "Arquitetura Perfeita" seria para causar uma boa impressão?

Gostaria de saber a opinião de vocês sobre este caso.

Carregando publicação patrocinada...
2

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.

1

atualmente estou na mesma situação, comecei a estudar cada vez + arquitetura de software e tenho percebido no meu caso que é o tanto que voce consegue subir a barra do time

mas uma coisa q acabei lendo tb foi sobre arquitetura de middleout em que voce comeca com uma basica, planeja uma transiçao para uma um pouco melhor e uma utopica que seria o ideal (que não é fixa pq vc pode melhorar com o tempo), ai no caso vc vai melhorando essa intermediaria conforme vai fazendo sentido

1

Apanhar para melhorar as habilidades é parte do processo, só gênios não apanham.

Não entendi bem o que quer dizer com "arquiteturas de determinadas linguagens". Pode ser algo interessante.

A arquitetura não deveria influenciar tanto assim a manutenção do software. Em parte acontece sim, mas o design geral, até mesmo os detalhes do código podem ser mais importantes. A arquitetura pode influenciar bem outros processos que vão em paralelo à manutenção, além da manutenção em si.

Muita arquitetura complica mais que ajuda, mesmo que seja muito divulgado que ajuda. As pessoas ignoram muito o KISS e o YAGNI. Muito mesmo. Até quem diz que não ignora.

A proposição trazida para cá é boa e parece correta, dentro da minha experiência.

Achar o tal do ponto é complicado. Onde vamos arrumar a régua certa? Então tentar medir isso parece o mesmo problema de tentar fazer algo perfeito. Não consegue e não leva a lugar algum.

Existe até um certo paradoxo que quanto mais tenta fazer a arquitetura, entre outras coisas, perfeita, mais fica imperfeito.

Dosar certo é algo que depende de experiência, e inclui aceitar que não será perfeito. Muito menos será apenas "funcionar". Também tem o oposto, há quem acha que basta funcionar que está bom.

Quem não domina os fundamentos segue modinhas e sai muita coisa errada, porque ela esquece do "depende". E esse "depende" não é para escolher por sorteio, tem que estudar muito e ter muita experiência (errar muito e ver erro dos outros, mesmo que tentem esconder e fazer parecer que foram acertos) para fazer a escolha certa. E tem que aceitar, sem se conformar, que vai errar, mesmo com experiência. Só não erra quem só faz o que sempre fez.

Faz sentido para você?

Espero ter ajudado.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).