Módulo 04 — Prototipação e Metodologias Ágeis (Scrum, XP, Kanban)

Onde estamos. No módulo anterior percorremos os modelos de ciclo de vida e vimos como as abordagens dirigidas a plano organizam o trabalho de ponta a ponta antes de começar. Agora vamos ao outro lado da conversa. Quero que você chegue à aula entendendo dois recursos que mudaram a forma de construir software: a prototipação, que nos ajuda a enxergar antes de comprometer, e o movimento ágil, que reorganizou prioridades quando o mundo passou a mudar mais rápido do que os planos conseguiam acompanhar.

Deixe-me começar com uma pergunta que parece ingênua, mas não é. Se você não sabe direito o que precisa construir, faz sentido escrever um plano detalhado de tudo antes de começar? A resposta honesta é: quase nunca. Boa parte dos fracassos nasce de uma ilusão confortável, a de que conseguimos descrever com precisão, no papel e antecipadamente, um sistema que ninguém ainda viu funcionar. A prototipação e o pensamento ágil são respostas maduras a essa ilusão. Um propõe experimentar cedo; o outro, entregar em pequenos ciclos e ajustar o rumo com frequência. Vamos aos dois.

A prototipação como recurso

Um protótipo é uma versão inicial e deliberadamente incompleta do sistema, construída para responder perguntas que só ficam claras quando temos algo concreto diante dos olhos. A ideia central é simples e poderosa: em vez de discutir requisitos de forma abstrata, colocamos algo funcionando, mesmo que tosco, e deixamos que o usuário reaja. A reação de uma pessoa diante de uma tela real vale mais do que dez reuniões sobre uma tela imaginária. Sommerville trata a prototipação como uma técnica para reduzir risco e esclarecer requisitos, e é exatamente esse o seu papel: transformar incerteza em conhecimento antes que a incerteza vire retrabalho caro.

Há duas formas de usar um protótipo, e confundi-las é fonte comum de problemas. O protótipo descartável existe para aprender e depois ser jogado fora. Você o constrói rápido, sem se preocupar com qualidade interna, estrutura ou desempenho, porque seu único propósito é responder a uma dúvida — como o usuário reage a este fluxo, esta funcionalidade é viável, este requisito faz sentido. Respondida a pergunta, o código é abandonado, e a versão de produção é construída com o cuidado devido. Já o protótipo evolutivo nasce como um esboço, mas é refinado incrementalmente até se tornar o próprio sistema final. Aqui não há descarte; há amadurecimento sucessivo.

ImportanteO erro clássico da prototipação

O perigo mais comum é construir um protótipo descartável com a pressa e a informalidade que ele permite e, diante do prazo, decidir promovê-lo a sistema de produção. Você herda toda a dívida técnica de um código que nunca foi pensado para durar. Se a intenção é descartar, descarte de fato; se a intenção é evoluir, construa desde o início com um mínimo de disciplina estrutural. A escolha entre as duas modalidades precisa ser consciente, não um acidente causado pela pressão do calendário.

A tabela a seguir contrasta as duas modalidades para que você fixe a distinção.

Aspecto Protótipo descartável Protótipo evolutivo
Propósito Aprender, esclarecer requisitos, reduzir risco Entregar valor incremental até o produto final
Qualidade interna Baixa e proposital; será jogado fora Precisa ser sustentável desde cedo
Destino Descartado após responder a dúvida Refinado até virar o sistema em produção
Risco principal Ser promovido a produção sem revisão Acumular decisões precipitadas mal revisadas

Repare que, em ambos os casos, o protótipo é um instrumento de comunicação. Ele fecha a distância entre o que o cliente pensa que quer e o que de fato precisa — uma das maiores fontes de defeitos. Prototipar é, no fundo, conversar usando artefatos em vez de palavras.

O Manifesto Ágil

No início dos anos 2000, um grupo de profissionais experientes, cansados de processos pesados que pareciam servir mais à burocracia do que ao software, reuniu-se e formulou o que ficou conhecido como o Manifesto Ágil. Não foi a invenção de uma técnica, e sim a declaração de um sistema de valores. Freeman, no seu texto sobre desenvolvimento ágil, insiste que o essencial do ágil não é um conjunto de rituais, mas uma mentalidade — e é dessa mentalidade que o manifesto trata.

O manifesto declara quatro valores, cada um na forma de uma preferência entre dois polos. Ele valoriza indivíduos e interações acima de processos e ferramentas; software em funcionamento acima de documentação abrangente; colaboração com o cliente acima de negociação de contratos; e resposta a mudanças acima de seguir um plano. Um detalhe que muita gente esquece, e que quero que você guarde: o manifesto não descarta os itens da direita. Ele reconhece que processos, documentação, contratos e planos têm valor. Apenas afirma que, quando é preciso escolher, os itens da esquerda importam mais. Ágil não é ausência de disciplina; é uma disciplina com prioridades diferentes.

