Metodologia Agile

"Metodologia ágil" é um termo genérico usado para se referir aos 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 um encontro de 17 desenvolvedores visionários em um retiro em Utah. A filosofia e os princípios estabelecidos durante o retiro formaram a base do Agile e das metodologias Agile subsequentes que foram desenvolvidas a partir desse trabalho inicial.

Desde a publicação do documento original, "O Manifesto para o Desenvolvimento Agile de Software", a metodologia ágil teve um profundo efeito transformador não apenas no desenvolvimento de software, mas também em organizações de praticamente todos os setores. Os valores de criação de produtos enxuta, descoberta iterativa, desenvolvimento focado em mudanças e trabalho colaborativo, realizados 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 sobre Metodologia Agile servirá como uma visão geral para apresentar os princípios fundamentais do Agile. Começaremos com uma definição de metodologia ágil, conforme proposta no Manifesto de 2001, e continuaremos descrevendo algumas das vertentes mais conhecidas que surgiram a partir do Agile. 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 entendida como um compromisso com a mudança e a melhoria contínuas.

valores Agile

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

  • 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

Ao analisar esses princípios, fica fácil perceber que o Agile se define tanto pelo que não é quanto pelo que é. Os quatro valores descritos acima têm em comum a valorização da descoberta iterativa e da colaboração em detrimento de entregas rígidas. Ao priorizar esses elementos, as equipes Agile não só conseguem criar produtos melhores com menos desperdício, como também abrem espaço para a descoberta, mantendo os lançamentos funcionais fluidos.wing to o cliente final.
Desenvolvimento ágil versus desenvolvimento em cascata
Os fundadores do Agile propuseram uma grande ruptura com os métodos de trabalho tradicionais da indústria de software. Na época (por volta de 2001), o software era criado principalmente como um projeto único, com o objetivo de produzir um produto digital baseado em especificações definidas com meses de antecedência. A visão para o produto era determinada por um grupo de consultores, executivos e administradores, que então elaboravam uma lista de requisitos a ser entregue às equipes de gestão. As equipes de gestão, por sua vez, delegavam o trabalho de codificação, compilação, teste e desenvolvimento do software solicitado, a ser realizado dentro de um período e orçamento definidos.

Os desenvolvedores se referiam a esse sistema como metodologia "em cascata", porque os requisitos e entregáveis ​​do software eram ditados desde a alta administração da empresa até os desenvolvedores principais.

Os colaboradores originais do Agile rejeitaram essa forma de desenvolvimento de software por diversos motivos. Em primeiro lugar, o modelo em cascata era muito inflexível para responder às demandas dos clientes, que podiam mudar durante o desenvolvimento. Em segundo lugar, o design de produto em cascata implicava que todas as inovações deveriam ser concebidas antes mesmo do início do projeto. Essa estrutura rígida deixava pouco espaço para a descoberta de novas possibilidades de funcionalidades até que o lançamento estivesse concluído. Além disso, o software podia não funcionar como esperado, e descobrir isso no meio do desenvolvimento 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 e com todos os recursos fosse entregue em uma determinada data, versões funcionais poderiam ser lançadas incrementalmente. 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-se que o produto, tal como originalmente concebido, pode não ser capaz de entregar o nível de valor esperado pelos clientes e pela própria empresa. Trabalhar em fases de construção permite a adição de novas ideias ou a alteração das estratégias de produto, possibilitando que o desenvolvimento responda de maneiras que o modelo em cascata não permite.

Princípios Agile

Para superar as deficiências do modelo em cascata, a filosofia ágil incentiva que as ideias sejam provenientes de todos os setores da empresa. Também é importante que os ciclos de desenvolvimento de produtos sejam focados em mudanças iterativas, entregues com frequência, em vez de grandes lançamentos de produtos que levavam meses ou anos para criar uma versão funcional.

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

  • Ao criar um novo software, comece com conceitos e ideias simples, em vez de entregáveis ​​exaustivos. Desenvolva um protótipo funcional de prova de conceito que exemplifique o potencial do conceito para agregar valor aos clientes e às partes interessadas internas.
  • Faça com que as equipes de negócios e de desenvolvimento colaborem para determinar maneiras de avançar, aprimorar e evoluir o protótipo funcional para versões mais robustas.
  • Reserve um tempo e um espaço diários 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 ser feito por meio de reuniões rápidas em pé ou reuniões scrum mais longas.
  • Entregar novas versões funcionais do software com frequência, integrando e implementando continuamente as novas alterações no ambiente de produção. Cada versão alterada representa uma versão aprimorada da anterior.
  • Reflita sobre o resultado de cada período de trabalho (um "sprint") e utilize as lições aprendidas para aprimorar o desenvolvimento posterior.
  • Dê voz ao cliente no processo, seja por meio de pesquisas diretas ou por meio de sinais de dados indiretos, para continuar aprimorando o produto.

Manufatura ágil e enxuta

