Páginas

Mostrando postagens com marcador Mary Poppendieck. Mostrar todas as postagens
Mostrando postagens com marcador Mary Poppendieck. Mostrar todas as postagens

07 abril 2008

Lean: Elimine o Desperdício



O que é Desperdício?


Desperdício(Waste) é tudo aquilo que não adiciona valor a um produto, valor este que deve ser percebido pelo usuário.

Se um componente de software não utilizado usuário é mantido no sistema, isto é disperdício. Se um ciclo de desenvolvimento de software se esforça para levantar um livro de requisitos que não é lido, isto é desperdício. Se os desenvolvedores produzem mais funcionalidades que o imediatamente necessário, isto é disperdício. Em desenvolvimento de software, transpor o trabalho entre equipes é disperdício.
Para o modelo Lean, o ideal é encontrar o que o cliente deseja, e então criar ou entregar exatamente o que ele necessita, virtualmente no exato momento da solicitação.
Qualquer coisa que entre no caminho de rapidamente satisfazer uma necessidade do cliente é considerado desperdício!

Encontrando desperdício


Por Mary Poppendieck: Eliminate Waste

Os sete desperdícios do Desenvolvimento de Software



Trabalho Particialmente Finalizado
Você deve possuir uma vaga idéia de como o sistema funcionará. Pode até ter uma noção de requisitos de negócio e condições de sucesso para uma funcionalidade. Quem sabe até mesmo algum código produzido.
Entretando, equanto este código não estiver integrado a sua base de código, tiver sido validado e aceito por seu usuário, não há como prever o seu comportamento. Funcionalidades pela metade apenas atravancam o caminho para trabalhos que poderiam ser feitos. Tornando-se facilmente obsoleto, trabalho parcionalmente concluído é pior do que trabalho nenhum... Funcionalidades e códigos parcialmente finalizados ampliam a complexidade de seu sistema, e amplificam os custos de manutenção de sua aplicação.

Processos Extras
Você já se perguntou se todo o papel utilizado é realmente necessário? Algum procedimentos para desenvolvimento de software requerem papeis para serem assinados por usuários, fornecendo rastreamento e permitindo a aprovação para uma mudança. Já verificou se o cliente realmente acha estes procedimentos valiosos? O fato de um documento ser um artefato de software não o torna valioso. Se você tem que esperar que um documento seja produzido para que você inicie o seu trabalho, reavalie a real necessidade de tal documento, e porque não, proponha mudanças. Lembre-se: procedimentos podem e devem ser questionados!

Funcionalidades a mais
Pode parecer ótimo entregar ao cliente mais funcionalidades do que ele está esperando... pegá-lo de supresa, e supreendê-lo... este é o desperdício mais śerio. Mais funcionalidades significa: Mais código para ser mantido. Mais testes para serem realizados. Mais documentos de especificação para serem criados. Mais conteúdo para gerar documentação. Mais bugs para aparecerem no sistema... enfim: jogar dinheiro no lixo... ainda mais se você pensar que 80% do total de funcionalidades de um sistema simplesmente não são utilizadas.

Troca de tarefas
Organizar pessoas em múltiplos projetos é outra forma de desperdício. Por ser uma atividade essencialmente intelectual, é necessário, toda vez que ocorrer a troca entre tarefas de projetos diferentes, que o desenvolvedores foque-se em algo completamente novo. Contexto de projeto diferentes, realidades diferentes, procedimentos muitas vezes diferentes...
O tempo que ele levará para estar realmente produtivo em cada projeto reduzirá muito! Sem contar que, normalmente, ocorrerá uma guerra de interesses entre os projetos pela atenção do desenvolvedor...
Minha vó já dizia: fazer muitas coisas ao mesmo tempo é um pretexto para não finalizar nenhuma

Espera
O maior ponto de desperdício em desenvolvimento de softwar é esperar para que algo seja produzido. Esperas em iniciar projetos, realizar testes, aguardar o levantamento de requisitos detalhistas, desenvolver uma funcionalidade são consideradas desperdício.
Atrasos distanciam seu usuário de receber um produto que satisfaça suas necessidades. Em muitos casos, atrasos são apenas a ponta do iceberg para problemas muito maiores. Em ambientes e mercados muito competitivos, atrasos e esperas podem significar milhões de investimento perdidos.
Poucos consideram custos realicionados a participação do mercado como sendo influenciada por atrasos... mas os principais líderes do mercado atualmente foram os pioneiros em seus nichos...