NotaOs quatro valores em uma frase

Pessoas conversando resolvem mais do que ferramentas sofisticadas; software rodando prova mais do que documentos; parceria com o cliente rende mais do que blindagem contratual; e adaptar-se à mudança serve melhor ao resultado do que obedecer cegamente a um plano feito quando se sabia menos.

Além dos valores, o manifesto se desdobra em um conjunto de doze princípios que os detalham na prática. Não vou cravar a redação exata de cada um, mas quero que você absorva sua essência qualitativa. Eles giram em torno de ideias recorrentes: satisfazer o cliente pela entrega frequente e contínua de software que funciona; acolher mudanças de requisito mesmo quando chegam tarde, tratando-as como vantagem e não como incômodo; entregar em ciclos curtos e cadenciados; manter desenvolvedores e pessoas de negócio trabalhando juntos; construir projetos em torno de pessoas motivadas e confiar nelas; privilegiar a conversa direta como a comunicação mais eficiente; usar software em funcionamento como a principal medida de progresso; sustentar um ritmo de trabalho indefinidamente sustentável; cuidar continuamente da excelência técnica e do bom projeto; buscar a simplicidade como a arte de maximizar o trabalho não feito; confiar que as melhores arquiteturas emergem de equipes auto-organizadas; e refletir com regularidade sobre como melhorar, ajustando o comportamento em função dessa reflexão.

Note como esses princípios formam um todo coerente. Entrega frequente, ciclos curtos, acolhimento à mudança e reflexão periódica desenham um jeito de trabalhar que aprende com a própria prática. É esse aprendizado embutido no processo que torna o ágil poderoso sob alta incerteza.

Scrum em detalhe

O Scrum é, provavelmente, o arcabouço ágil mais adotado, e vale a pena conhecê-lo com precisão, porque muita gente o pratica de forma distorcida. Ele organiza o trabalho em ciclos de duração fixa chamados sprints, ao final dos quais deve existir um incremento de software potencialmente utilizável. Toda a mecânica do Scrum se apoia em três pilares que se sustentam mutuamente: papéis bem definidos, eventos com propósito claro e artefatos que dão visibilidade ao trabalho.

Comecemos pelos papéis. O Product Owner é a voz do valor: responde por decidir o que será construído e em que ordem, priorizando o trabalho para que a equipe ataque sempre o que mais importa para o negócio. Não é quem manda na equipe, e sim quem responde pela direção do produto. O Scrum Master é o guardião do processo e removedor de obstáculos: não comanda, serve, garantindo que o time trabalhe sem impedimentos e que os princípios do Scrum sejam respeitados, inclusive pela organização ao redor. E o time de desenvolvimento é o grupo auto-organizado que constrói o incremento; é multidisciplinar, tem autonomia sobre como fazer o trabalho e é coletivamente responsável pela entrega.

Passemos aos eventos. A sprint é o contêiner de tudo, um ciclo de duração fixa dentro do qual os demais eventos acontecem. O planejamento da sprint abre o ciclo: a equipe, com o Product Owner, decide o que será entregue e monta o plano para consegui-lo. A reunião diária é um encontro curto e regular em que o time se sincroniza, alinhando o que foi feito, o que será feito e quais obstáculos surgiram — é coordenação, não prestação de contas a um chefe. A revisão da sprint acontece ao final, quando o incremento é inspecionado junto aos interessados e o feedback realimenta o planejamento seguinte. E a retrospectiva fecha o ciclo olhando para dentro: o time examina o próprio processo e decide o que melhorar — a materialização direta do princípio ágil da reflexão regular.

Por fim, os artefatos. O backlog do produto é a lista ordenada e viva de tudo que o produto pode vir a precisar, mantida e priorizada pelo Product Owner. O backlog da sprint é o subconjunto de itens que a equipe se comprometeu a entregar no ciclo atual, com o plano para realizá-los. E o incremento é o resultado tangível: a soma do que foi concluído, em estado potencialmente utilizável. O diagrama abaixo mostra como esses elementos se articulam no fluxo do Scrum.

