Metodologia Agile

“Metodologia Agile” é um termo geral usado para se referir a conceitos, práticas e, às vezes, ferramentas que refletem a filosofia de desenvolvimento de produtos conhecida como “Agile”.

O movimento Agile nasceu em 2001 durante uma reunião de 17 desenvolvedores com visão de futuro em um retiro em Utah. A filosofia e os princípios estabelecidos durante o retiro formaram a base do Agile e das subsequentes metodologias Agile que foram desenvolvidas a partir de seu trabalho inicial.

Desde a publicação do documento original, “O Manifesto para o Desenvolvimento Agile de Software”, a metodologia Agile teve um efeito transformador profundo não apenas no desenvolvimento de software, mas também nas organizações em quase todos os campos. Os valores da criação de produtos enxutos, da descoberta iterativa, do desenvolvimento focado na mudança e do trabalho colaborativo realizado em todos os grupos corporativos e sociais formaram a base de novos e avançados modelos de negócios e produtos em todo o mundo.

Este guia da Metodologia Agile servirá como uma visão geral para apresentar os princípios fundamentais do Agile. Começaremos com uma definição de Metodologia Agile conforme proposta no Manifesto de 2001 e continuaremos descrevendo algumas das ramificações mais conhecidas que surgiram do ágil. Por fim, discutiremos alguns dos métodos e ferramentas Agile mais populares.

O que é Agile?

Agile é uma abordagem de trabalho (inicialmente desenvolvimento de software) que pode ser pensado como um compromisso com mudanças e melhorias contínuas.

valores Agile

Agile é sucintamente descrito nos seguintes valores, que foram escritos em 2001 pela equipe original do Agile Manifesto:

  • Indivíduos e interações sobre processos e ferramentas
  • Software de trabalho sobre documentação abrangente
  • Colaboração do cliente sobre negociação de contrato
  • Respondendo à mudança além de seguir um plano

Olhando para esses princípios, é fácil ver que o Agile é definido tanto pelo que não é quanto pelo que é. Os quatro valores descritos acima têm o traço comum de valorizar a descoberta iterativa e a colaboração em detrimento de entregas rígidas. Ao se concentrar nesses elementos, as equipes Agile podem não apenas criar produtos melhores com menos desperdício, mas também permitir espaço para descobertas, mantendo a funcionalidade releaseé flowing to o cliente final.
Desenvolvimento ágil x em cascata
Os fundadores do Agile propuseram um grande afastamento dos métodos de trabalho tradicionais da indústria de software. Na época (cerca de 2001), o software foi criado em grande parte como um esforço único baseado em projeto para produzir um produto digital com base em especificações específicas definidas com meses de antecedência. A visão do produto foi determinada por um grupo de consultores, executivos e administradores que então formariam uma lista de requisitos a serem fornecidos às equipes de gestão. As equipes de gestão delegariam então o trabalho de codificação, compilação, teste e construção do software solicitado, a ser realizado durante um período determinado e dentro de um orçamento definido.

Os desenvolvedores se referiam a esse sistema como metodologia “cascata” porque os requisitos e resultados de software eram todos ditados do topo da empresa até os principais trabalhadores de desenvolvimento.

Os colaboradores originais do Agile rejeitaram essa forma de desenvolvimento de software por vários motivos. Acima de tudo, a cascata era muito inflexível para responder às demandas dos clientes que poderiam mudar durante o desenvolvimento. Em segundo lugar, o design de produto em cascata significava que todas as inovações deveriam ser concebidas antes do início do projeto. Essa estrutura rígida deixa pouco espaço para a descoberta de novas possibilidades de recursos até que o release está terminado. Além disso, o software pode não funcionar como pretendido, portanto, descobrir esse desenvolvimento intermediário em um projeto em cascata significava atrasos dispendiosos.

Os fundadores do Agile propuseram, em vez disso, um método de criação de software aberto à descoberta, inovação e iteração. Em vez de esperar que um software completo com recursos completos seja entregue em uma determinada data, as compilações funcionais poderiam ser released de forma incremental. Isso reduz o tempo de lançamento no mercado e permite que o desenvolvimento seja orçado em fases, em vez de tudo de uma vez.

Mais importante ainda, Desenvolvimento ágil reconhece que o produto originalmente imaginado pode não ser capaz de entregar o nível de valor esperado aos clientes e à própria empresa. Trabalhar nas fases de construção permite que novas ideias sejam adicionadas ou que estratégias de produto sejam alteradas, permitindo que o desenvolvimento responda de uma forma que a cascata não consegue.

