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

Qual a importancia da arquitetura de software (e outros processos além do "codar") para vocês?

Um dos principais diferenciais da minha empresa (Piggly Lab) que me fez e faz conquistar dezenas de projetos de sofware sob demanda é respeitar os processos que vão além de abrir o VSCode e começar a programar. Tem muita coisa por trás. Desde a arquitetura, modelagem, testabilidade e afins.

Claro que acredito que tem solução para todo mundo no mercado. Profissionais e empresas com propostas mais aceleradas que irão pular todos os processos possíveis (testes unitários, testes de integração, UX/UI, QA, arquitetura, etc) desde que o "software funcione". Assim como também existe profissionais e empresas mais cuidadosas com o processo. Mas em geral, vejo constantemente devs desvalorizando partes do processo - como comentário pessoal tem gente ainda que mete VARCHAR e INT em todas as tabelas de um banco relacional, não sabe quando usar outros tipos e se quer se importa com questões de DBA.

Dentre todas essas coisas, uma das que mais vejo a galera abrir mão é a arquitetura. A quantidade de sofware que foi feito por freelas que eu pego sem uma linha de documentação, sem um conjunto claro de operações definidas, é impressionante... O dev simplesmente já parte para o git iniciar o código-fonte, monta as SQL ou coleções esperadas exatamente igual aos modelos de dados e classes (mal dos ORM) e vai entregando requisitos (isso quando não atrasa). Não sei se é impressão minha, mas nesses 15 anos que trabalho com isso, vejo muita gente simplesmente negligenciando processos além de "programar" em si.

Uma das primeiras coisas que eu faço para qualquer projeto que chega por aqui, por exemplo, é produzir a arquitetura (todos os diagramas, modelagem, definições, etc). Utilizo principalmente a metodologia Domain-Driven Design e foco totalmente no valor da entrega do software acima da aceleração do desenvolvimento. O resultado é produtivo, tenho uma resposta positiva acima de 95% de acerto, menos de 5% de bugs e uma fidelização alta.

O resultado é claro, um software entregue na data esperada e na qualidade ideal para que os usuários sintam a fluídez dos processos. Observo até pelos meus contratantes que geralmente estão (ou estavam) trabalhando com outros devs e empresas e dispensarem todos para trazer todas as demandas para minha empresa. Pelo menos na minha visão, os processos além de codar elevam a qualidade de entrega, facilitam o processo de desenvolvimento e tornam o projeto mais dinâmico e alinhado com as expectativas das entregas.

Tenho visto muito naquela rede (X) os devs listando profissões que qualificam como desnecessárias (DBA, UX/UI, Gerente, Arquiteto, QA, PM e PO, Scrum Master, etc) sendo que nem conseguem entregar essas competências e mal conseguem cumprir prazos. Por que alguns devs se incomodam tanto com essas especialidades? Na opinião de vocês, não faz mais sentido planejar e arquitetar antes de executar (deixando para quem tem competência ou conquistando essa competência)?

Carregando publicação patrocinada...
4

Codar é, sem dúvida, uma das etapas menos importantes quando olhamos para a engenharia de software como um todo. A analogia que sempre repito é bastante esclarecedora: se compararmos a engenharia de software com a engenharia civil, codar é como o trabalho de um pedreiro. É uma fase vital, mas apenas uma das muitas necessárias para construir um projeto robusto e de sucesso.

Durante o desenvolvimento de qualquer projeto de engenharia complexo, seja ele um software, uma ponte ou um avião, produzimos uma infinidade de documentos que são a essência do projeto. Eles são a representação detalhada de cada aspecto, cada parafuso, cada linha de código. Eles permitem que centenas ou até milhares de profissionais trabalhem juntos, em harmonia, para fazer algo grandioso.

No engenharia de um software, por exemplo produzimos uma série de artefatos, especificação de requisitos, descrição do design, diagramas UML, planos de verificação. Entre outros. Esses documentos, são por definição parte do software. E eu diria que a qualidade do software depende muito mais destes artefatos do que do código propriamente dito.

