Tag Archives: planejamento

Eliminar desperdício? Cuidado!

Otimização precoce tem sido um dos principais erros das empresas. Muitas tem tentado adotar a filosofia da Toyota sem se preocupar em qual é o real fator de seu sucesso. É importante lembrar que não basta otimizar. Não basta eliminar desperdício.  Devemos eliminar desperdício sim, mas olhando um contexto mais elaborado de longo prazo. Temos que otimizar em direção à um objetivo claro e de longo prazo.

Tenho observado quantas empresas tem adotado Agile ou mesmo Lean. Muitos querem apenas seguir o hype. Outros querem de  fato atingir um nível de qualidade e produtividade maior. O problema é que isso não é fácil. A Toyota tem sido “estudada” há muito tempo e mesmo assim, até hoje, nenhuma outra empresa conseguiu imitar sua capacidade de melhoria contínua e qualidade de processo. Isso porque na Toyota, a melhoria contínua é direcionada à um objetivo de longo prazo.

Vamos pensar na seguinte situação:

A empresa XPTO está desenvolvendo um sistema extremamente complexo e composto por vários softwares integrados. Parte desse desenvolvimento está sendo feito seguindo as premissas do TDD.

A equipe de desenvolvimento declara que, já que fazem TDD, não há a necessidade de testes manuais para QA. E que segundo a filosofia do Lean, devem reduzir os desperdícios no processo, logo, devem eliminar a etapa de QA.

A equipe de QA diz que precisa haver a etapa de QA, afinal de contas existe muita integração com sistemas legados e com dados de produção. Dizem que se não houver a etapa de QA sendo verificada manualmente, o rollout para produção será problemático e resultará em muito esforço e retrabalho para que tudo funcione. Além disso há sempre o risco de entrar em produção com dados ruins e gerar prejuízo na operação da empresa.

Nesse caso, caímos em um grande impasse. Um conflito, expresso na seguinte nuvem:

conflito

Do ponto de vista do pensamento “enxuto” (Lean), ambos estão corretos. Se levarmos em consideração a melhoria contínua como sendo algo que busca eliminar desperdício, teríamos que atender aos dois casos. Muitos declaram que a melhoria em lean significa “eliminar desperdícios”. Essa afirmação não incorreta, apenas incompleta. Melhor seria complementa-la, chegando em algo como:

Melhoria contínua de um processo quer dizer eliminar desperdício de forma direcionada e consciente, levando em consideração as consequências.

Nem sempre conseguimos (ou lembramos de) diferenciar o que merece ser melhorado, tendendo sempre a maximizar a eficiência de uma área às custas de uma outra área, deslocando as perdas entre elas ao invés de otimizar o todo. Já dizia Alvin Toffler:

Você tem que pensar nas coisas grandes enquanto está fazendo as coisas pequenas, de modo que todas as coisas pequenas sigam na direção correta.

Para conseguir o que o Alvin sugere, é preciso envolvimento da gestão no trabalho das pessoas. É preciso direcionamento estratégico. É preciso um cultura de melhoria contínua. Precisamos tomar cuidado para não atrapalhar as coisas no longo prazo, somente para otimizar o resultado de curto prazo.

Devemos cuidar para que a análise de custo e benefício seja uma ferramenta de otimização de processo e não de validação de decisões. O direcionamento estratégico é que deve servir para validar as decisões.

Read more →

Prefira metas à advinhação

Um bom profissional deve ter uma ideia muito clara de quanto tempo ele demora pra realizar um tarefa. Isso pode separar os profissionais dos amadores. Dessa forma, é de se esperar que os bons profissionais consigam estimar quanto tempo vão demorar pra executar uma atividade ou outra, porém, mais do que isso, é preciso que os profissionais se responsabilizem pelos resultados em um projeto.

O que tenho visto ao longo de anos de consultoria na gestão de projetos é que em muitos times, as estimativas são usadas para compor cronogramas e definir deadlines. Isso é um problema grave, pois o time será cobrado fortemente, resultando num ciclo vicioso de super-estimativas, Síndrome do Estudante e mais cobranças.