Movimento
Desenvolvimento de software é uma atividade que demanda muita concentração, e interrupções podem ser desastrosas no trabalho realizado. Quanto tempo um desenvolvedor leva para encontrar uma informação? Questões sobre requisitos de negócio ou informações técnicas levam quanto tempo para serem respondidas?
Documentos que transitam entre setores também são disperdícios. Quanto mais pontos um documento passar para iniciar sua implementação, maior será o ruído causado pela interpretação de informações (efeito telefone sem fio)

Defeitos
Você sabe o quanto custo a correção de um problema em fase desenvolvimento? e na integração? UM ABSURDO!!
Defeitos no sistema não agregam valor, não satisfazem o cliente, e definitivamente não são baratos. Qualquer tipo de retrabalho causado por problemas de implementação de requisitos, interpretação de necessidades e correção de documentação devem ser severamente combatidos. Neste ponto os métodos ágeis diferem muito dos modelos mais tradicionais: Construa com qualidade, não tente aferir qualidade após o produto pronto. Crie uma sistema que evite que os erros ocorram, e não que verifique se eles estão presentes em seu sistema para depois corrigí-los.



Tentar eliminar alguns dos desperdícios existentes no desenvolvimento de software é o primeiro passo para melhorar a qualidade de seu sistema... Tente!

30 novembro 2007

Tornando-se um líder Ágil - parte 3




Entenda como funciona a Liderança sob a ótica do Lean thinking.
Palestra ministrada por Mary Poppendieck - excepcional. Um pouco demorada, mais muito produtiva.

Assista na íntegra (com os slides da apresentação)
http://www.infoq.com/presentations/poppendieck-agile-leadership



09 outubro 2007

Lean Software Development

Saudações!!

Você ainda não ouviu falar de Lean Thinking? Então é melhor se atualizar...
=)

Fontes: Lean Institue Brasil, Poppendieck LLC
Video ao final do Texto

Lean Thinking

Introdução

"Lean Thinking" (ou "Mentalidade Enxuta") é um termo cunhado por James Womack e Daniel Jones para denominar uma filosofia de negócios baseada no Sistema Toyota de Produção que olha com detalhe para as atividades básicas envolvidas no negócio e identifica o que é o desperdício e o que é o valor a partir da ótica dos clientes e usuários.

As práticas envolvem a criação de fluxos contínuos e sistemas puxados baseados na demanda real dos clientes, a análise e melhoria do fluxo de valor das plantas e da cadeia completa, desde as matérias primas até os produtos acabados, e o desenvolvimento de produtos que efetivamente sejam soluções do ponto de vista do cliente. A adoção dessa filosofia tem trazido resultados extraordinários para as empresas que a praticam. Mas prepare-se para as dificuldades na implantação. Poucas empresas têm conseguido replicar totalmente o sucesso e a eficiência operacional da Toyota. Originalmente concebida por Taiichi Ohno e colaboradores, essencialmente como práticas de manufatura, tem sido gradualmente disseminadas em todas as áreas da empresa e também para empresas dos mais diferentes tipos e setores, tornando-se efetivamente uma filosofia e uma cultura empresarial.

Os resultados obtidos geralmente implicam em um aumento da capacidade de oferecer os produtos que os clientes querem, na hora que eles querem, nos preços que eles estão dispostos a pagar, com custos menores, qualidade superior, "lead times" curtos, garantindo assim uma maior rentabilidade ao negócio. Onde Aplicar Desenvolvido originalmente no ambiente de produção da indústria de manufatura, o lean thinking vem sendo aplicado, com grandes resultados em eliminação de desperdícios, nos mais diferentes ambientes das organizações, dentro do conceito de "Lean Enterprise" (administração, desenvolvimento de produto e produção), bem como em empresas de diversos setores, tais como: automobilístico e seus fornecedores, aeronáutico, eletrônico, serviços, construção, mineração, saúde, produção sob encomenda, etc.