A metodologia ágil absorve muitas lições da manufatura enxuta, uma filosofia pioneira durante o crescimento da manufatura industrial avançada na segunda metade do século XX. A manufatura enxuta elimina etapas desnecessárias na criação de produtos, ao mesmo tempo que melhora o ritmo de produção. Esses métodos foram notoriamente utilizados pela montadora japonesa Toyota, formando o Sistema de Produção Toyota (TPS).

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

  • Crie o processo mais eficiente possível.
  • Eliminar o desperdício (Muda) combinando processos e removendo aqueles que não resultam em um produto melhor.
  • Meça os resultados rigorosamente para que os produtos tenham qualidade consistente e ciclos de fabricação consistentes.
  • Permita que os trabalhadores contribuam para a melhoria dos processos e confie em 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 contínuo e eficiente crie produtos consistentes de forma confiável.

O que é Metodologia Agile?

A metodologia ágil é um conjunto de métodos de trabalho que refletem os ideais Agile codificados pela primeira vez em 2001. Assim, existem, na verdade, diversas metodologias que podem ser incluídas sob o guarda-chuva da "Metodologia Agile". Estas constituem os métodos Agile mais populares, cada um descrito em detalhes a seguir.

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

  • As equipes são formadas por especialistas de diferentes áreas da organização (equipes multifuncionais).
  • As equipes multifuncionais são responsáveis ​​por construir versões protótipo de conceitos de software/produto com base em ideias inovadoras provenientes da própria equipe, bem como do feedback dos clientes e das equipes de estratégia de produto.
  • O produto de software é então revisado durante um curto "sprint" para adicionar mais funcionalidades, recursos, melhorias e correções.
  • Ideias para alterar e melhorar o produto surgem de toda a empresa. Discussões sobre esses assuntos ocorrem com frequência.
  • As equipes multifuncionais discutem o progresso do trabalho, os desafios, as prioridades e as novas oportunidades que surgem durante breves reuniões diárias de alinhamento.
  • Após a conclusão de um sprint, as alterações criadas durante o sprint são incorporadas à versão atual do produto.
  • Os controles de qualidade são implementados em todo o processo, incluindo testes regulares e a incorporação do feedback do cliente. Problemas com uma versão específica são identificados e (idealmente) resolvidos antes da integração e entrega da nova versão.
  • Ao final de cada sprint, a equipe multifuncional dedica um tempo para refletir sobre os resultados e sobre o andamento do processo. Novas metas e marcos provavelmente serão definidos com base no que foi aprendido.
  • Novas sprints são organizadas para que equipes multifuncionais assumam as responsabilidades, adicionando novos recursos, melhorias e correções.

Quais são os tipos de métodos Agile?

Existem muitas versões e ramificações populares do Agile, bem como métodos que antecedem o Manifesto Agile, mas compartilham seus valores. Entre eles, podemos citar Scrum, Lean, Kanban, Extreme Programming (XP), Feature Driven Development (FDD), Dynamic Systems Development Method (DSDM) e Crystal.

Scrum

Scrum O Scrum se concentra no uso de sprints agressivos para concluir melhorias Agile iterativas. As equipes Scrum se coordenam para realizar o trabalho principal durante as sprints, e cada sprint é planejada de forma que um trabalho significativo possa ser realizado sem comprometer a qualidade e a integridade da versão final.

O Scrum se destaca por introduzir os papéis de "Scrum Master" e "Product Owner", ambos responsáveis ​​por garantir que todos os pequenos processos contribuam para os resultados desejados. Outro conceito importante é o "Product Backlog", que representa as funcionalidades, melhorias e correções a serem implementadas na próxima sprint.

A metodologia Scrum provou ser escalável para múltiplas equipes em grandes organizações com mais de 800 pessoas. Veja como. Digital.ai Agility, anteriormente VersionOne, oferece suporte planejamento de sprint scrum Facilitando o gerenciamento do backlog do seu 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. Ela enfatiza a velocidade e a eficiência do fluxo de trabalho de desenvolvimento e se baseia em feedback rápido e confiável entre programadores e clientes. A manufatura enxuta utiliza a ideia de que o produto do trabalho é "puxado" por meio de solicitações do cliente. Ela concentra a autoridade e a capacidade de tomada de decisão em indivíduos e pequenas equipes, visto que pesquisas mostram que isso é mais rápido e eficiente do que o fluxo de controle hierárquico.

O Lean também se concentra na eficiência do uso dos recursos da equipe, buscando garantir que todos sejam produtivos o máximo de tempo possível. Ele prioriza o trabalho simultâneo e minimiza as dependências entre os fluxos de trabalho da equipe. O Lean também recomenda fortemente que os testes unitários automatizados sejam escritos ao mesmo tempo em que o código é escrito.

Kanban