flowchart LR
    PB[Backlog do Produto] --> PL[Planejamento da Sprint]
    PL --> SB[Backlog da Sprint]
    SB --> SP[Sprint]
    SP --> DA[Reunião Diária]
    DA --> SP
    SP --> INC[Incremento]
    INC --> RV[Revisão da Sprint]
    RV --> RT[Retrospectiva]
    RT -. ajustes de processo .-> PL
    RV -. feedback .-> PB
    style PB fill:#cfe2ff,stroke:#084298
    style SB fill:#d1e7dd,stroke:#0f5132
    style SP fill:#fff3cd,stroke:#664d03
    style INC fill:#e2d9f3,stroke:#59359a
    style RT fill:#f8d7da,stroke:#842029

Observe que o Scrum é um circuito de aprendizado fechado: cada sprint produz não só software, mas informação sobre o produto (na revisão) e sobre o processo (na retrospectiva). É essa dupla realimentação que faz a equipe melhorar com o tempo, e não apenas produzir.

Extreme Programming

Se o Scrum organiza o como coordenar o trabalho, a Extreme Programming, ou XP, foca no como construir com excelência técnica. Ela leva ao extremo um conjunto de boas práticas de engenharia que, isoladamente, já eram conhecidas, e as combina de modo que se reforcem. Quero destacar as práticas que você mais encontrará.

A programação em par coloca dois desenvolvedores no mesmo código ao mesmo tempo, um digitando e outro revisando e pensando adiante, alternando os papéis. Parece caro, mas a revisão contínua reduz defeitos e espalha conhecimento pela equipe. A integração contínua pede que o código seja integrado ao repositório comum com grande frequência, cada integração validada automaticamente, impedindo que divergências se acumulem até virar um pesadelo de mesclagem. A refatoração é a melhoria constante da estrutura interna do código sem alterar seu comportamento externo, mantendo o sistema saudável à medida que cresce. A propriedade coletiva do código estabelece que qualquer pessoa pode melhorar qualquer parte do sistema, eliminando gargalos e reduzindo a dependência de heróis individuais. E os testes constantes, automatizados e escritos de perto com o código, dão a rede de segurança que torna todas as outras práticas possíveis — sem testes, ninguém refatora com coragem nem integra com frequência.

DicaPor que as práticas de XP andam juntas

Nenhuma dessas práticas brilha sozinha. Você só refatora sem medo porque tem testes; só integra com frequência porque tem integração automatizada validando cada mudança; só sustenta propriedade coletiva porque a programação em par difundiu o conhecimento. XP é um sistema em que as peças se protegem umas às outras. Adotar metade delas costuma render menos da metade do benefício.

Um exemplo de refatoração incremental

A refatoração é uma prática que se aprende fazendo, então deixe-me mostrar o espírito dela com um pequeno exemplo em Dart. Imagine uma função que classifica o risco de um pedido com base em seu valor. A primeira versão funciona, mas comunica mal e mistura responsabilidades.

// Antes: lógica aninhada e difícil de ler
String risco(double v) {
  if (v > 10000) {
    return 'alto';
  } else {
    if (v > 1000) {
      return 'medio';
    } else {
      return 'baixo';
    }
  }
}

Com a rede de segurança dos testes garantindo que o comportamento não mude, damos um primeiro passo pequeno, aplainando a estrutura condicional com retornos antecipados.

// Passo 1: retornos antecipados eliminam o aninhamento
String risco(double valor) {
  if (valor > 10000) return 'alto';
  if (valor > 1000) return 'medio';
  return 'baixo';
}

Em seguida, damos outro passo pequeno, tornando os limites e as categorias explícitos, para que a regra de negócio deixe de estar escondida em números soltos no meio do código.

enum Risco { baixo, medio, alto }

const _limiteMedio = 1000.0;
const _limiteAlto = 10000.0;

Risco classificarRisco(double valor) {
  if (valor > _limiteAlto) return Risco.alto;
  if (valor > _limiteMedio) return Risco.medio;
  return Risco.baixo;
}

Repare no método: nenhum passo mudou o comportamento observável, cada um foi verificável isoladamente e o resultado é mais legível e mais fácil de estender. É assim que a refatoração acontece — não em um salto arriscado, mas numa sequência de melhorias pequenas e seguras, apoiadas em testes.

Kanban

O Kanban parte de uma filosofia diferente da do Scrum. Em vez de ciclos de duração fixa, ele propõe um fluxo contínuo: o trabalho entra, atravessa etapas e sai, sem a cadência rígida das sprints. Seu instrumento central é o quadro visual, no qual cada coluna representa um estágio e cada cartão, um item de trabalho. Ao olhar o quadro, qualquer pessoa vê onde cada tarefa está e onde o trabalho está travando.