Outro ponto desfavorável é que na maioria dos casos, independente de quais são as estimativas dos desenvolvedores, os prazos são impostos, pois já vem pré-definidos. Isso permite que os desenvolvedores se acomodem, pois não tem nenhuma responsabilidade sobre o prazo decidido. Sempre há exceções, mas no geral é assim que acontece. Não podemos nos comprometer com prazos definidos por terceiros.

Definindo metas ao invés de adivinhar

A abordagem que eu sempre busco é ser pró-ativo. Não acho que devamos deixar o resultado das coisas nas mãos de algum fator externo. Uso esse mesmo conceito para estimativas. Posso tentar “adivinhar” em quanto tempo irei concluir algo, baseado em vários fatores como histórico, sentimentos e outros dados.

Quando eu tento adivinhar, estou simplesmente assumindo que o resultado é incerto. Dizendo que talvez eu acerte, talvez eu não acerte e isso depende de uma série de fatores. Se eu não acertar, tudo bem, afinal de contas, era apenas uma estimativa. Não preciso me comprometer para atingir uma adivinhação. Se eu errar, foi porque não previ algo que estava por vir e isso afetou o resultado. Coitado de mim, fui pego de surpresa. Isso não é ser pró-ativo.

A outra opção é definir uma meta clara de tempo para a conclusão daquela atividade. Simples assim. Vou usar minha experiência, histórico, sentimentos e outros dados. A diferença aqui é que também vou acompanhar a evolução do meu trabalho para saber se vou atingir a meta ou não. Terei a preocupação de buscar melhores caminhos para chegar ao meu objetivo. Minhas decisões e ações serão direcionadas para que eu atinja a minha meta.

Crie metas SMART

Num exemplo mais claro, ao estimar uma atividade de tamanho X, posso tentar adivinhar, baseado em histórico, que demoraria 2 semanas pra terminar. Ao definir uma meta, posso levar em consideração o fato de que o ideal seria que eu terminasse em 1 semana apenas. Penso o seguinte, ignorando a estimativa de 2 semanas, o que posso fazer para conseguir concluir essa atividade em 1 semana?

Da mesma forma, poderíamos dizer que ao invés de 1 ou 2 semanas, a minha meta é terminar em 4 semanas, já que não há mais nada pra fazer e não será necessário ter esse resultado antes disso. Podemos assim aplicar o conceito do Último Momento Responsável, disseminado pelo Lean como LRM (Last Responsible Moment).

Metas devem ser SMART

Temos ainda que analisar se essa meta é viável ou não. É bom que todas as metas sigam o padrão SMART: Specific, Measurable, Attainable, Realistic e Time-Boxed.

Para conseguir definir uma meta SMART, precisamos ter um histórico, precisamos de experiência e de muita atenção. Mas definir uma meta é muito diferente de simplesmente dizer quanto tempo você leva pra realizar algo. É assumir a responsabilidade em relação ao resultado. Uma meta SMART é uma meta em que as pessoas acreditam que conseguirão atingir. É realista.

Quando iniciamos uma jornada em direção à uma meta, devemos medir nosso progresso constantemente, para saber se a meta continua realista e possível. Por isso sua meta precisa oferecer forma para medir a evolução.

Precisamos garantir que a meta seja relacionada à algo específico. Facilitamos o trabalho de realização, organização e acompanhamento de uma meta quando restringimos a quantidade de variáveis e contextos que influenciam uma meta. Dessa forma, precisamos buscar ser específicos em relação à meta.

A parte da estimativa na prática se refere à definição de um período de tempo em que se deseja atingir a meta. Para saber se a meta é realista e possível de ser atingida, precisamos usar toda a nossa base de histórico e experiência, para questionar a meta. Isso acontece após a definição da meta.

Esses conceitos tem se mostrado muito eficientes quando aplicados em times de desenvolvimento de software, principalmente em conjunto com outras práticas ágeis. Em alguns lugares, a aplicação ou ausência desse mind-set foi determinante para o sucesso ou fracasso de projetos.

E na sua empresa, os desenvolvedores definem metas ou adivinham quanto tempo irão levar? A gestão respeita a avaliação do time em relação às metas de um projeto?

Read more →

O Básico do planejamento ágil

Muitos acham que ser ágil é não planejar. Decidir escrever uma série de artigos que voltam ao básico da gestão ágil. Uma abordagem independente de metodologia, onde tentarei explicar o porque de algumas práticas. Neste artigo, falarei sobre o planejamento inicial, deste ponto de vista.