O código é, na verdade, apenas uma "materialização" de todos estes documentos. Assim como uma ponte é apenas a materialização de diversos documentos de engenharia, desenhos técnicos, planinhas de cálculos, etc. Você já ouviu falar de uma ponte ou prédio que caiu por erro de construção? Não? Porque é virtualmente sempre por erro de projeto.

No software, é um pouco diferente, mas existem evidências científicas robustas que mostram que a maior parte dos bugs e defeitos pode ser rastreada para problemas de requisitos e design.

Assim essas etapas "preparatórias" são, em muitos aspectos, muito mais cruciais para o sucesso de um projeto que o próprio código. "Preparatórias" entre aspas, porque no universo do software, iteração e prototição com código funcional são fundamentais, então a construção deste artefatos deve acontecer de forma quase paralela ao código.

Por que alguns devs se incomodam tanto com especialidades como DBA, UX/UI, Gerente, Arquiteto, QA, PM e PO etc? A resposta pode estar na comparação com a construção civil. Esses devs são semelhantes aos mestres de obras que constroem casas: em projetos simples que já têm experiência, talvez eles realmente não tenham a necessidade de todos esses profissionais especializados. Eles podem ter habilidades suficientes e gerenciar todas as etapas do processo por conta própria.

No entanto, assim como na construção, para qualquer projeto de maior complexidade, a ausência desses especialistas vai resultar em erros, atrasos e problemas de qualidade. Assim como um mestre de obras pode erguer uma casa sem a orientação de um arquiteto ou engenheiro, um desenvolvedor pode criar uma aplicação básica sem a ajuda de um DBA ou designer UX/UI.

Da mesma forma, estruturas mais complexas, como arranha-céus ou pontes, exigem uma equipe diversificada de especialistas, softwares mais robustos e complexos também demandam uma variedade de competências para assegurar sua eficácia e qualidade. A resistência a essas especialidades é fruto de uma falta de compreensão da importância e do valor que cada uma delas adiciona ao processo de desenvolvimento, normalmente devido a falta de exposição à projetos de maior complexidade.

1

Voces acreditam que um dev pode "aprender" esses conceitos de arquitetura sem necessariamente passar por uma graduação? Estou estudando há um tempo por conta propria e sinto muita falta desse tipo de conteúdo.. ja fui atras, li algumas coisas e até escrevi sobre o basico de UML em um artigo ( https://www.linkedin.com/pulse/what-uml-gabriel-poeta/?trackingId=U2ILOwYWQ1aSxKbzT%2B1ipA%3D%3D ). Mas a maioria da galera quer só saber de aprender a abrir o VSCode e pronto.

2

É extremamente possível, a melhor forma de fazer isso é buscar na literatura. Eu diria até para fugir desses cursos emlatados que passam superficialmente pelos processos. Nada se compara, é claro, à gradução. Como exemplo, tive um semestre inteiro só sobre UML. Podem falar o que quiser, mas faz diferença. De todo modo, não vou negar que existem sim excessões à curva em relação ao nível de aprendizado, acabei sendo uma dessas, mas dá para consolidar esses aprendizados de outras formas realmente.

1
0
1
1

Isso é uma discussão interessante. Eu já vi o Uncle Bob, escritor de Código Limpo e Arquitetura Limpa, defender que criação de diagramas UML antes de fazer o código é perda de tempo. Ele diz que a melhor arquitetura é aquela que é guiada por testes, com TDD, e que os diagramas UML acabam sempre mudando quando você cria um software, e nunca funcionam do jeito que deveria. Ele diz também que a arquitetura é o próprio código em si. Vale mesmo a pena fazer toda a diagramação antes de programar? Eu sei que os requisitos devem estar bem claros desde o começo, mas diagramas de arquitetura realmente servem pra alguma coisa?