A ideia mais característica do Kanban é o limite de trabalho em progresso, o limite de WIP. Cada coluna recebe um teto de quantos itens pode conter ao mesmo tempo. Parece restrição arbitrária, mas é o coração do método: ao impedir que a equipe comece coisas demais, o limite força a terminar o que já foi iniciado antes de puxar trabalho novo e expõe os gargalos onde os cartões se acumulam. Menos tarefas simultâneas significam menos troca de contexto, menos trabalho pela metade e um fluxo mais rápido e previsível. O diagrama a seguir ilustra um quadro simples.

flowchart LR
    A["A Fazer"] --> B["Em Progresso (limite: 3)"]
    B --> C["Em Revisão (limite: 2)"]
    C --> D["Concluído"]
    style A fill:#cfe2ff,stroke:#084298
    style B fill:#fff3cd,stroke:#664d03
    style C fill:#e2d9f3,stroke:#59359a
    style D fill:#d1e7dd,stroke:#0f5132

Note que o Kanban impõe menos estrutura do que o Scrum: não prescreve papéis, nem eventos, nem ciclos. Por isso costuma ser mais fácil de adotar sobre um processo já existente, evoluindo-o aos poucos, em vez de substituí-lo de uma vez.

Ágil contra abordagens dirigidas a plano

Vale contrastar explicitamente as duas grandes famílias, porque a escolha entre elas não é questão de moda, e sim de contexto. As abordagens dirigidas a plano investem pesado em especificação e projeto antecipados e progridem por fases bem definidas. As abordagens ágeis intercalam especificação, projeto e implementação em ciclos curtos, produzindo software cedo e ajustando o rumo com frequência. Sommerville é cuidadoso ao tratar disso, e quero que você seja também: não existe superioridade absoluta de uma sobre a outra.

Dimensão Dirigida a plano Ágil
Requisitos Definidos amplamente no início Emergem e mudam ao longo do trabalho
Entrega Tende a concentrar-se ao final Frequente, em incrementos utilizáveis
Documentação Extensa e formal Enxuta, o suficiente para o trabalho
Reação à mudança Custosa, tratada como exceção Esperada e acolhida
Contexto favorável Requisitos estáveis, sistemas críticos, times grandes Requisitos incertos, escopo evolutivo, times próximos

A leitura madura dessa tabela é que o método deve servir ao problema. Sistemas com requisitos regulatórios rígidos podem se beneficiar de mais planejamento antecipado; produtos que exploram um mercado incerto florescem sob o ágil. Na prática, muitas equipes combinam elementos dos dois mundos. O erro é tratar a escolha como bandeira ideológica em vez de decisão de engenharia.

Um alerta contra o “ágil de fachada”: adotar os rituais do Scrum ou o quadro do Kanban sem abraçar os valores por trás deles produz um teatro caro. Reuniões diárias que viram prestação de contas a um chefe, backlogs que ninguém prioriza de verdade, quadros sem limite de WIP — tudo isso são cerimônias vazias. Freeman é enfático: o ágil vive nos valores, não nos artefatos. Sem a mentalidade, as práticas apenas encenam agilidade.

Como este módulo se conecta ao restante do curso

Neste módulo você conheceu a prototipação como forma de esclarecer requisitos e reduzir risco, e o universo ágil com seus valores, seu arcabouço mais popular, suas práticas técnicas de engenharia e sua alternativa de fluxo contínuo. Adiante, quando estudarmos testes e integração contínua com mais profundidade, você reencontrará muitas dessas práticas em seus detalhes técnicos, e quando falarmos de qualidade e manutenção, verá por que a excelência técnica que a XP defende é o que sustenta a agilidade no tempo.

Síntese

Quero que você retenha três ideias desta conversa. A primeira é que a prototipação é uma ferramenta de comunicação e de redução de risco, e que escolher entre descartar ou evoluir um protótipo precisa ser uma decisão consciente, nunca um acidente da pressa. A segunda é que o ágil é, antes de tudo, um sistema de valores que prioriza pessoas, software em funcionamento, colaboração e adaptação à mudança, e que Scrum, XP e Kanban são maneiras distintas de dar corpo a esses valores — o Scrum coordenando o trabalho em ciclos, a XP cuidando da excelência técnica, o Kanban gerindo o fluxo. A terceira é que a escolha entre ágil e abordagens dirigidas a plano é uma decisão de contexto, não de fé: cada família serve melhor a certos tipos de problema, e a boa engenharia sabe reconhecer qual é qual.

Para consolidar antes da aula: escolha um dos quatro valores do Manifesto Ágil e tente explicar, com um exemplo próprio, uma situação em que segui-lo cegamente daria errado. Se você conseguir defender tanto o valor quanto seu limite, terá entendido que ágil é julgamento, e não receita.