O Kanban é um método de gestão da produção intimamente ligado à história do Lean. O método Kanban utiliza principalmente um "quadro Kanban" que monitora o volume atual de itens de trabalho e os estágios pelos quais eles passaram. Um quadro Kanban usa notas adesivas (ou um equivalente virtual) para registrar a quantidade de itens de trabalho em cada estágio do processo. Assim que um item de trabalho é concluído, a nota adesiva é movida para o próximo estágio do processo.

O Kanban enfatiza o fluxo ao visualizar o volume atual de itens de trabalho e o progresso em que se encontram dentro do ciclo de desenvolvimento. Quando muitos itens de trabalho ficam paralisados ​​em um único estágio, é um sinal para lidar imediatamente com a quantidade de trabalho em andamento (WIP, na sigla em inglês), para que o sprint ou grupo de tarefas possa ser conduzido à conclusão. A eliminação do WIP também pode servir como um sinal para "puxar" novos itens de trabalho do backlog, já que agora há uma nova capacidade disponível.

Programação Extrema (XP)

A Programação Extrema, ou "XP", foi criada no final da década de 90 por Kent Beck, colaborador do Manifesto Agile. Assim como o Agile, ela promove alto envolvimento do cliente, ciclos de feedback rápidos, teste contínuoPlanejamento contínuo e trabalho em equipe próximo para entregar software funcional em intervalos muito frequentes, normalmente a cada 1 a 3 semanas.

A receita original do XP baseia-se em quatro valores simples: simplicidade, comunicação, feedback e coragem. Ela também funciona por meio de doze práticas de apoio essenciais:

  • Jogo de planejamento
  • Lançamentos pequenos
  • 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 ágil que descreve fases de trabalho específicas e muito curtas, que devem ser realizadas separadamente para cada funcionalidade. Essas fases incluem análise do domínio, design, inspeção do design, codificação, inspeção do código e promoção para produção.

O conceito principal do FDD é que o estado futuro pretendido do produto pode ser representado usando modelos e que o trabalho em funcionalidades ajuda a construir um modelo holístico do produto, representado por elementos que são "úteis aos olhos do cliente".

O FDD recomenda práticas específicas de programação, como "builds regulares" e "propriedade de componentes/classes". Os defensores do FDD afirmam que ele escala de forma mais direta do que outras abordagens e é mais adequado para equipes maiores.

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

O DSDM é outro ancestral antigo do Agile, descrito pela primeira vez em 1994. As sementes da criação do DSDM vieram do desenvolvimento rápido de aplicações (RAD), que visava padronizar entrega de software frameworks. Após o advento do Agile, o DSDM evoluiu e amadureceu ainda mais, fornecendo uma base abrangente para o planejamento, gerenciamento, execução e escalonamento de processos Agile e projetos de desenvolvimento de software iterativos.

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

O DSDM prioriza determinadas entregas usando um modelo de prazos definidos, e os itens que têm menor prioridade são pré-selecionados para serem deixados de lado a fim de cumprir os prazos estabelecidos.

Cristal

A metodologia Crystal é uma das abordagens mais leves e adaptáveis ​​para o desenvolvimento de software. Alguns dos princípios fundamentais do Crystal incluem trabalho em equipe, comunicação e simplicidade, bem como reflexão para ajustar e aprimorar o processo frequentemente. Assim como outras metodologias Agile, o Crystal promove a entrega antecipada e frequente de software funcional, alto envolvimento do usuário, adaptabilidade e a eliminação de burocracia e distrações.

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 determinadas por diversos fatores, como tamanho da equipe, criticidade do sistema e prioridades do projeto. Essa família Crystal parte do princípio de que cada projeto pode exigir um conjunto ligeiramente personalizado de políticas, práticas e processos para atender às suas características específicas.

Os benefícios da metodologia ágil

Cada método ágil pode ter seus próprios pontos fortes e objetivos específicos, mas os seguintes benefícios tendem a ser comuns a todos eles:

  • As versões funcionais do software são entregues com relativa rapidez e frequência.
  • A qualidade e a integridade de uma construção são compreendidas logo no início do processo.
  • As dependências e os gargalos no processo de entrega são minimizados.
  • Os produtos refletem o estado atual da demanda, conforme compreendido a partir dos sinais indicados por clientes, concorrentes e pelo mercado como um todo.
  • As inovações podem ser introduzidas em qualquer etapa do ciclo de vida do produto.
  • A contribuição colaborativa provém de todas as equipes, em vez de se concentrar apenas em consultores/administradores/assessores de alto escalão que, por sua vez, emitem ordens para os demais níveis hierárquicos.
  • Os riscos são reduzidos em comparação com ciclos de desenvolvimento que não priorizam builds funcionais.
  • A ênfase é colocada na satisfação do cliente e no moral da equipe; se nenhum dos dois estiver satisfeito, entende-se que os produtos e processos não estão atendendo às necessidades.
  • O trabalho torna-se mais gerenciável e previsível, ao mesmo tempo 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: