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

Como faço para acreditarem que a qualidade do código é necessária?

Então, tenho aprox 4 anos de experiência e atualmente estou numa software house e não sei como convencer os meus superiores e equipe que a qualidade do código importa sim. eu prezo demais pela qualidade do meu código, como FrontEnd react, eu componentizo tudo, gero a tipagem de tudo, separo a camada de serviço, lógica e visual tudo em arquivos distintos utilizando custom hook, mas simplesmente não sou valorizado por todo esse apreço, e a maioria dos meus colegas não seguem a mesma dedicacao de pensar que o código é nosso local de trabalho saca? Fazem de qualquer jeito e falam que vai refatorar depois (vulgo nunc) por causa do tempo. Confesso que isso me desmotiva demais e me faz repensar em toda a paixão que dedico no meu código.

Atualmente onde eu trabalho, temos clientes expressivos e simplesmente a empresa não liga pra se nos projetos temos testes unitários, code review, pair programming... Nada disso importa aqui dentro, a única coisa que importa pelo oque eu vejo é entregar logo pro cliente e pronto. Queria realmente uma ajuda pra tentar mudar essa mentalidade por aqui por dentro. Será que todas as software houses são assim?? Ou eu preciso tomar um choque de realidade e aceitar que a qualidade não é nada, oque importa é entregar?

Carregando publicação patrocinada...
12

Eu passei e ainda passo por algo semelhante, e infelizmente é algo bastante comum. A verdade é que quando a liderança não valoriza a qualidade do código, é algo difícil de mudar.

Eu tive sucesso parcial quando conseguia quantificar e atribuir um valor quando a qualidade era baixa. Por exemplo, mostrei o tempo e dinheiro que perdíamos com nosso processo manual de deployment e quanto poderíamos economizar automatizando os processos, além de estimar quanto tempo isso levaria. Fiz o mesmo ao mostrar como testes em uma área crucial do sistema poderiam economizar tempo e dinheiro.

Além disso, mudei minha mentalidade. De agora em diante, escrevo meus testes, estabeleço prazos realistas, documento o que faço e, mais importante, mostro o que faço (o famoso marketing) sem me importar com os outros. Algumas vezes, cheguei a gravar vídeos dos meus testes automatizados para apresentar em reuniões.

Isso me deu uma reputação de alguém que leva um pouco mais de tempo, mas que entrega com qualidade. Até percebi que alguns gestores preferem atribuir esse tipo de trabalho mais crítico para mim.

Sei que minha resposta não é muito motivadora, mas é verdadeira.

1

Por gentileza, como você fez para quantificar o tempo e dinheiro de acordo com a qualidade?

Sobre o processo do deploy, imagino que daria para fazer uma relação de preço/hora do dev em relação tempo gasto para fazer o build e deployment manual. Agora não consegui imaginar isso em no caso da qualidade do código e no uso de testes.

6

Sobre o processo do deploy, imagino que daria para fazer uma relação de preço/hora do dev em relação tempo gasto para fazer o build e deployment manual

Correto.

Agora não consegui imaginar isso em no caso da qualidade do código e no uso de testes.

Utilizei o tempo gasto para fazer os testes manualmente em cada deploy por um ano levando em conta o salario das pessoas testando. Voce vai precisar saber do salario de algumas pessoas ou voce pode simplesmente pegar qualquer media salaria de alguma pesquisa.

Algo mais ou menos assim:

DescricaoTempo em horas
Testar fluxo A1h
Testar fluxo B2h
Testar fluxo C3h
Testar fluxo xxh
Total de horas para testar manualmente15h
### Custo por Deploy:
Total de horas para testar manualmente: 15h 
Custo salarial por hora: $37 
Custo salarial por deploy: $555 

### Custos em 6 meses
Total de deploy em 6 meses: 12 
Custo salarial para testar todos os deploys durante 6 meses: $6660 

### Projecao de custos em 2 anos sem automatizacao
$6660 * 4 = $26640 

### Projecao de custos em 2 anos com automatizacao
Custo salarial para automatizar os tests: $8000 
Custo salarial para testar todos os deploys durante 6 primeiros meses: $6660 

Primeiros 6 meses = $6660 + $8000 
Custo de infra para rodar os testes automatizados nos 18 meses subsequentes: $50 
$6660 + $8000 + ($50 * 18) = $15560 

Total de economia salarial em 2 anos = $26640 - $15560 = $11080 

Conclusao

Em 2 anos, paguaremos $26640 se continuarmos a testar manualmente e $15560 se investimos em automacao. Isso eh uma reducao de 40% dos custos que serao ainda maiores se olharmos para um projecao mais longa como 4 anos por exemplo.

6

