Software

25 mar, 2024

O dia a dia desenvolvendo software em uma fintech: como resolvemos problemas complexos com qualidade

Publicidade

Neste artigo, explicamos como se dá a resolução de problemas de código no Asaas e como usamos as documentações e cultura de engenharia a nosso favor para desenvolver códigos que resolvem problemas complexos e com qualidade diariamente. 

No cenário de Engenharia de Software, a experiência com a resolução de problemas desenvolve e aprimora habilidades analíticas, o conhecimento de novas tecnologias, além de aprofundar o entendimento do produto e regras de negócio. 

Considerando que “manter a simplicidade” do código é um dos princípios da cultura da Engenharia no Asaas, nosso principal desafio no dia a dia é justamente encontrar soluções elegantes e performáticas mantendo simples, afinal, quanto mais complexa for uma solução, mais difícil será a manutenção e a implementação de funcionalidades futuras.

Obstáculos como 1. restrições de tempo; 2. dependências externas; ou 3. a mudança de requisitos ao longo do tempo também podem surgir no caminho. Por isso, é essencial manter a atenção aos requisitos técnicos necessários e à expectativa do cliente em relação ao produto, para assim quebrar o problema em pequenas partes e obter melhor compreensão, o que consequentemente contribuirá para uma proposta de solução mais assertiva.  

Portanto, fatores como a performance, o custo, o prazo de entrega e a escalabilidade são importantíssimos para a nossa tomada de decisão. 

 

Como diagnosticamos e analisamos problemas 

Por aqui, usamos o método de análise de logs, no qual temos monitores automáticos que indicam quando ocorrem falhas ou problemas que precisam de solução. Além disso, a depuração é nossa aliada, com testes automatizados e monitoramento de desempenho de código. 

Para lidar com problemas de desempenho e otimização de código também são aplicadas algumas estratégias, como: a redução de complexidade; a análise e otimização de consultas SQL; e a implementação de cache de resultados.

Quando uma solução inicial não funciona conforme o esperado, retornamos para a análise e identificação do problema específico. Neste momento, reavaliamos outras alternativas para então desenvolver e testar a nova solução proposta, aplicando testes automatizados e manuais para validar as funcionalidades e a segurança das aplicações.

Todas estas medidas aliadas a revisão e padronização da codificação de forma “Altruísta” colaboram com o objetivo de garantir a qualidade de nossas soluções. 

 

E em relação à priorização de tarefas, levamos em consideração: a importância do problema, o impacto para o cliente; a complexidade do desenvolvimento; e os prazos/dependências com terceiros. 

 

A importância da comunicação e colaboração do time 

Neste cenário, a colaboração com o time é essencial para o desenvolvimento da melhor solução para o cliente. Isso porque a diversidade de profissionais, experiências, habilidades e perspectivas contribui para a discussão enriquecedora da melhor solução ao final. Além disso, uma comunicação eficaz entre os envolvidos permite que todos os stakeholders do projeto estejam alinhados e trabalhando para o mesmo objetivo.

Todos os dias, nos reunimos para as dailies, garantindo que o nosso squad esteja plenamente atualizado sobre as atividades e desafios encontrados nas soluções em desenvolvimento. E semanalmente realizamos a nossa reunião de backlog, um momento crucial onde o squad se reúne para se atualizar e priorizar as atividades, levando em consideração a importância determinada pelo time de produto.

 

5 dicas para resolver problemas complexos mantendo a clareza mental 

 

1. Quebre o seu problema em pequenas partes;

2. Discuta sobre a solução com outras squads e devs;

3. Troque conhecimento;

4. Peça a revisão do seu código;

5. Busque manter sua solução simples e compreensível.

 

Com a autonomia de solucionar problemas na Engenharia, nossa equipe é capaz de identificar melhorias não só no produto, mas também nos processos, o que nos leva à otimização na performance e refinamento de práticas utilizadas no desenvolvimento de software, contribuindo diretamente com a melhoria contínua do nosso produto e entrega para os usuários. 

 

Se você gosta de resolver problemas complexos e quer desenvolver software de alta qualidade, confira as oportunidades disponíveis para fazer parte do time!