Princípios Agile

Para superar as deficiências da cascata, a filosofia Agile incentiva a obtenção de ideias de todos os lugares da empresa. Também é importante que os ciclos de desenvolvimento de produtos sejam focados em mudanças iterativas, entregues com frequência, em oposição aos principais releases que levaram meses ou anos para criar uma compilação funcional.

Em vez dos tradicionais ciclos de desenvolvimento orientados pela gestão em “cascata”, o grupo propôs os seguintes métodos de trabalho que eram radicais na altura:

  • Ao criar um novo software, comece com conceitos e ideias simples, em vez de entregas exaustivas. Desenvolva um protótipo funcional de prova de conceito que exemplifique o potencial do conceito para agregar valor aos clientes e partes interessadas internas.
  • Faça com que as pessoas de negócios e as equipes de desenvolvedores colaborem para determinar maneiras de avançar, melhorar e evoluir o protótipo funcional para versões mais robustas.
  • Reserve tempo e espaço diariamente para conversas diretas entre indivíduos e membros da equipe, para que o progresso seja acompanhado e novas oportunidades de melhoria do produto sejam descobertas. Isso pode assumir a forma de reuniões rápidas ou reuniões de scrum mais longas.
  • Entregue novas versões funcionais de software com frequência, integrando e deployas novas mudanças no ambiente de produção ao vivo. Cada versão alterada representa uma versão melhorada da anterior.
  • Reflita sobre o resultado de cada período de trabalho (um “sprint”) e use as lições aprendidas para melhorar o desenvolvimento posterior.
  • Dê voz ao cliente no processo, seja por meio de pesquisa direta ou por meio de sinais de dados indiretos, a fim de continuar melhorando o produto

Manufatura ágil e enxuta

Agile absorve muitas lições da manufatura enxuta, uma filosofia pioneira durante o crescimento da manufatura industrializada avançada na segunda metade do século XX. A manufatura enxuta elimina etapas desnecessárias na criação do produto, melhorando o ritmo da produção. Esses métodos foram notoriamente utilizados pela empresa automobilística japonesa Toyota, formando o Sistema Toyota de Produção (TPS).

As principais lições para Agile aprendidas com o lean incluem:

  • Crie o processo mais eficiente possível.
  • Elimine os desperdícios (Muda) combinando processos e removendo aqueles que não resultam em um produto melhor.
  • Meça rigorosamente os resultados para que os produtos tenham qualidade consistente e ciclos de fabricação consistentes.
  • Permita que os funcionários contribuam para melhorar os processos e conte com o pessoal-chave para impulsionar as metas de qualidade, velocidade e eficiência.
  • Identifique as etapas do processo que contribuem para atrasos ou baixa qualidade e resolva esses problemas de “fluxo” para que um processo tranquilo e eficiente crie produtos consistentes e confiáveis.

O que é Metodologia Agile?

A metodologia Agile é um conjunto de métodos de trabalho que refletem os ideais Ágeis codificados pela primeira vez em 2001. Como tal, existem, na verdade, várias metodologias que podem ser incluídas sob a égide da “Metodologia Agile”. Eles constituem os métodos Agile mais populares, cada um descrito em mais detalhes abaixo.

A metodologia ágil é definida pelas seguintes características:

  • As equipes são formadas por especialistas no assunto de diferentes áreas da organização (equipes multifuncionais).
  • Equipes multifuncionais são responsáveis ​​por construir versões de protótipos de conceitos de software/produto com base em ideias inovadoras provenientes da própria equipe, bem como feedback do cliente e equipes de estratégia de produto.
  • O produto de software é então revisado durante um breve “sprint” para adicionar mais funcionalidades, recursos, melhorias e correções.
  • As ideias para mudar e melhorar o produto são provenientes de toda a empresa. As discussões sobre esses assuntos ocorrem com frequência.
  • Equipes multifuncionais discutem o progresso do trabalho, desafios, prioridades e novas oportunidades emergentes durante curtas reuniões diárias “stand up”.
  • Depois que um sprint é concluído, as alterações criadas durante o sprint são incorporadas à versão atual do produto.
  • Os controles de qualidade são introduzidos ao longo do processo, incluindo testes regulares e a incorporação do feedback do cliente. Problemas com um determinado release são descobertos e (idealmente) tratados antes da integração e entrega do novo release.
  • Na conclusão de cada sprint, a equipe multifuncional reserva um tempo para refletir sobre os resultados e também sobre o andamento do processo. É provável que novas metas e marcos sejam definidos com base no que foi aprendido.
  • Novos sprints são organizados para equipes multifuncionais assumirem, o que adicionará novos recursos, melhorias e correções.