Fala, Novato. Estou no mercado há mais de 10 anos e acredito que tenho uma opinião um pouco diferente dos demais que vi comentando aqui.
Nesse jogo, você não muda o ambiente, o ideal é você mudar de ambiente, pois as decisões do lugar não dependem de você.
Se para você manter sua satisfação pessoal com o seu trabalho você depende que os outros façam as coisas da maneira que você julga correta, isso vai virar um peso pra ti, pois certamente as demais pessoas as fazem diferente porque não possuem as mesmas crenças que você.
Isso não quer dizer que alguém está certo, ou errado. Pois sem fazer qualquer juízo de valor, na prática é como as coisas funcionam.
Te digo isso, pois já trabalhei com times em que Eu acreditava que meu código tinha uma qualidade excepcional em função a dos meus pares e quando fui pra outro time que Eu julgava estar mais em sintonia com minha forma de pensar, percebi que meu código era uma porcaria em comparação com os demais.
Sempre vai haver esse contraste, seja pro lado de lá, ou pro lado de cá.
Isso significa que você não pode tentar implantar algumas de suas ideias? Claro que não. Mas as pessoas só te ouvirão quando você for considerado uma autoridade.
E autoridade não se constrói "dentro de casa" (santo de casa não faz milagres né!?) e nem da "noite para o dia".
Espero que encontre uma resposta dentro de si que faça sentido pra ti.
Um forte abraço!

4

Então, é assim que funciona a dinâmica no mercado, as pessoas estão pagando para receber algo de valor de volta. Para o usuário, não faz diferença se a tela que ele está vendo foi construida com componentes corretamente ou não, importa é que ela funcione e que resolva o problema dele (o tal valor que estão pagando).

Claro que deixar tanto débito técnico um hora cobra, mas não é algo tão trivial para ser óbvio para as pessoas (se nem devs vêm isso, imagina alguém de negócios).

Agora, se você faz seu trabalho com qualidade e não é reconhecido, consigo ver duas situações mais comuns:

  1. Na real não está fazendo diferença mesmo, o produto entregue funciona da mesma forma é no final do dia só foi trabalho a mais que você teve.
  2. Realmente tem impacto no produto final mas você não consegue demonstrar tão bem isso.

Se for a primeira opção, realmente não há muito o que fazer a não ser aceitar que não era necessário seguir tanto as "boas práticas" que você vê por ai.
Se for a segunda opção, é quando entra as soft-skills, nesse caso seria conseguir apresentar o que está sendo feito e o impacto disso no produto. Por exemplo: se conseguir mostrar que os sistemas entregues dessa forma resultam em menos problemas, logo menos tempo de manutenção e um custo menor no tempo, com certeza será algo notável. Além disso, mostrar que os clientes ficam mais satisfeitos, retornam com mais recorrência, geram mais resultado financeiro no final do dia.

Claro que é tudo apenas opinião considerando dois parágrafos que li sobre a situação, tudo geralmente tem três pontos de vista. Mas tenta pensar que no final do dia é sobre produto e como isso resolve um problema, e não sobre código em si, o código é apenas a ferramenta para resolver o problema.

3

Eae cara beleza?

Vou fazer alguns apontamentos:

  • A necessidade de qualidade de código para nós que programamos é sempre prioridade(pelo menos deveria), porém ninguém "paga por um código incrível e sim um código que entrega valor ao cliente".Desta forma um código de qualidade e uma entrega rápida é muito difícil se você não tivér uma boa base de conhecimenot e uma experiência com outros projetos(se vc tivér projetos para ter bases e boas idéias para implementar, fica mais fácil as coisas).
  • Eu sofri da mesma forma, e fiz um simples levantamento: "Quantas features entregues no mês x Quantos Bugs encontrados no mês", pq? Pq testes ajudam muito a entregar features sem "efeitos colaterais" em outras features entregues no passado.
  • Outro levantamento: "Tempo de resolução de um BUG", a gente percebeu que com o passar do tempo corrigir um bug tem sido mais cansativo. Portanto nosso código estava muito acoplado e confuso, então vimos como é importante algumas boas práticas de código e uma documentação que expresse como a gente montou a arquitetura.

Mas tudo isso também vem do contexto da sua empresa em relação a mudança e melhorias, e como você vende a sua idéia...

Boa sorte!

3

Olá! Espero que esteja bem, independentemente do fuso horário em que esteja. Queria compartilhar um pouco da minha experiência nos últimos seis meses, quando trabalhava em um hospital. A situação lá era desafiadora, principalmente devido à arquitetura de software. Posso dizer sem rodeios que era um verdadeiro desastre. Era difícil implementar qualquer mudança significativa; muitas vezes, acabávamos apenas refatorando códigos que logo voltavam a dar problemas.

Inicialmente, eu tinha boas intenções: Queria melhorar a arquitetura do software, estabelecer práticas de código mais eficientes e introduzir revisões de código, que são essenciais até mesmo em projetos pessoais. O pair programming também era uma ideia que considerávamos genial, pois poderia contribuir significativamente para o trabalho em equipe.

