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!