Quais são os tipos de Métodos Ágeis?

Existem muitas versões populares e ramificações do Agile, bem como métodos que antecederam o Manifesto Agile, mas compartilham seus valores. Eles incluem Scrum, Lean, Kanban, Extreme Programming (XP), Feature Driven Development (FDD), Método de Desenvolvimento de Sistemas Dinâmicos (DSDM) e Crystal.

Scrum

Scrum concentra-se no uso de sprints agressivos para concluir melhorias Agile iterativas. As equipes Scrum se coordenam para realizar o trabalho principal durante os sprints, e cada sprint é planejado para que um trabalho significativo possa ser realizado sem comprometer a qualidade e a integridade do release.

Scrum é notável por introduzir as funções de “Scrum Master” e “Product Owner”, ambos supervisionando para garantir que todos os pequenos processos resultem em resultados desejáveis. Também importante é o conceito de “Product Backlog”, que representa recursos, melhorias e correções oportunas para introduzir no próximo sprint.

A metodologia Scrum provou ser dimensionada para várias equipes em organizações muito grandes com mais de 800 pessoas. Veja como Digital.ai Agility, anteriormente VersionOne, suporta planejamento de sprint scrum facilitando o gerenciamento do backlog do produto.

Lean

A manufatura enxuta, descrita em parte acima, prioriza a criação de valor contínuo e consistente por meio de um “fluxo” de trabalho previsível. Enfatiza a velocidade e a eficiência do fluxo de trabalho de desenvolvimento e depende de feedback rápido e confiável entre programadores e clientes. Lean usa a ideia de que o produto de trabalho é “puxado” por solicitação do cliente. Ele concentra a autoridade e a capacidade de tomada de decisão em indivíduos e pequenas equipes, uma vez que pesquisas mostram que isso é mais rápido e eficiente do que o fluxo hierárquico de controle.

O Lean também se concentra na eficiência do uso dos recursos da equipe, tentando garantir que todos sejam produtivos o máximo de tempo possível. Ele se concentra no trabalho simultâneo e no menor número possível de dependências de fluxo de trabalho dentro da equipe. O Lean também recomenda fortemente que os testes de unidade automatizados sejam escritos ao mesmo tempo em que o código é escrito.

Kanban

Kanban é um método de gerenciamento de produção que está intimamente ligado à história do Lean. O método kanban utiliza principalmente um “quadro kanban” que rastreia o volume atual de itens de trabalho e os estágios de trabalho pelos quais eles progrediram. Um quadro kanban usa notas adesivas (ou equivalente virtual) para rastrear o número de itens de trabalho atuais em cada estágio do processo. Depois que um item de trabalho for concluído, a nota adesiva será movida para o próximo estágio do processo.

Kanban enfatiza o fluxo visualizando o volume atual de itens de trabalho e o progresso em que estão dentro do ciclo de desenvolvimento. Quando muitos itens de trabalho ficam restringidos em um único estágio, é um sinal para lidar imediatamente com a quantidade de trabalho em andamento (WIP) para que o sprint ou grupo de tarefas possa ser conduzido até a conclusão. A eliminação do WIP também pode servir como um sinal para “retirar” novos itens de trabalho do backlog, uma vez que existe agora uma nova capacidade.

Programação Extrema (XP)

Extreme Programming, ou “XP” foi criado no final dos anos 90 pelo colaborador do Agile Manifesto, Kent Beck. Assim como o Agile, promove alto envolvimento do cliente, ciclos rápidos de feedback, continuous testing, planejamento contínuo e trabalho em equipe próximo para entregar software funcional em intervalos muito frequentes, geralmente a cada 1-3 semanas.

A receita original do XP é baseada em quatro valores simples: simplicidade, comunicação, feedback e coragem. Ele também funciona por meio de doze práticas críticas de suporte:

  • jogo de planejamento
  • Pequeno releases
  • Testes de aceitação do cliente
  • Desenho simples
  • Programação em pares
  • Desenvolvimento orientado a testes
  • Refatoração
  • Integração contínua
  • Propriedade coletiva do código
  • Padrões de codificação
  • Metáfora
  • ritmo sustentável

