Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução
A manufatura Lean (ou simplesmente “Lean”) refere-se à
filosofia de manufatura estabelecida no Sistema Toyota de
Produção. Ao aplicar essa filosofia sistematicamente à
manufatura de carros, a Toyota tornou-se a líder global com
uma marca que é praticamente um sinônimo de qualidade.
O Lean integra cada passo da cadeia de fornecimento em
um fluxo de valor holístico. A redução de desperdício, um
princípio central da filosofia Lean, é o ato de eliminar o
desperdício de produção que ocorre no fluxo de valor,
preservando ou aumentando o valor do produto final para o
cliente.
Taiichi Ohno descreveu inicialmente os sete desperdícios
sob a ótica Lean em seu livro Toyota Production System:
Beyond Large-Scale Production (Sistema Toyota de
Produção: Além da Produção em Larga Escala).1 Embora
seja diferente da manufatura em importantes aspectos, o
desenvolvimento de software possui desperdícios análogos.
Uma vez que você começa a procurá-los, são
surpreendentemente fáceis de encontrar.
Nesse white paper vamos explorar como o conceito de
redução de desperdício Lean migrou da sua origem, na
manufatura, para a indústria de desenvolvimento de
software através do uso do Ágil. Primeiramente vamos
descrever, de forma breve, os sete diferentes tipos de
desperdício na manufatura e discutir suas analogias no
desenvolvimento de software. Em seguida iremos introduzir
princípios que as filosofias Lean e Ágil compartilham e
discutir algumas das suas implicações. Por fim, vamos
discutir as práticas Ágeis que incorporam esses princípios e
demonstrar como eles reduzem o desperdício no
desenvolvimento de software.
LEIA AGORA
____________________________
Times Pequenos
A diretriz geral para o tamanho de um time Ágil é sete, mais
ou menos dois, ou aproximadamante o tamanho de uma
família grande. O time deve ser pequeno o suficiente para
facilitar o desenvolvimento de relações interpessoais
sólidas. Times pequenos reduzem tempo de espera e
desperdício no processo, visto que profissionais que se
conhecem bem comunicam-se eficientemente, gerando
menor ruído na comunicação. Relacionamentos sólidos
significa que é mais provável que as pessoas se ajudem
para remover obstáculos, reduzindo, portanto, o tempo de
espera e o desperdício de processamento. Uma boa
comunicação conduz a uma finalização de tarefas mais
rápida, o que reduz o WIP. Reduzir mal entendidos também
reduz a causa de alguns defeitos. O desperdício de
transporte de repasses incompletos e erros de interpretação
é reduzido diretamente através de relações de equipe
coesas.
Times Perenes
Times precisam de tempo para se formar. Com o tempo,
sua produtividade e eficiência se tornam cada vez
melhores. Todas as vantagens de redução de desperdício
em times pequenos se fortalecem à medida que o time
amadurece. O investimento no desenvolvimento do time é
perdido se o time não persiste. Esse é frequentemente o
caso quando o negócio decide separar os membros do time
e redistribuí-los em outros times, e nos casos piores, em
times não Ágeis.
Retrospectivas
A retrospectiva é uma das cerimônias do Scrum. O time
investe tempo após cada iteração refletindo no que está
funcionando e no que não está funcionando e então faz um
compromisso de ajustar o seu comportamento de uma
maneira tangível. É um processo leve e auto-dirigido que o
time usa para melhorar incrementalmente.
O foco da retrospectiva é tipicamente na melhoria do bem
estar do time, tornando-o mais efetivo e aumentando a
qualidade de seus resultados. Como as restrospectivas
podem melhorar todos os aspectos da performance do time,
todas as vantagens na redução de desperdício em equipes
pequenas são fortalecidas através do seu uso.
Times Cross-Funcionais
Times cross-funcionais possuem todas as capacidades
funcionais necessárias para completar o trabalho de acordo
com a Definição de Pronto (veja acima). Isso no mínimo
inclui todas as habilidades de desenvolvimento necessárias
para construir e testar as tecnologias que são integradas
para formar o produto ou sistema para a entrega. Funções
adicionais que podem ser necessárias em alguns times são
arquitetura, análise de negócio, usabilidade, design de
interface de usuário, escrita técnica, produção de conteúdo
e operação de produção.
Times cross-funcionais reduzem WIP, espera,
superprocessamento, desperdício de interpretação e de
repasse de atividades, mantendo mínimas as dependências
de funções fora do time e ampliando o impacto positivo da
colaboração do time. O desperdício de defeito também é
reduzido através de uma melhor coordenação da integração
de tecnologias e através de ciclos de desenvolvimento e
teste fortemente acoplados.
Times Auto-Organizáveis
Auto-organização é o processo orgânico no qual indivíduos
interagem e formam um time. Organizações podem dar
suporte a esse processo não interferindo nele
desnecessariamente (i.e evitando micro-gerenciamento em
planejamento e atribuição de tarefas) e disponibililzando um
ambiente que facilite o desenvolvimento e sustentabilidade
do time. Times auto-organizáveis são encorajados a serem
o mais auto-dirigidos possível, especialmente no que diz
respeito a como o trabalho é definido, organizado e
implementado.
Times auto-organizáveis reduzem a necessidade de
supervisão e gerenciamento de tarefas do gerente de
projeto, o que reduz o desperdício de processamento
adicional, espera, interpretação e WIP. Adicionalmente,
times auto-organizáveis têm mais controle em relação a
como eles fazem as coisas, e são capazes de assumir
compromissos mais profundos e significativos sobre o que
podem completar e como melhorar ao longo do tempo.
Propriedade Coletiva de Código
Propriedade coletiva de código é o princípio no qual o time,
não um indivíduo, é responsável por todos os produtos de
trabalho que são produzidos. Isso tem um grande impacto
na redução do desperdício de espera porque ele evita
gargalos em uma única pessoa. Isso também tem um
grande impacto na redução de defeitos. Além disso, o time
gasta menos tempo decidindo quem deve ser o responsável
por corrigir os defeitos (reduzindo também movimento e
superprocessamento), e mais tempo coletivo com um
objetivo compartilhado de eliminar defeitos. Um
compromisso com código de propriedade coletiva é o que
torna possível para o time se comprometer com altos
padrões de Definição de Pronto e se comprometer a não
“quebrar o build”.
Atribuição a Um Único Projeto
Atribuição a um único projeto (também conhecido como
“times dedicados”) significa simplesmente que a maioia dos
membros do time, se não todos, estão em apenas um
projeto por vez. Comprometimentos significativos dos times
– e, portanto, muitos dos benefícios da adoção Ágil – são
impossíveis sem um comprometimento de tempo integral
dos membros do time, visto que se faz necessário um foco
único para atender os compromissos de curto prazo do
desenvolvimento iterativo, semana a semana. No entanto,
pode fazer sentido que alguns membros do time se
envolvam em meio período se as suas contribuições são
necessárias apenas ocasionalmente (ex: administração de
banco de dados).
Atribuição a um único projeto por definição reduz o
desperdício de troca de tarefas (transporte). Também não
há necessidade de esperar que membros do time voltem ao
trabalho. O WIP é reduzido, visto que o rendimento de um
projeto aumenta se ele obtém a capacidade total dos
membros do time.
Co-Localização e Facilitação da Comunicação do Time
Co-localização face a face é o ideal para a comunicação de
times pequenos, visto que é de longe a melhor maneira de
facilitar uma colaboração efetiva. Mesmo assim, times
distribuídos são uma realidade no ambiente de negócios
atual, o que impossibilita o requisito de que os times sejam
co-localizados. Essa barreira para colaboração pode ser
suavizada através do uso de diferentes canais que ajudam
a aumentar a banda de comunicação entre os times,
incluindo: viagens, vídeo conferência, mídia social,
ferramentas de colaboração, co-alocando quando possível,
como também através de todos os outros esforços
necessários para assegurar que os membros do time
distribuído são capazes de se comunicar e colaborar
efetivamente.
Sem um investimento sólido e um comprometimento
continuado de facilitar a comunicação, você não será capaz
de desenvolver ou sustentar um time Ágil efetivo. À medida
que a comunicação do time melhora e cresce
continuamente, os tempos de espera são reduzidos e o
entendimento geral melhora entre os membros do time. Isso
reduz a incidência de mal entendidos, o que significa menos
defeitos. Adicionalmente, a necessidade de interpretar
(transporte) é reduzida, como também o movimento
necessário para se trabalhar conjuntamente.
Programação em Par
Programação em par é quando dois programadores
trabalham juntos numa estação de trabalho para produzir
testes unitários e código fonte. Por mais contra-intuitivo que
possa parecer, programação em par é geralmente mais
eficiente e apresenta resultados de maior qualidade do que
a alternativa comum. Uma maneira que a programação em
par reduz o tempo de espera é através da prática contínua
de revisão de código, onde uma pessoa revisa o código
enquanto outra pessoa o está escrevendo. Como pode ser
visto no diagrama abaixo, revisões de código contínuas
reduzem estados de espera e repasse de atividades,
tornando um processo de dois passos em um único passo e
reduzindo processamento extra através da redução de
retrabalho.
Quando todos os membros do time pareiam uns com os
outros no decorrer do tempo, as relações são fortalecidas,
resultando em uma polinização cruzada de habilidades e
conhecimento, diminuindo ainda mais o tempo de espera
através da eliminação de dependências em uma única
pessoa e do aumento da habilidade coletiva do time em
produzir resultados de alta qualidade.
Conclusão
A tabela abaixo resume nossa discussão em como as
práticas Ágeis implementam os conceitos Lean de redução
de desperdício.
Todas as oportunidades de redução de desperdício
discutidas nesse paper e outras mais estão disponíveis
para qualquer organização que implementa Scrum e
eXtreme Programming. Algumas das práticas, como
entrega antecipada e contínua e desenvolvimento iterativo,
podem ter um impacto imediato e dramático que pode ser
facilmente medido em termos financeiros como o aumento
no retorno do investimento, custos de desenvolvimento
menores e risco de depreciação reduzido.9 Outras (práticas)
têm um efeito incremental que continua a gerar valor ano
após ano.
O mindset e filosofia de redução de desperdício Lean
transformou a manufatura. Hoje, o movimento Ágil,
inspirado no Lean, está transformando o mundo do
desenvolvimento de software. O Lean iniciou como uma
vantagem competitiva que impulsionou a Toyota para uma
liderança global. Na manufatura de hoje, não importa onde
você esteja no mundo, se você não é Lean voce não
consegue competir. Temos todas as razões para acreditar
que este também é o caso da indústria de software onde,
se você não é Ágil, você não será capaz de competir.
Referências
1 Toyota Production System: Beyond Large-Scale
Production. Ohno, Taiichi. 1988
2 A Study of the Toyota Production System. Shingo, Shigeo.
1989
3 http://www.martinfowler.com/articles/xp2002.html. Fowler,
Martin. 2002
4 Manifesto for Agile Software Development. 2001
5 Software Engineering Economics. Boehm, Barry. 1981
6 Continuous Integration. Fowler, Martin. 2006
7 Lean Software Development: An Agile Toolkit.
Poppendieck, Mary and Tom. 2003
8 Where Good Ideas Come From. Johnson, Steven. 2011
9 The Business Value of Agile Transformation. Rudd, John.
2015