Entretanto, o maior obstáculo era a minha equipe. Tínhamos um colega sênior de 51 anos que pensava saber tudo, mas na verdade tinha pouco conhecimento tanto de back-end quanto de front-end. Eu constantemente sugeria ideias para melhorar, como migrar o template do front-end de React 15, que usava bootstrap com sintaxe JS pura e componentes de classe, para React 18 com Typescript, SWC, Vite e criação componentes funcionais utilizando os ganchos do React, além de adotar bibliotecas auxiliares como Axios, React Router Dom, Yup ou Zod, e React Hook Form ou Formik.

Me lembro que quando cheguei, apresentei a sintaxe JSX para eles. E, Sabe como é entender algo que não faz sentido inicialmente, mas depois parece tão óbvio? Foi exatamente assim que eles se sentiram ao ver a sintaxe JSX. (1 ponto pra mim)

Para complementar a mudança, eu estava desenvolvendo um Design System, que seria posteriormente transformado em uma biblioteca de componentes prontos feitos com Styled Components ou TailwindCSS. Acreditei firmemente que essa abordagem não apenas melhoraria a qualidade e a eficiência do nosso software, mas também tornaria o desenvolvimento e a manutenção muito mais suaves e escaláveis no futuro, pois séria feito de modo modular, escalável e fortemente customizável.

No que diz respeito ao back-end, propus migrar do Node.js 14 para o Node.js 16^ com Typescript, substituindo o framework que era o Express para o Fastify, e adotando outras ferramentas como nodemon, cors, morgan juntamente com Testes Unitários, (Nossos Bancos de dados eram OracleDB e Postgres). A sugestão incluía a adoção de classes para facilitar o desenvolvimento, já que muitas partes do código eram complexas e difíceis de manter. E também para deixar o back-end escalável, modular e fácil de dar manutenção.

Em resumo, as pessoas que não querem evoluir simplesmente serão contra tudo aquilo que esteja relacionado à evolução. Quando quiserem mudar algo, acabarão fazendo uma revolução que causará danos mais críticos do que se pode imaginar, como quando a aplicação quebrou em plena reunião para os diretores. As ideias de melhorar processos e práticas jamais serão ruins. Infelizmente, não consegui fazer isso no meu trabalho passado, pois, com apenas 19 anos e sem faculdade, era complicado. Mas tudo isso mudou quando o chefe do meu irmão me contratou como Engenheiro de Software Front End em uma das 10 maiores empresas do Brasil. Toda a orientação que apresentei em diversas PoCs e MVC para meus antigos colegas de trabalho me levou a estar onde estou hoje. Não me arrependo de nada, ajudei como pude, propus ideias, melhorias de processos, autonomia em grande escala. Mas não controlo pessoas. Devemos apenas aceitar, mas caso queira persistir, é algo que nunca deixei de fazer. Quem sabe, uma hora talvez você consiga, mas vai ser bastante estressante e frustrante.

1

mano, obrigado por compartilhar esse relato. fico feliz de saber que uma hora a persistencia vence. e parabéns pra ti por ter chegado onde chegou !

3

O que vai te ajudar a trazer boas praticas pro seu ambiente de trabalho e vender essas praticas como algo benéfico para o produto.

Falar sobre paixão ou dedicação sem mostrar resultados vai ser um tiro no pé.

O que pode te ajudar propor testes automatizados:

  • Dentro do github do projeto busque por bugs mais criticos e mais recentes
  • Veja quanto tempo foi gasto nestas correções
  • Mostre que com testes automatizados esses bugs poderiam não existir
  • Reforce que com testes automatizados mudanças no código fonte podem ser feitas com mais seguranca e menos riscos de novos bugs

para propor uma melhor uma nova arquitetura é algo semelhante

2

no fim o que é mais valorizado é o volume de entregas e o que é visto pelo cliente final, qualidade é importante mas infelizmente a única forma de mostrar o real valor é mostrando na prática como problemas qie surgiram poderiam ser evitados focando na qualidade é mensurando os impactos positivos, mas numa software house geralmente é aquilo, "empreitada", entregou rodando o mínimo sem bugs bizarros, próximo projeto e vida que segue, esse tipo de apreço pela qualidade geralmente é mais valorizado em empresas baseadas em produto ou quando parte do cliente uma cobrança nesse quesito.

1

Eu recomendo você a deletar a postagem, isso dá justa causa. Acredito que deveria postar de forma anônima, se alguém da empresa ver e te denunciar pode te dar problemas. falo de coração. Quanto a programar bem a maioria não se importa com isso, então é como nadar contra a maré, infelizmente não tem o que fazer, faça bem por você mesmo.

1

Em engenharia de software existe a chamada dívida técnica. A empresa opta por um padrão de projeto mais "rápido" porém problemático a longo prazo pra entregar logo e com o passar do tempo dar manutenção no projeto pra mante-lo funcionando.