Desenvolvimento Orientado a Recursos (FDD)

Desenvolvimento Orientado a Recursos (FDD) é uma variante da metodologia Agile que descreve fases de trabalho específicas e muito curtas, que devem ser realizadas separadamente por recurso. Estes incluem passo a passo de domínio, design, inspeção de design, código, inspeção de código e promoção para construir.

O conceito principal do FDD é que o estado futuro pretendido do produto pode ser representado por meio de modelos e que trabalhar nos recursos ajuda a construir um modelo holístico de produto representado por coisas que são “úteis aos olhos do cliente”.

O FDD recomenda práticas específicas para programadores, como “compilações regulares” e “propriedade de componentes/classes”. Os proponentes do FDD afirmam que ele é dimensionado de forma mais direta do que outras abordagens e é mais adequado para equipes maiores.

Método de Desenvolvimento de Sistemas Dinâmicos (DSDM)

DSDM é outro ancestral do Agile, descrito pela primeira vez em 1994. As sementes da criação do DSDM vieram do desenvolvimento rápido de aplicativos (RAD), que visava padronizar entrega de software estruturas. Após o advento do Agile, o DSDM evoluiu e amadureceu ainda mais para fornecer uma base abrangente para planejar, gerenciar, executar e dimensionar processos Agile e projetos de desenvolvimento de software iterativo.

O DSDM é baseado em nove princípios-chave que giram principalmente em torno das necessidades/valor do negócio, envolvimento ativo do usuário, equipes capacitadas, entrega frequente, testes integrados e colaboração das partes interessadas. O DSDM destaca especificamente a “adequação ao propósito comercial” como o principal critério para entrega e aceitação de um sistema, concentrando-se nos 80% úteis do sistema que podem ser deployed em 20% do tempo.

O DSDM prioriza certas entregas usando um modelo de caixa de tempo, e os itens com menor prioridade são pré-selecionados para serem movidos de lado a fim de cumprir os prazos de caixa de tempo.

Cristal

A metodologia Crystal é uma das abordagens mais leves e adaptáveis ​​para o desenvolvimento de software. Vários dos princípios-chave do cristal incluem trabalho em equipe, comunicação e simplicidade, bem como reflexão para ajustar e melhorar o processo com frequência. Como outras metodologias de processos Agile, o Crystal promove a entrega antecipada e frequente de software funcional, alto envolvimento do usuário, adaptabilidade e remoção de burocracia ou distrações.

O Crystal é, na verdade, composto por uma família de metodologias Agile, como Crystal Clear, Crystal Yellow, Crystal Orange e outras, cujas características únicas são impulsionadas por diversos fatores, como tamanho da equipe, criticidade do sistema e prioridades do projeto. Esta família de cristais aborda a compreensão de que cada projeto pode exigir um conjunto ligeiramente adaptado de políticas, práticas e processos para atender às características únicas do projeto.

Os Benefícios da Metodologia Agile

Todos os métodos Agile podem ter seus próprios pontos fortes e propósitos, mas os seguintes benefícios tendem a ser mútuos:

  • As versões de trabalho do software são entregues com relativa rapidez e frequência
  • A qualidade e a integridade de uma construção são compreendidas no início do processo
  • Dependências e gargalos no processo de entrega são minimizados
  • Os produtos refletem o estado atual das demandas, entendidas a partir de sinais indicados por clientes, concorrentes e pelo mercado como um todo
  • As inovações podem ser introduzidas em qualquer estágio do ciclo de vida do produto
  • A contribuição colaborativa é proveniente de todas as equipes, e não dos principais assessores/administradores/consultores que então emitem ordens para a base
  • Os riscos são reduzidos em comparação com ciclos de desenvolvimento que não enfatizam construções funcionais
  • A ênfase é colocada na satisfação do cliente e no moral da equipe; se nenhum deles estiver satisfeito, entende-se que os produtos e processos não atendem às necessidades
  • O trabalho se torna mais gerenciável e previsível ao mesmo tempo em que introduz flexibilidades que podem acomodar interrupções ou mudanças repentinas na estratégia

Principais ferramentas para usar com métodos Agile

Algumas das ferramentas mais recomendadas para métodos Agile incluem: