Automatizando a adoção de guardrails, evolução tecnológica e cultura de qualidade

Rebeca Elizabeth Martins Galvão
Livelo

--

O Instituto de Engenheiros Eletricistas e Eletrônicos (IEEE) define qualidade como o “nível de aderência de um sistema, componente ou processo aos seus requisitos especificados”. É um objetivo comum às empresas estabelecerem requisitos que garantam a qualidade de seus produtos.

No contexto de API’s, a qualidade vai além de um código limpo, englobando fatores como aderência ao negócio, segurança, otimização de recursos e logs bem estruturados. Então, como podemos assegurar que
essa qualidade seja mantida em times cada vez mais distribuídos?

Podemos responder ao questionamento com uma única palavra: automação. O uncle Bob, em sua terceira lição, afirma que automação é a chave para um desenvolvimento de alta qualidade e que devemos automatizar o maior número possível de aspectos relacionados ao desenvolvimento. Porém, automatizar não é uma tarefa simples e existem diferentes abordagens que buscam auxiliar nesse processo.

Dentre algumas soluções existentes no mercado, temos, por exemplo, o GitLab CI. Esta ferramenta permite a configuração de algumas regras, como a existência de um arquivo README.md. Já a ferramenta danger JS possibilita automatizar o code review. No entanto, cada empresa possui seu próprio conjunto de regras e ter um nível avançado de configuração pode ser complexo nessas soluções.

Com o intuito de permitir uma constante evolução tecnológica de nossos produtos e manter uma cultura de qualidade ativa, iniciamos uma jornada de DevEx (Developer Experience) aqui na Livelo. E para auxiliar nesse processo de automação, desenvolvemos uma aplicação chamada ODT!

O ODT tem como objetivo verificar se os requisitos especificados no arquivo de regras são cumpridos no repositório, por meio da análise estática de código e diretórios. Com base em nossos guardrails foram desenvolvidas diferentes regras com diferentes níveis de criticidade. O ODT analisa então se essas regras estão aderentes em diversos tipos de arquivos: Dockerfile, .java, .py, .js. Garantindo que todos os nossos projetos estejam aderentes, utilizando a versão mais atualizada de uma dependência interna, se os timeouts estão configurados corretamente e muito mais.

Agora, vamos entender melhor como o projeto funciona.

Visão geral do ODT

O ODT, foi escrito em Python utilizando o framework Flask e está integrado à nossa esteira. Assim, a análise ocorre a cada commit, proporcionando um feedback rápido e contínuo sobre a qualidade do código e prevenindo problemas maiores no deploy.

O processo de análise funciona da seguinte maneira: inicialmente, ele carrega as regras definidas em um arquivo YAML. Em seguida, aplica a validação das regras pertinentes ao projeto (não faz sentido tentar aplicar regras de Node em um projeto Java 😉). Ao final, é retornado um json com todas as regras violadas, um valor de pontuação e um arquivo onde a violação foi encontrada, além de uma possível solução de como resolver um problema.

Interface do ODT
Exemplo de regras aplicadas em um projeto

As regras são definidas com data de ativação futura, permitindo que os times recebam um feedback prévio sobre futuras violações e se adequem conforme necessidade. Após a data de ativação, as regras passam a ser impeditivas (se o score calculado for maior do que 30 pontos ou se alguma regra considerada crítica não foi atendida). Desta forma, garantimos que todos os nossos guardrails estão sendo seguidos.

Com a implantação do ODT e adesão dos times, conseguimos manter uma cultura de evolução tecnológica ativa aqui na Livelo, permitindo que nossos produtos sigam de forma padronizada e aderentes as nossas boas práticas.

Caso deseje ter mais informações sobre o projeto, confira este artigo.

--

--

Rebeca Elizabeth Martins Galvão
Livelo
Writer for

Apaixonada por tecnologia e cultura geek. Atualmente estudando sobre AWS 👩🏻‍💻