Os princípios são listados abaixo:

Elimine o Desperdício (Eliminate Waste)

Os três maiores disperdícios em software development:

  • Funcionalidades Extras
    • É necessário um processo que permita criarmos apenas os 20% de funcionalidades que nos dará 80% de valor
  • Imobilidade
    • Se seus requisitos são imutáveis, você especifica muito cedo. Se possui ciclos de testes-correção, você testa muito tarde
  • Fronteiras bem definidas
    • Fronteiras organizacionais geralmente ampliam em cerca de 25% o custo, criando pontos que diminuem o tempo de resposta e interferem na comunicação

Crie Conhecimento (Create Knowledge )

Planejar é muito importante. Aprender é essencial.

  • Utilize o método científico
    • Ensine equipes a: estabelecer hipóteses, conduzir vários experimentos rápidos, crie uma documentação concisa e implemente a melhor alternativa
  • Padrões existem para serem desafiados e melhorados
    • Encorpore a melhor prática atual que todos seguem, enquanto ativamente encoraja a todos o desafio de mudar os padrões
  • Performance futura é guiada pelo Feedback
    • Uma organização não "advinha" sobre o futuro e cria um plano; ela desenvolve a capacidade de responder rapidamente ao futuro à medida que ele se desponta no horizonte

Produza com qualidade (Build Quality In)

Se rotineiramente você encontra defeitos nos sistemas em um processo de verificação, seu processo é defeituoso

  • Código à prova de erros com Desenvolvimento Orientado a Testes
    • Escreva especificações executáveis ao invés de requisitos
  • Pare de construir código legado
    • Código legado é um código que não possui testes de aceitação ou testes unitários automatizados
  • O Big Bang está obsoleto
    • Use Integração Contínua é auto sincronização

Crie comprometimento (Defer Commitment)

Elimine a idéia de que iniciar o desenvolvimento deve acontecer através de uma especificação completa

  • Quebre dependências
    • A Arquitetura de um sistema deve suportar a adição de qualquer nova funcionalidade a qualquer momento
  • Mantenha opções
    • Pense no código como um experimento - faça-o ser tolerante a mudanças
  • Adie decisões irreversíveis para o último momento
    • Aprenda o máximo possível até tomar uma decisão irreversível

Entregue rápido (Deliver Fast)

Listas e filas servem apenas para atrasar as coisas

  • Entregas Rápidas, Qualidade Total e Baixo Custo são completamente compatíveis
    • Empresas que competem com base na velocidade possuem uma grande vantagem em custo, entregam qualidade superior e são mais alinhadas às necessidades dos clientes
  • Teoria das Filas funciona para o desenvolvimento, não apenas servidores
    • Focar-se em utilização cria um problema de tráfego que reduz a própria utilização. Diminua o tempo entre ciclos com menos funcionalidades e menos itens em processo.
  • Limite o trabalho à sua capacidade
    • Estabeleça uma velocidade confiável e cíclica com o desenvolvimento iterativo. Agressivamente limite o número de listas e filas de espera à sua capacidade de entrega

Respeito as pessoas (Respect People)

Pessoas inteligentes e comprometidas provém a maior vantagem competiva da empresa

  • Equipes despontam através de Orgulho, Comprometimento, Confiança e Aplausos
    • O que nos trasforma em uma equipe? Membros estão mutualmente comprometidos a alcançar um objetivo comum
  • Forneca liderança efetiva
    • Equipes eficientes possuem líderes eficientes que conseguem obter o máximo da equipe
  • Respeito parceiros
    • Alianças em join ventures não devem nunca criar conflito de interesses.

Melhore o sistema (Improve the System)

Produtos brilhantes emergem da combinação única de Oportunidade e Tecnologia

  • Foque-se em Toda a Cadeia de Valor
    • Do conceito ao faturamento
    • Da requisição do cliente à instalação do software
  • Entregue um produto completo
    • Desenvolva um produto completo, não apenas software. Produtos completos são criados por equipes completas
  • Meça
    • Meça capacidade do processo através de ciclos de tempo. Mensure a performance do time através de entrega de valor de negócio. Mensure satisfação do cliente através da promoção de redes.