Há alguns meses atrás, escrevi sobre como iniciamos projetos ágeis na Fratech. Agora neste artigo, venho descrever o porque fazemos desta maneira.

Planejamento Inicial

Projetos Ágeis tem um período de planejamento inicial. Claro que conta com algumas diferenças em relação ao modelo tradicional.

O plano não é importante. O Planejar é!A primeira grande diferença é que o planejamento inicial demora alguns dias, uma semana ou duas no máximo. Esse é o tempo necessário para contextualizar todos os envolvidos e definir o objetivo comum do projeto. Comparado aos meses de levantamento de requisitos e preparação de documentos e diagramas do modelo waterfall, esse é um tempo bem pequeno.

A segunda grande diferença é que os documentos resultantes do planejamento não são muito importantes. Servem mais como um guia, mas alguns até dizem que podem ser descartados. O fato é que acreditamos que o ato de planejar é muito mais importante valioso do que o plano em si. Isso ressalta a importância de todos os envolvidos no projeto participarem ativamente do planejamento.

É nesta fase que se definem os objetivos, metas, declaração de visão, plataforma tecnológica, restrições tecnológicas e padrões a serem seguidos. Em outras palavras, é nesta fase que se definem as diretrizes técnicas e de negócio do projeto. Aqui, define-se também a equipe e o papel de cada um dentro do projeto.

Planning MeetingPara que conseguir realizar um bom planejamento. O planejamento gera contexto e permite que as pessoas envolvidas tomem conhecimento do que deve ser feito e quando deve ser feito. É fundamental para que todos possam ser pró-ativos e caminhe na mesma direção, além de permitir que todos saibam quando estão chegando perto do objetivo. Mas para que isso aconteça, é fundamental que todos participem do planejamento, pois somente através da participação é que existe o comprometimento. É impossível alguém se comprometer a buscar um objetivo se ele não tiver participado da definição deste objetivo.

Devido a natureza dinâmica dos projetos de desenvolvimento de software, faz-se necessário um plano flexível e abrangente. Como veremos no capítulo sobre requisitos, os projetos estão em constante mudança e, cabe a nós, criarmos um plano que permita a mudança constante. Por isso, não deve especificar detalhadamente o resultado do projeto, mas deve se limitar a descrever como o projeto será realizado. O plano deve determinar os papéis de cada um dentro do projeto, deve determinar como serão levantados os requisitos e quais as subfases do projeto.

Como todos participam desse planejamento, o comprometimento em relação ao que foi definido neste momento será muito grande. Todo este planejamento não deve demorar muito mais do que 2 semanas, dependendo do tamanho do projeto e dos recursos disponíveis.

Declaração de Visão

Equipe olhando o planoÉ bom que se determine os objetivos e metas do projeto, de forma que todos saibam, em alto nível, qual o resultado esperado do projeto. É importante determinar restrições de ambiente e expectativas gerais. É bom descrever, em 1 ou 2 folhas A4, qual é o software desejado. Chamamos este documento de visão geral. Ele deve ser escrito pelo cliente que, dentro do limite de 1 ou 2 folhas, deve descrever de forma abrangente, as partes mais importantes do software.

Também é interessante criar um modelo inicial do fluxo das informações dentro do sistema. Nós o chamamos de fluxo de negócio, que deve mostrar as principais operações de negócio realizadas pelo usuário do sistema, quando operando o mesmo.Fluxo de Negócio

Tudo isso serve para guiar a equipe e o cliente ao longo do desenvolvimento.

Estimativa Inicial

O cliente também deve listar algumas das funcionalidades que ele espera ter no software, sem o compromisso de limitar o escopo, mas apenas para garantir que ele não esqueça o que deve ser implementado. Essas funcionalidades compõem uma lista conhecida como Backlog e podem ser ordenadas por prioridade, tamanho ou complexidade das funcionalidades.

O backlog pode ser utilizado para criar uma estimativa inicial de esforço e complexidade para o projeto. Essa estimativa serve como parâmetro para  definir viabilidade, custo estimado e pode até mesmo ajudar no contrato, porém é de extrema importância lembrar que são apenas estimativas e que, apesar de aproximadas, não são os números reais.

