Os 6 pilares do desenvolvimento moderno são o resultado do agrupamento de vários conceitos e técnicas que são aplicados atualmente na concepção e desenvolvimento de software. Os assuntos abordados em cada pilar refletem a experiência de mais de 25 anos acumulada pelos membros da Better Developer e são a base conceitual usada para estruturação de treinamentos e consultoria.

Os conceitos e técnicas são aplicáveis em todas as fases de desenvolvimento de uma solução, partindo da concepção da idéia do seu negócio até a implementação e implantação desta ideia no mercado usando para isto metodologias modernas que estejam alinhadas ao mindset Lean e Ágil e cultura DevOps.


Negócio
Arquitetura
de Software
Stack de

Desenvolvimento

Código
Integração
Contínua
Entrega
Contínua

Negócio
Este pilar é dedicado a questões relacionadas ao produto da empresa, envolvendo a definição do modelo de negócio, priorização do trabalho e a entrega contínua.

  • Concepção Lean de Produtos: Técnicas para criar soluções inovadoras e de aderência no mercado (Canvas, MVP, Design Thinking, Personas, etc).
  • Product Backlog: Técnicas de gestão e priorização de backlog (Product Backlog, RoadMap, User Stories com INVEST, ATDD, Critérios de Aceite, etc).
  • Entregas em iterações: Técnicas para acompanhar as entregas do produto, garantindo seu ciclo de vida e retorno de investimento (Indicadores, Business Value, Return of Investment, Churn, Ciclo de Vida, Débito Técnico, etc).
Arquitetura de Software
Este pilar é dedicado a técnicas e padrões de projetos de software usados para definição e modelagem de soluções. Aqui abordamos:

  • API’s: Técnicas para fazer o desenvolvedor pensar em API's e como desenvolvê-las.
  • Camadas: Questões que farão o desenvolvedor entender quando um sistema deve ou não ser dividido em camadas, principalmente quando se pensa em API's.
  • Componentes: Pensar em API's e desenvolvimento em Camadas levarão o desenvolvedor a criar componentes, e aqui temos boas práticas que auxiliam a construção de bons componentes.
  • Padrões de projeto: O desenvolvedor ao aplicar na prática os demais itens que compõem este pilar precisará conhecer padrões de projeto que o auxiliem durante a implementação e manutenção de uma solução, e aqui temos quais padrões mais úteis e utilizados.
Stack de Desenvolvimento
Para iniciar a implementação é fundamental que se faça escolhas referentes às linguagens de programação a ser utilizadas, bem como outras ferramentas que possibilitam a construção da solução. Fazer essa escolha muitas vezes não será simples, e neste pilar temos critérios que podem ser utilizados para facilitar a escolha.

  • Linguagens de programação e frameworks: Consideramos aqui princípios como: maturidade, confiabilidade, produtividade, comunidade envolvida na evolução da plataforma, curva de aprendizado, profissionais disponíveis no mercado e também o conhecimento que o time possui para auxiliar a escolha da linguagem utilizada.
  • Persistência de Dados: Aqui tratamos os vários métodos existentes para persistir os dados de uma solução, detalhando vantagens e desvantagens conforme as necessidades do seu negócio.
  • IDE’s: Programar é uma muitas vezes um processo artesanal, mas podemos fazer o uso de IDE’s que proporcionam maior agilidade, facilidade e produtividade nessa arte. Aqui trazemos aspectos que devemos levar em conta ao escolher uma IDE de desenvolvimento.
  • Ferramentas Utilitárias: Com as várias definições que são feitas como: arquitetura de software, linguagem de programação, persistência e IDE’s, haverá a possibilidade de utilizar outras ferramentas utilitárias que trazem os mesmos benefícios do uso de IDE’s. Temos aqui que tipos de ferramentas devemos considerar o uso.
Código
É na etapa de codificação que as funcionalidades de sua solução ganham vida, então esta etapa se torna muito relevante para que tenhamos sucesso na entrega da solução. Trazemos aqui aspectos importante que devem ser aplicados durante a fase de codificação.

  • Gestão de código fonte: Codificar é sem dúvida a etapa mais prazerosa para o desenvolvedor, e ela pode ser feita de forma organizada com o acompanhamento através de métricas e uso de estratégias que possibilitem um controle eficiente sobre o código gerado incluindo aspectos como: versionamento, builds, empacotamento e deploy.
  • Testes automatizados: Implementar testes ainda é um tabu a ser superado por muitos desenvolvedores e aqui trazemos dados que comprovam a importância do uso desta técnica bem como conceitos que auxiliam o desenvolvedor implementar testes fáceis e eficientes.
  • Qualidade de código: Desenvolver código com qualidade não é uma tarefa tão simples, principalmente por haver questões subjetivas que variam de acordo com o "gosto" do desenvolvedor. Mas através do uso ferramentas e convenções é possível buscar padrões de qualidade que garantem a produção de aplicações fáceis de manutenção e evolução.
Integração Contínua
Quando temos um time de desenvolvedores implementado código um dos pontos mais importantes a ser considerado é a forma como esse time irá integrar o código implementado por cada desenvolvedor. Esse pilar aborda o que é necessário para aplicar esse tipo de técnica.

  • Técnicas de integração de código: Aqui apresentamos técnicas que possibilitam uso de integração contínua de modo eficiente reduzindo o risco de problemas e possibilitando um desenvolvimento de software mais coeso.
  • Automatização: O processo de integração do código deve acontecer da forma mais transparente possível para o time de desenvolvedores e trazemos aqui o uso de automatização para possibilitar isso, criando cenário agradável ao desenvolvedor onde ele tenha integração do código necessária sem que isso tome um tempo excessivo do seu dia a dia.
  • Ferramentas de CI: Implantar um processo de integração que esteja automatizado irá requerer obrigatoriamente o uso de ferramentas que viabilizem tais automatizações. Apresentamos aqui ferramentas bem aceitas no mercado que possibilitam a aplicação de integração contínua.
Entrega Contínua
Com o código implementado, uma etapa importante para desenvolvimento de uma solução é o como você empacota sua aplicação para realizar uma entrega e como você implanta esse pacote para disponibilizar a sua solução. Neste pilar tratamos dos assuntos referentes a essa etapa tão importante para o sucesso de sua solução.

  • Entrega vs Implantação: Entregar artefatos da sua aplicação e implantá-los são ações diferentes durante o desenvolvimento da sua solução. Trazemos neste tópico quais são essas diferenças e como trabalhar com esses dois assuntos no dia a dia.
  • Artefatos entregáveis: Uma boa entrega de software parte do princípio que você saiba exatamente que artefatos deve entregar e como esses artefatos deverão ser utilizados. Aqui abordamos os tipos de artefatos usados atualmente e como trabalhar com cada um deles.
  • Automatização de empacotamento: Gerar seus artefatos pode requerer várias etapas e tarefas que precisam ser executadas e aqui mostramos como devemos fazer uso de automatização para que essas tarefas não sejam executadas de forma manual, diminuindo assim o risco de erros nessa etapa e economizando o tempo do time.
  • Automatização de implantação: Implantar seus artefatos também é um processo que pode ser automatizado para trazer maior confiabilidade e redução de risco nessa etapa. Neste tópico exploramos as alternativas possíveis esse processo de automatização.
  • Ambientes para implantação: Dependendo do tipo e criticidade de sua solução podemos ter modelos variados de ambientes onde sua solução será disponibilizada. Aqui mostramos os modelos possíveis e como fazemos para definir o modelo adequado para sua solução.