Objetivo do documento
Este documento de diretrizes de desenvolvimento tem como objetivo principal estabelecer um conjunto abrangente e detalhado de práticas, padrões e princípios que devem ser seguidos por todos os desenvolvedores em nossa organização. Ele serve como um guia autoritativo e uma referência central para garantir consistência, qualidade e eficiência em todos os nossos projetos de desenvolvimento de software.
Os objetivos específicos deste documento incluem:
-
Padronização: Estabelecer um conjunto uniforme de práticas de codificação, arquitetura e design em toda a organização.
Exemplo: Todos os projetos Laravel devem seguir a estrutura de diretórios padrão do Laravel, com controllers em
app/Http/Controllers, models emapp/Models, e assim por diante. -
Qualidade: Promover práticas que levem a um código mais limpo, mais testável e mais manutenível.
Exemplo: Todos os métodos públicos devem ter testes unitários associados, visando uma cobertura de código de pelo menos 80%.
-
Eficiência: Otimizar o processo de desenvolvimento, reduzindo o tempo gasto em decisões de design e implementação repetitivas.
Exemplo: Utilizar um conjunto predefinido de bibliotecas e frameworks aprovados para tarefas comuns, como logging (ex: Monolog) ou manipulação de datas (ex: Carbon).
-
Segurança: Garantir que as melhores práticas de segurança sejam seguidas em todos os projetos.
Exemplo: Todas as entradas de usuário devem ser sanitizadas e validadas, utilizando as ferramentas de validação do Laravel para prevenir ataques como SQL Injection e XSS.
-
Escalabilidade: Assegurar que nossos sistemas sejam projetados para crescer e se adaptar às mudanças nas demandas de negócios.
Exemplo: Utilizar caching (como Redis) para dados frequentemente acessados e implementar filas (como Laravel Queue) para tarefas assíncronas que podem sobrecarregar o sistema.
-
Onboarding: Facilitar a integração de novos desenvolvedores ao fornecer um recurso abrangente que detalha nossas práticas e expectativas.
Exemplo: Novos desenvolvedores devem completar um programa de onboarding de duas semanas, que inclui a leitura completa destas diretrizes e a conclusão de um projeto de exemplo que demonstra a aderência a elas.
1.2. Visão geral da empresa e seus produtos
Nossa empresa é uma organização de tecnologia líder no mercado, especializada no desenvolvimento de soluções de software inovadoras e escaláveis. Nosso portfólio diversificado de produtos atende a uma ampla gama de necessidades do mercado, desde aplicações empresariais de grande escala até soluções de nicho altamente especializadas.
Produtos principais:
-
Toolzz LMS (LXP)
- Arquitetura: Monolito Laravel
- Descrição: Plataforma whitelabel para criação de cursos e plataformas de ensino a distância.
- Tecnologias principais: Laravel, MySQL e Redis
-
Toolzz AI
- Arquitetura: Microserviços
- Descrição: Uma plataforma avançada de IA que oferece serviços como processamento de linguagem natural, visão computacional e análise preditiva.
- Tecnologias principais: Node.js, AdonisJS, PostgreSQL, Redis, CloudFlare Workers, NextJS, LangChain
-
Toolzz Bots
-
Arquitetura: Monolito
-
Descrição: Plataforma para criação de chatbots e aplicações conversacionais de forma visual e intuitiva, sem necessidade de programação.
-
Tecnologias principais: Node.js, Redis, PostgreSQL
-
-
Toolzz Chat
-
Arquitetura: Microserviços
-
Descrição: Plataforma de comunicação com clientes que permite a integração de múltiplos canais de atendimento, como chat ao vivo, e-mail, redes sociais e mais, tudo em um único painel.
-
Tecnologias principais: Ruby on Rails, Node.js, Redis, PostgreSQL, React
-
-
Toolzz Connect
- Arquitetura: Microserviços
- Descrição: Plataforma de automação visual que permite a integração de múltiplos aplicativos, ferramentas e serviços para otimizar processos e fluxos de trabalho sem a necessidade de codificação.
- Tecnologias principais: Node.js, AWS, Webhooks, GraphQL
Esta diversidade de produtos e arquiteturas demonstra a necessidade de diretrizes de desenvolvimento abrangentes e flexíveis que possam ser aplicadas em diferentes contextos tecnológicos.
1.3. Importância das diretrizes de desenvolvimento
As diretrizes de desenvolvimento desempenham um papel crucial no sucesso de nossa organização e na qualidade de nossos produtos. Sua importância se manifesta em vários aspectos:
-
Consistência As diretrizes garantem que todos os desenvolvedores, independentemente de sua experiência ou background, sigam as mesmas práticas e padrões. Isso resulta em um código mais uniforme e previsível em todos os projetos.
Exemplo: Ao definir um padrão para nomenclatura de variáveis (como camelCase para variáveis e PascalCase para classes), garantimos que todo o código seja consistente e fácil de ler, independentemente de quem o escreveu.
-
Qualidade Ao estabelecer padrões elevados e melhores práticas, as diretrizes contribuem diretamente para a melhoria da qualidade geral do código e dos produtos.
Exemplo: A exigência de testes unitários para todas as novas funcionalidades ajuda a identificar bugs precocemente e garante que o código funcione conforme o esperado.
-
Eficiência As diretrizes eliminam a necessidade de debates recorrentes sobre práticas de codificação e design, permitindo que os desenvolvedores se concentrem na resolução de problemas de negócios.
Exemplo: Ao definir uma estrutura padrão para projetos Laravel, eliminamos discussões repetitivas sobre onde colocar diferentes tipos de arquivos, acelerando o início de novos projetos.
-
Manutenibilidade Código que segue diretrizes consistentes é mais fácil de entender, manter e atualizar, reduzindo o custo total de propriedade do software ao longo do tempo.
Exemplo: A prática de escrever comentários significativos e manter uma documentação atualizada facilita a compreensão do código por outros desenvolvedores no futuro.
-
Escalabilidade As diretrizes ajudam a garantir que nossos sistemas sejam projetados com escalabilidade em mente desde o início.
Exemplo: A recomendação de usar padrões de design como Repository e Service Layer no Laravel ajuda a criar uma separação clara de responsabilidades, facilitando a escalabilidade do código.
-
Segurança Ao incorporar práticas de segurança em nossas diretrizes, garantimos que a segurança seja uma consideração em todas as fases do desenvolvimento.
Exemplo: A exigência de usar prepared statements para todas as consultas SQL ajuda a prevenir vulnerabilidades de injeção de SQL.
-
Onboarding As diretrizes servem como um recurso valioso para novos membros da equipe, acelerando o processo de integração e garantindo que eles se alinhem rapidamente com as práticas da equipe.
Exemplo: Um novo desenvolvedor pode consultar as diretrizes para entender como estruturar testes em um projeto Laravel, sem necessidade de orientação direta constante.
-
Colaboração Com práticas padronizadas, é mais fácil para os desenvolvedores colaborarem em diferentes projetos e entenderem o código uns dos outros.
Exemplo: O uso consistente de ferramentas de análise estática de código (como PHPStan para PHP) em todos os projetos permite que os desenvolvedores identifiquem e corrijam problemas de qualidade de código de forma consistente.
-
Inovação Controlada Enquanto as diretrizes estabelecem padrões, elas também devem permitir flexibilidade para inovação quando justificada.
Exemplo: As diretrizes podem incluir um processo para propor e avaliar novas tecnologias ou práticas, permitindo que a equipe evolua suas práticas de forma controlada.
-
Conformidade e Auditoria Em muitos setores, a conformidade com certos padrões é obrigatória. As diretrizes ajudam a garantir que essas exigências sejam atendidas consistentemente.
Exemplo: Para projetos que lidam com dados pessoais, as diretrizes devem incluir práticas específicas de proteção de dados para garantir conformidade com a LGPD.
Em resumo, as diretrizes de desenvolvimento são a espinha dorsal de nossa prática de engenharia de software. Elas não são apenas um conjunto de regras, mas um reflexo de nossa cultura de excelência técnica e nosso compromisso com a entrega de produtos de alta qualidade. Ao aderir a estas diretrizes, cada desenvolvedor contribui para o sucesso coletivo de nossa organização e para a satisfação de nossos clientes.