Read more →

Projetos ágeis – Levantamento Inicial

Na última semana na Fratech, iniciamos um projeto grande de desenvolvimento. O projeto consiste em um ERP voltado para a indústria de manufatura, principalmente para empresas de pequeno porte. Como em todo projeto de software, o começo é sempre a parte mais arriscada, neste não seria diferente.

É no começo dos projetos que devemos decidir qual o caminho a ser tomado, qual a tecnologia a ser aplicada e principalmente, o que deve ser feito. O processo que utilizamos para responder a essas questões, podem definir o sucesso ou o fracasso de um projeto. Isso traz ainda mais responsabilidade (e problemas) no começo do projeto. Neste caso temos duas opções: Postergar esses problemas para um momento onde estejamos mais maduros em relação ao projeto (mera ilusão), ou enfrentá-los imediatamente.

Por esse e outros motivos, decidimos que a abordagem ágil seria a melhor opção neste caso. Usamos várias práticas ágeis que vimos funcionar efetivamente em outros projetos, para compor um processo customizado. Nesse contexto, iniciamos nosso projeto com os seguintes passos:

  • Definir o objetivo do projeto:

    Nesta etapa devemos identificar os principais aspectos do sistema de forma abrangente e sucinta. Descrever o objetivo deste sistema, para que tenhamos em mente onde queremos chegar. Isso serve para mantermos o foco e a simplicidade do sistema e determinar o resultado que deve ser atingido.

  • Definição das áreas e operações do sistema:

    Após definir o objetivo é interessante relacionar algumas das principais operações do sistema (não mais do que 10), com o objetivo de enteder qual a complexidade do sistema. É necessário ser abrangente para que se consiga uma visão geral de das partes do sistema. Uma vez que se tenha esta lista, deve-se organizá-la, agrupando os itens por áreas que compõe o sistema. Não estou falando de módulos, mas de conjuntos de operações de um único módulo do sistema. Dica: Comece pelas partes mais complexas, buscando assim estimular o conceito de early pain.

    Para isso, utilizamos o conceito de FBS (Feature Breakdown Structure) do FDD (Feature Driven Development), que nada mais é do que listar as funcionalidades de seus sistema, organizadas por áreas. Você pode variar os níveis e a estrutura de uma FBS, porém ela é muito útil para construir seu backlog.

    Exemplo de FBS usando templates de Mind Map Modeling (M3):

    exemplo de arquivo m3

  • Construção de protótipos de telas:

    Com as principais funcionalidades do sistema em mãos, é hora de criar alguns protótipos de tela e assim vivenciar a dificuldade na hora de implementar. Esses protótipos também são simples e abrangentes, de forma que pode-se utilizar wireframes para representar as telas. O objetivo deste passo não é saber como serão as telas, mas sim validar as descrições das funcionalidades descritas no item anterior. Lembre-se que neste momento você deve ter por volta de 10 funcionalidades apenas, o que mantém este processo simples e rápido.

    Exemplo de protótipo de tela

Este processo completo não tomou mais do uma semana no projeto em questão. Isso contece porque o objetivo não é detalhar tudo o que precisa ser feito no sistema, afinal não acreditamos no Big Requirements Up Front, mas sim no modelo de design incremental adotado nas metodologias ágeis. Os passos seguintes a estes, fazem parte do desenvolvimento do software em si e incluem tarefas de modelagem, levantamento de requisitos continuamente e escrita de testes e código.

A partir deste ponto o backlog é composto pelos itens iniciais da FBS, conforme reuniões de priorização com o cliente. O time já está pronto para começar o desenvolvimento do software e após 2 semanas, entregar software funcionando. Conforme o time se aprofunda no desenvolvimento, deve atualizar a FBS com protótipos e descrições das funcionalidades, seguindo o conceito de design evolutivo. Pode-se também listar os critérios de aceitação ou casos de teste para cada funcionalidade. A FBS alimenta o backlog e, ao final do projeto, ela servirá para mensurar a quantidade de funcionalidades implementadas e como estão divididas. Como um mapa da aplicação.

Para mais informações sobre como desenvolver o escopo de sua aplicação veja este post do Manoel Pimentel.

Read more →