SlideShare ist ein Scribd-Unternehmen logo
1 von 67
Downloaden Sie, um offline zu lesen
Feature driven
development
Maurício Linhares
O Que é um bom
processo?
Discutam.
É bem definido
›  Define
        estrutura o suficiente pra garantir
  inovação e criatvidade;

›  Mantém tudo dentro do seu tempo e
  espaço limitado;

›  Evita
       conceitos vagos, abstratos demais
  ou difíceis de serem explicados;
Define tarefas
›  Tarefas   sempre focadas em resultados;

›  Não
      especificam os detalhes, deixando
  espaço pra experimentação e
  adaptação na hora do resultado;

›  Com foco em um tempo pequeno e
  limitado para garantir o progresso;
Produz dados reais sobre
progresso e status
›  É
    fácil dizer onde estamos, pra onde
   vamos e quando vamos chegar lá;

›  Demonstra claramente onde estão os
   gargalos do trabalho;

›  Evita
       ocupar demais o tempo dos
   desenvolvedores com “gestão de
   tempo”;
Torna-se natural
›  As
    pessoas não devem ter que ler mil páginas
  de um livro pra entender como ele funciona;

›  Novos
       membros são facilmente “inoculados”
  com as novas idéias;

›  As
    pessoas começam a agir naturalmente
  em vez de por pressão externa;
Mantém qualidade
controlando a complexidade
›  Garante
          que as pessoas envolvidas
  sentem-se satisfeitas com os produtos
  produzidos;

›  Não
     deixa com que a equipe crie
  complexidade demais para si mesma;

›  Foco   no pensamento de longo prazo;
Otimiza a comunicação
›  Dentro   e fora da equipe;

›  Removebarreiras organizacionais que
  complicam a comunicação;

›  Acaba    com os silos de informação;
Quais os componentes de um
projeto de software?
›  Definição de propósito;
›  Lista de papéis;
›  Pessoas com as habilidades específicas e
    experiência;
›  Um processo bem definido;
›  Um conjunto de tecnologias;
›  Uma arquitetura;
Mas antes disso…
Processos e pessoas outra vez
Produtividade
›  Pesquisas
          indicam que bons desenvolvedores
  produzem de 10 a 20 vezes mais do que os
  ruins;

›  Equipes
        com pessoas de pouca formação
  perdem produtividade e interesse;

›  Lidar
       com pessoas incompetentes aumenta a
  possibilidade de pedidos de demissão;
Como atrair bons
profissionais?
›  Tenha
        bons profissionais dentro da
  equipe;

›  Forneça complementos que não sejam
  diretamente financeiros (plano de saúde,
  café, livros, ambientes abertos…);
Como encontrar bons
profissionais?
›  A
    equipe deve ser responsável pela
  contratação;

›  Não
      deixe pessoas de recursos humanos
  sem experiência em TI iniciarem as
  conversas;

›  Sabatinas,
             avaliações de pensamento
  crítico e modelagem são formas comuns;
Como manter bons
profissionais?
›  Ambiente
           de comunicação aberta, onde
  todos sabem o que está acontecendo;

›  Qualidade dos produtos e contato com
  clientes (satisfeitos!);

›  Valorização
            das pessoas por seus
  companheiros e chefes;

›  Eventosde comunidade, como refeições,
  festas e correlatos;
De volta a FDD - papéis
›    Project manager;

›    Chief Architect;

›    Development manager;

›    Chief programmers;

›    Class owners;

›    Business experts;
Project manager
›  Relatórios   de progresso;

›  Staffing;


›  Evitar   distrações externas ao projeto;

›  Organizar
            e garantir que o processo está
  indo pelo caminho certo;
Chief architect
›  Responsável pela montagem da
  arquitetura inicial do projeto;

›  Deveter grandes capacidades técnicas
  e de facilitação, para expor o design
  para os outros membros da equipe;

›  Tem
      a palavra final sobre as decisões de
  design do projeto;
Development manager
›  Responsável
              por liderar o trabalho diário
  de desenvolvimento com a equipe;

›  Resolve
         os conflitos por recursos dentro
  da equipe e organiza o acesso aos
  mesmos para que não haja espera;
Chief programmers
›  Participam   nas definições de requisitos de
  alto nível;

›  Coordenam pequenas equipes de
  desenvolvimento (de 3 a 6 pessoas) pelo
  trabalho de codificação e análise final;

›  Devem
        ter qualidades tanto técnicas
  como também no trato de pessoas;
Class owners
›  Desenvolvedores
                 que trabalham em
  pequenas equipes sobre a supervisão de um
  Chief Programmer;

›  Normalmente são pessoas que desejam
  continuar na carreira técnica (não querem
  gerenciar outros) ou ainda estão ganhando
  experiência;

›  Responsáveis
            pelo design, código, testes e
  documentação das funcionalidades;
Domain experts
›  Clientes,
          financiadores, analistas de
  negócios ou qualquer sequência dos
  passos;

›  Pessoas
          especializadas no domínio onde
  a aplicação vai atuar, não precisam,
  necessariamente, ter conhecimento
  técnico de software;
Coadjuvantes!
›  Release  manager;
›  Language Guru;
›  Build Engineer;
›  Toolsmith;
›  System administrator/DevOps;
›  Testers;
›  Deployers;
›  Technical writers;
Domain object modeling
›  Definir
         diagramas de classes definindo os
  tipos de objetos dentro de um domínio e
  os relacionamentos entre eles;

›  O
    foco principal é abrir a discussão entre
  todos pra que fique claro o que cada
  objeto deve fazer dentro do sistema;
Domain object modeling - 2
›  O
    foco é definir quais as perguntas cada
  um dos objetos pode responder dentro
  do sistema, quais cálculos e serviços eles
  podem executar;

›  Omodelo nunca é final, precisa ser
  refinado o tempo todo conforme o
  projeto segue em frente;
Domain object modeling - 3
›  O
    modelo provê um framework onde é
  possível adicionar funções, a cada
  funcionalidade definida;

›  Ele
     ajuda a manter a integridade
  conceitual do sistema e a visibilidade das
  coisas que estão send produzidas;
Vamos modelar!
As idéias originais da aula anterior. Ou uma nova
idéia J
Developing by feature
›  Cada funcionalidade precisa gerar valor
  direto para o cliente;

›  Tarefas
         técnicas devem estar incluídas
  dentro da feature, mas o importante é
  entregar a feature no final;

›  Primeiro
          se divide a visão geral do projeto
  em subsistemas;
Developing by feature - 2
›  Depois
         cada subsystema/modulo deve
  ser mais uma vez dividido em requisitos
  menores;

›  Quando os requisitos chegarem a um
  tamanho onde é possível saber como
  eles vão ser implementados, esse é o
  tamanho ideal;
Developing by feature - 3
›  Cadafuncionalidade precisa ser feita em
  no máximo duas semanas, mas o
  tamanho ideal é de poucas horas ou
  dias;

›  Features
           devem ser quantificadas para
  que haja progresso visível o tempo todo,
  pra evitar que o desenvolvimento todo
  pare;
Formato das features
›  <ação>   <resultado> <objeto>

  ›  Calcular  o total de uma venda
  ›  Avaliar a performance de um vendedor
  ›  Validar a senha de um usuário
  ›  Autorizar uma transação de crédito no
      banco;
Class/code ownership
›  Em FDD desenvolvedores tornam-se
  donos de classes do sistema e não do
  sistema como um todo;

›  Objetiva
           manter a consistência do
  sistema no seu nível mais simples, o das
  classes;
Class/code ownership
›  O
    responsável pode sempre responder as
  dúvidas dos outros sobre o que a classe
  deve fazer ou não;

›  Ele
     pode implementar soluções mais
  rápido do que outros membros da
  equipe;
Problemas?
›  Uma única pessoa responsável pode
  fazer com que ela torne-se um gargalo
  no desenvolvimento;

›  Se
     essa pessoa vai embora da empresa,
  o seu conhecimento também se vai com
  ela;
Por que não ser do coletivo?
›  As
     vezes, a propriedade coletiva do código
  faz com que o código não seja de ninguém;

›  Ninguém   se sente responsável pelo código
  escrito;

›  A
    qualidade geral do código produzido
  diminui e refactorings tornam-se inexistentes;
Mais sobre não ser coletivo
›  Pessoaspodem adicionar novas
  funcionalidades a classe sem ter uma
  idéia real de como ela deve funcionar
  realmente;

›  Em
     equipes pequenas e com classes
  pequenas o funcionamento tende a ser
  mais simples;
Coletivo ou individual?
Qual o melhor?
Feature teams
›  Assim
       como classes vão pertencer a
  pessoas, funcionalidades também;

›  A
    pessoa responsável pela
  funcionalidade deve se organizar junto
  com os responsáveis pelas classes que ela
  vai precisar que sejam alteradas para
  coordenar o trabalho da feature;
Feature teams - 2
›  Os
     features devem ser distribuídos entre
  os desenvolvedores para que cada um
  tenha um conjunto de itens a trabalhar;

›  A
    equipe deve se reorganizar ao redor
  das funcionalidades pra garantir que
  todos os envolvidos estão trabalhando
  juntos;
Feature teams - 3
›  Aofim de cada feature, a equipe se
   desmancha e novas equipes se fornam
   para as novas funcionalidades;

›  Éimportante que todos estejam o tempo
   todo trabalhando em conjunto sempre
   que possível;
Feature teams - 4
›  Devem   ser pequenos, de 3 a 6 pessoas;

›  Todosos envolvidos devem ter
  participação como donos do código que
  vai ser criado/modificado;

›  Cadamembro contribui com análise,
  design e implementação da
  funcionalidade;
Feature teams - 5
›  Class
        owners podem pertencer a várias
  equipes ao mesmo tempo, mas deve-se
  evitar fazer disso uma coisa comum (mais de
  3 equipes, por exemplo) pra nào acabar
  com problemas de troca de contexto;

›  Todos
        os envolvidos, inclusive os Chief
  Programmers, devem estar participando da
  construção das funcionalidades;
Como as equipes trabalham
no seu dia a dia?
E como elas se comunicam na hora de executar
tarefas relacionadas?
Inspeções
›  Devemfazer parte do dia a dia da
  equipe, com inspeções de todo o código
  produzido;

›  Transferem
            o conhecimento entre os
  desenvolvedores, dos mais experientes
  pros menos experientes;
Inspeções - 2
›  Garantema aderência aos padrões de
 codificação, pois mais de uma pessoa
 vai ver o código e validar que ele está
 seguindo o padrão;

›  Quandoreunidas com dados reais do
 mundo, podem demonstrar as partes do
 sistema que mais dão problema;
Inspeções - 3
›  Cuidado
          pra não fazer com que as
  inspeções façam as pessoas sentirem-se
  humilhadas ou diminuídas;

›  Inspeções
            devem ser vistas como uma
  forma de fazer com que todos aprendam
  de alguma forma o que está sendo feito;
Inspeções - 4
›  EmFDD, uma Feature Team é
  responsabilizada pelas coisas
  encontradas durante uma inspeção, não
  é uma coisa que depende de uma única
  pessoa;

›  Ochief programmer deve organizar as
  inspecões do código que está sendo
  produzido;
Como são as inspeções
no seu dia a dia?
Se elas não são, será que elas podem lhe ajudar?
Regular Build Schedule
›  A
   intervalos regulares, o sistema deve ser
  posto para QA e depois pada produção;

›  Os
     builds devem ser produzidos em uma
  frequência que faça sentido para o
  produto, empresa e mercado, pode ser
  contínuo, diário ou semanal;
Regular build schedule - 2
›  Emum ambiente ideal o cliente sempre
  vai poder ver (e, preferencialmente, usar)
  as novas funcionalidades conforme elas
  são entregues;

›  O
    build é o ponto final de avaliação de
  progresso, é nele que se vê que as coisas
  estão realmente caminhando;
Regular build schedule - 3
›  É
    possível usar ferramentas automatizadas
   para auditoria e métricas no códifo fonte;

›  Organizaros release notes/
   funcionalidades completadas até o
   período atual;
Como é o seu build
schedule atual?
É bom? Pode melhorar?
Configuration management
›    Inicialmente, um sistema de controle de versão
      deve ser o suficiente;

›    Soluções complementares devem ser
      adicionadas conforme as necessidades do
      projeto, como um sistema de integração
      contínua;

›    É importante manter todos os documentos do
      projeto também dentro do controle de versão pra
      garantir backups e o histórico dos mesmos;
Quais ferramentas você
usa pra CM?
FDD rapidinho
1.    Criação do domínio;
2.    Usar a informação do domínio e os
      outros requisitos pra criar a lista de
      funcionalidades;
3.    Planejar rapidinho pra quem vão as
      responsabilidades;
4.    Separar em Feature Teams e começar a
      produzir por 2 semanas;
5.    Volta pro 1 e repete tudo outra vez!
Criação do domínio
›  Definir
         o design inicial do domínio
  conhecido do projeto, com todos os
  envolvidos e sobre a guia do Chief
  Architect;

›  Deve funcionar como design de alto
  nível, não deve incluir preocupações
  iniciais de baixo nível;
Criação do domínio - 2
›  Os
     especialistas do domínio definem os
  assuntos gerais e se organizam com as
  equipes pra produzir os o design inicial de
  cada um desses assuntos;

›  Depoisda criação, todos os times se
  reúnem mais uma vez para demonstrar as
  idéias encontradas;
Definir as features
›  Depois
         da modelagem inicial, as equipes
  devem produzir tantos features quanto
  possíveis para o primeiro momento;

›  As
    funcionalidades devem ser agrupadas
  mais uma vez quanto aos assuntos do
  domínio aos quais elas pertencem;
Repasar feature sets para os
chief programmers
›  Sequenciar
             os features em grupos (sets)
  para que seja possível organizar eles por
  afinidade;

›  Repassar
         os feature sets para os chief
  programmers (lembrando da prioridade e
  dependências das funcionalidades);
Desenvolvendo
›  Comos grupos de funcionalidades na mão,
  os chief programmers formam a equipes e
  começam a trabalhar nas features;

›  Cada
       feature deve ser planejada e
  desenvolvida dentro do contexto da equipe;

›  Ao
     fim do desenvolvimento, deve haver um
  code review do código produzido, estando
  tudo certo, o código entra pro próximo build;
Progresso e estimativas
›  Track   by feature;

›  O
    progresso é calculado através da
  definição de onde cada feature está;

›  Tudo
       é derivado sempre do estado das
  funcionalidades, não do quanto as
  pessoas acham que vai demorar;
Fases de uma feature
›    Definição de domínio;

›    Design;

›    Inspeção de design;

›    Código;

›    Inspeção de código;

›    Promoção para o build;
Vantagens
›  Não
      se pergunta nem se gasta o tempo
  das pessoas discutindo o que elas estão
  fazendo e a quantas anda o projeto;

›  A
    visibilidade é sempre alta, dado que é
  facilmente possível de se organizas as
  features nos seus blocos;
Exemplo de gráfico
Acompanhamento total
›  Com o acompanhamento das features é
  possível indentificar equipes que entregam
  pouco;

›  Tasks
       que demoram demais pra ser entregues
  (ou que foram estimados muito errados);

›  Quantidadede serviço por fazer e a
  probabilidade de ser feito no prazo;
Documentação produzida
›  Mantenha somente o que for necessário pro
  futuro ou que sirva de utilidade para a
  equipe, coisas que eles usam;

›  Estimativas,gráficos e acompanhamento de
  features devem ser mantidos como dados
  históricos (eles ajudam em planejamentos
  futuros);

›  Responsabilidades   (quem fez qual parte do
  sistema);
Em equipes de integração
›  Deve
       haver uma documentação clara sobre
  os pontos de integração disponíveis;

›  Devem haver exemplos usando as
  tecnologias que sejam assumidamente as
  que vão ser utilizadas pra que seja simples de
  integrar;

›  Devem haver pessoas responsáveis por
  manter essa documentação atualizada e
  disponível;
Dúvidas?

Weitere ähnliche Inhalte

Was ist angesagt?

Gerenciamento de equipes no desenvolvimento de software
Gerenciamento de equipes no desenvolvimento de softwareGerenciamento de equipes no desenvolvimento de software
Gerenciamento de equipes no desenvolvimento de software
Roberto Brandini
 
Porque devo usar Scrum em meus projetos
Porque devo usar Scrum em meus projetosPorque devo usar Scrum em meus projetos
Porque devo usar Scrum em meus projetos
Eamon Sousa, PMP
 
Analise de gerenciamento_de_projeto_de_software_utilizando_metodologia_agil_x...
Analise de gerenciamento_de_projeto_de_software_utilizando_metodologia_agil_x...Analise de gerenciamento_de_projeto_de_software_utilizando_metodologia_agil_x...
Analise de gerenciamento_de_projeto_de_software_utilizando_metodologia_agil_x...
Elisangela Paulino
 
Metodologia ágil
Metodologia ágilMetodologia ágil
Metodologia ágil
rolfczekus
 
Gerenciando Projetos De Software De Forma áGil Utilizando Scrum
Gerenciando Projetos De Software De Forma áGil Utilizando ScrumGerenciando Projetos De Software De Forma áGil Utilizando Scrum
Gerenciando Projetos De Software De Forma áGil Utilizando Scrum
Raphael Donaire Albino
 
Scrum experience bo tutorial scrum v15
Scrum experience bo tutorial scrum v15Scrum experience bo tutorial scrum v15
Scrum experience bo tutorial scrum v15
claudioluciodovallopes
 

Was ist angesagt? (20)

Gerenciamento de equipes no desenvolvimento de software
Gerenciamento de equipes no desenvolvimento de softwareGerenciamento de equipes no desenvolvimento de software
Gerenciamento de equipes no desenvolvimento de software
 
Metodologia Ágil
Metodologia ÁgilMetodologia Ágil
Metodologia Ágil
 
Scrum - Desenvolvimento Ágil
Scrum - Desenvolvimento ÁgilScrum - Desenvolvimento Ágil
Scrum - Desenvolvimento Ágil
 
Porque devo usar Scrum em meus projetos
Porque devo usar Scrum em meus projetosPorque devo usar Scrum em meus projetos
Porque devo usar Scrum em meus projetos
 
Treinamento Ágil / Scrum
Treinamento Ágil / ScrumTreinamento Ágil / Scrum
Treinamento Ágil / Scrum
 
Requisitos Ágeis um novo mindset
Requisitos Ágeis um novo mindsetRequisitos Ágeis um novo mindset
Requisitos Ágeis um novo mindset
 
Analise de gerenciamento_de_projeto_de_software_utilizando_metodologia_agil_x...
Analise de gerenciamento_de_projeto_de_software_utilizando_metodologia_agil_x...Analise de gerenciamento_de_projeto_de_software_utilizando_metodologia_agil_x...
Analise de gerenciamento_de_projeto_de_software_utilizando_metodologia_agil_x...
 
Metodologia ágil das Desenvolvimento Adaptativo Software
Metodologia ágil das   Desenvolvimento Adaptativo SoftwareMetodologia ágil das   Desenvolvimento Adaptativo Software
Metodologia ágil das Desenvolvimento Adaptativo Software
 
Aplicando Scrum na prática para times ágeis
Aplicando Scrum na prática para times ágeisAplicando Scrum na prática para times ágeis
Aplicando Scrum na prática para times ágeis
 
Scrum
ScrumScrum
Scrum
 
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - KanbanMetodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
 
Metodologia ágil
Metodologia ágilMetodologia ágil
Metodologia ágil
 
Scrum
ScrumScrum
Scrum
 
Comparativo entre Processos Ágeis
Comparativo entre Processos ÁgeisComparativo entre Processos Ágeis
Comparativo entre Processos Ágeis
 
Gestao agil de projetos com Scrum
Gestao agil de projetos com ScrumGestao agil de projetos com Scrum
Gestao agil de projetos com Scrum
 
Gerenciamento Ágil de Projetos com Scrum
Gerenciamento Ágil de Projetos com ScrumGerenciamento Ágil de Projetos com Scrum
Gerenciamento Ágil de Projetos com Scrum
 
Gerenciando Projetos De Software De Forma áGil Utilizando Scrum
Gerenciando Projetos De Software De Forma áGil Utilizando ScrumGerenciando Projetos De Software De Forma áGil Utilizando Scrum
Gerenciando Projetos De Software De Forma áGil Utilizando Scrum
 
Scrum experience bo tutorial scrum v15
Scrum experience bo tutorial scrum v15Scrum experience bo tutorial scrum v15
Scrum experience bo tutorial scrum v15
 
Gestão Ágil de Produtos com Lean Startup para times Scrum
Gestão Ágil de Produtos com Lean Startup para times ScrumGestão Ágil de Produtos com Lean Startup para times Scrum
Gestão Ágil de Produtos com Lean Startup para times Scrum
 
Metodologia agil scrum x pmbok
Metodologia agil   scrum x pmbokMetodologia agil   scrum x pmbok
Metodologia agil scrum x pmbok
 

Andere mochten auch (8)

Projeto e desenvolvimento de sistemas de informação 5 - computação móvel, s...
Projeto e desenvolvimento de sistemas de informação   5 - computação móvel, s...Projeto e desenvolvimento de sistemas de informação   5 - computação móvel, s...
Projeto e desenvolvimento de sistemas de informação 5 - computação móvel, s...
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleções
 
Mercado hoje
Mercado hojeMercado hoje
Mercado hoje
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecas
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
 

Ähnlich wie Feature Driven Development

Fdd em uma casca de banana
Fdd em uma casca de bananaFdd em uma casca de banana
Fdd em uma casca de banana
ejedelmal
 
anhanguera _ gestao de projetos _ u4 s2 _ projetos ágeis.pptx
anhanguera _ gestao de projetos _ u4 s2 _ projetos ágeis.pptxanhanguera _ gestao de projetos _ u4 s2 _ projetos ágeis.pptx
anhanguera _ gestao de projetos _ u4 s2 _ projetos ágeis.pptx
Alisson Batista
 
Msf microsoft solutions framework - Apresentação
Msf  microsoft solutions framework -  ApresentaçãoMsf  microsoft solutions framework -  Apresentação
Msf microsoft solutions framework - Apresentação
cesaraks
 

Ähnlich wie Feature Driven Development (20)

Do Zero à Produção
Do Zero à ProduçãoDo Zero à Produção
Do Zero à Produção
 
Fdd em uma casca de banana
Fdd em uma casca de bananaFdd em uma casca de banana
Fdd em uma casca de banana
 
Como fazer a gestão do Time de Desenvolvimento
Como fazer a gestão do Time de DesenvolvimentoComo fazer a gestão do Time de Desenvolvimento
Como fazer a gestão do Time de Desenvolvimento
 
Aula 1 Analise e Projeto
Aula 1   Analise e ProjetoAula 1   Analise e Projeto
Aula 1 Analise e Projeto
 
Aula 1 analise e projeto
Aula 1   analise e projetoAula 1   analise e projeto
Aula 1 analise e projeto
 
Métodos Ágeis - Aula02
Métodos Ágeis - Aula02Métodos Ágeis - Aula02
Métodos Ágeis - Aula02
 
Metodos ageis
Metodos ageisMetodos ageis
Metodos ageis
 
Desenvolvimento Ágil
Desenvolvimento ÁgilDesenvolvimento Ágil
Desenvolvimento Ágil
 
FDD
FDDFDD
FDD
 
Métodos Ágeis
Métodos ÁgeisMétodos Ágeis
Métodos Ágeis
 
anhanguera _ gestao de projetos _ u4 s2 _ projetos ágeis.pptx
anhanguera _ gestao de projetos _ u4 s2 _ projetos ágeis.pptxanhanguera _ gestao de projetos _ u4 s2 _ projetos ágeis.pptx
anhanguera _ gestao de projetos _ u4 s2 _ projetos ágeis.pptx
 
Tudo são Dados - PHP Conference 2008
Tudo são Dados - PHP Conference 2008Tudo são Dados - PHP Conference 2008
Tudo são Dados - PHP Conference 2008
 
Introdução a Metodologia XP (E Xtreme Programming)
Introdução a Metodologia XP (E Xtreme Programming)Introdução a Metodologia XP (E Xtreme Programming)
Introdução a Metodologia XP (E Xtreme Programming)
 
Scrum
ScrumScrum
Scrum
 
Scrum 8
Scrum 8Scrum 8
Scrum 8
 
Msf microsoft solutions framework - Apresentação
Msf  microsoft solutions framework -  ApresentaçãoMsf  microsoft solutions framework -  Apresentação
Msf microsoft solutions framework - Apresentação
 
Gestão de projetos
Gestão de projetosGestão de projetos
Gestão de projetos
 
Fator Humano no Gerenciamento de Projetos
Fator Humano no Gerenciamento de ProjetosFator Humano no Gerenciamento de Projetos
Fator Humano no Gerenciamento de Projetos
 
Scrum em 1h.
Scrum em 1h.Scrum em 1h.
Scrum em 1h.
 
Enter SCRUM
Enter SCRUMEnter SCRUM
Enter SCRUM
 

Mehr von Maurício Linhares

Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
Maurício Linhares
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
Maurício Linhares
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
Maurício Linhares
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
Maurício Linhares
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010
Maurício Linhares
 
Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010
Maurício Linhares
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010
Maurício Linhares
 
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
Projeto e desenvolvimento de sistemas de informação   4 - computação em redeProjeto e desenvolvimento de sistemas de informação   4 - computação em rede
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
Maurício Linhares
 

Mehr von Maurício Linhares (20)

Mercado de TI
Mercado de TIMercado de TI
Mercado de TI
 
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Curso java 02 - variáveis
Curso java   02 - variáveisCurso java   02 - variáveis
Curso java 02 - variáveis
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvem
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
Revisão html e java script
Revisão html e java scriptRevisão html e java script
Revisão html e java script
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010
 
Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010
 
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
Projeto e desenvolvimento de sistemas de informação   4 - computação em redeProjeto e desenvolvimento de sistemas de informação   4 - computação em rede
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
 
Extreme programming explicada
Extreme programming explicadaExtreme programming explicada
Extreme programming explicada
 
Jdbc e hibernate
Jdbc e hibernateJdbc e hibernate
Jdbc e hibernate
 
Java wsdp
Java wsdpJava wsdp
Java wsdp
 
Relatório final do projeto de pesquisa e-Teacher
Relatório final do projeto de pesquisa e-TeacherRelatório final do projeto de pesquisa e-Teacher
Relatório final do projeto de pesquisa e-Teacher
 
Relatório Final - Biblioteca Digital Paulo Freire
Relatório Final - Biblioteca Digital Paulo FreireRelatório Final - Biblioteca Digital Paulo Freire
Relatório Final - Biblioteca Digital Paulo Freire
 

Feature Driven Development

  • 2. O Que é um bom processo? Discutam.
  • 3. É bem definido ›  Define estrutura o suficiente pra garantir inovação e criatvidade; ›  Mantém tudo dentro do seu tempo e espaço limitado; ›  Evita conceitos vagos, abstratos demais ou difíceis de serem explicados;
  • 4. Define tarefas ›  Tarefas sempre focadas em resultados; ›  Não especificam os detalhes, deixando espaço pra experimentação e adaptação na hora do resultado; ›  Com foco em um tempo pequeno e limitado para garantir o progresso;
  • 5. Produz dados reais sobre progresso e status ›  É fácil dizer onde estamos, pra onde vamos e quando vamos chegar lá; ›  Demonstra claramente onde estão os gargalos do trabalho; ›  Evita ocupar demais o tempo dos desenvolvedores com “gestão de tempo”;
  • 6. Torna-se natural ›  As pessoas não devem ter que ler mil páginas de um livro pra entender como ele funciona; ›  Novos membros são facilmente “inoculados” com as novas idéias; ›  As pessoas começam a agir naturalmente em vez de por pressão externa;
  • 7. Mantém qualidade controlando a complexidade ›  Garante que as pessoas envolvidas sentem-se satisfeitas com os produtos produzidos; ›  Não deixa com que a equipe crie complexidade demais para si mesma; ›  Foco no pensamento de longo prazo;
  • 8. Otimiza a comunicação ›  Dentro e fora da equipe; ›  Removebarreiras organizacionais que complicam a comunicação; ›  Acaba com os silos de informação;
  • 9. Quais os componentes de um projeto de software? ›  Definição de propósito; ›  Lista de papéis; ›  Pessoas com as habilidades específicas e experiência; ›  Um processo bem definido; ›  Um conjunto de tecnologias; ›  Uma arquitetura;
  • 10. Mas antes disso… Processos e pessoas outra vez
  • 11. Produtividade ›  Pesquisas indicam que bons desenvolvedores produzem de 10 a 20 vezes mais do que os ruins; ›  Equipes com pessoas de pouca formação perdem produtividade e interesse; ›  Lidar com pessoas incompetentes aumenta a possibilidade de pedidos de demissão;
  • 12. Como atrair bons profissionais? ›  Tenha bons profissionais dentro da equipe; ›  Forneça complementos que não sejam diretamente financeiros (plano de saúde, café, livros, ambientes abertos…);
  • 13. Como encontrar bons profissionais? ›  A equipe deve ser responsável pela contratação; ›  Não deixe pessoas de recursos humanos sem experiência em TI iniciarem as conversas; ›  Sabatinas, avaliações de pensamento crítico e modelagem são formas comuns;
  • 14. Como manter bons profissionais? ›  Ambiente de comunicação aberta, onde todos sabem o que está acontecendo; ›  Qualidade dos produtos e contato com clientes (satisfeitos!); ›  Valorização das pessoas por seus companheiros e chefes; ›  Eventosde comunidade, como refeições, festas e correlatos;
  • 15. De volta a FDD - papéis ›  Project manager; ›  Chief Architect; ›  Development manager; ›  Chief programmers; ›  Class owners; ›  Business experts;
  • 16. Project manager ›  Relatórios de progresso; ›  Staffing; ›  Evitar distrações externas ao projeto; ›  Organizar e garantir que o processo está indo pelo caminho certo;
  • 17. Chief architect ›  Responsável pela montagem da arquitetura inicial do projeto; ›  Deveter grandes capacidades técnicas e de facilitação, para expor o design para os outros membros da equipe; ›  Tem a palavra final sobre as decisões de design do projeto;
  • 18. Development manager ›  Responsável por liderar o trabalho diário de desenvolvimento com a equipe; ›  Resolve os conflitos por recursos dentro da equipe e organiza o acesso aos mesmos para que não haja espera;
  • 19. Chief programmers ›  Participam nas definições de requisitos de alto nível; ›  Coordenam pequenas equipes de desenvolvimento (de 3 a 6 pessoas) pelo trabalho de codificação e análise final; ›  Devem ter qualidades tanto técnicas como também no trato de pessoas;
  • 20. Class owners ›  Desenvolvedores que trabalham em pequenas equipes sobre a supervisão de um Chief Programmer; ›  Normalmente são pessoas que desejam continuar na carreira técnica (não querem gerenciar outros) ou ainda estão ganhando experiência; ›  Responsáveis pelo design, código, testes e documentação das funcionalidades;
  • 21. Domain experts ›  Clientes, financiadores, analistas de negócios ou qualquer sequência dos passos; ›  Pessoas especializadas no domínio onde a aplicação vai atuar, não precisam, necessariamente, ter conhecimento técnico de software;
  • 22. Coadjuvantes! ›  Release manager; ›  Language Guru; ›  Build Engineer; ›  Toolsmith; ›  System administrator/DevOps; ›  Testers; ›  Deployers; ›  Technical writers;
  • 23. Domain object modeling ›  Definir diagramas de classes definindo os tipos de objetos dentro de um domínio e os relacionamentos entre eles; ›  O foco principal é abrir a discussão entre todos pra que fique claro o que cada objeto deve fazer dentro do sistema;
  • 24. Domain object modeling - 2 ›  O foco é definir quais as perguntas cada um dos objetos pode responder dentro do sistema, quais cálculos e serviços eles podem executar; ›  Omodelo nunca é final, precisa ser refinado o tempo todo conforme o projeto segue em frente;
  • 25. Domain object modeling - 3 ›  O modelo provê um framework onde é possível adicionar funções, a cada funcionalidade definida; ›  Ele ajuda a manter a integridade conceitual do sistema e a visibilidade das coisas que estão send produzidas;
  • 26. Vamos modelar! As idéias originais da aula anterior. Ou uma nova idéia J
  • 27. Developing by feature ›  Cada funcionalidade precisa gerar valor direto para o cliente; ›  Tarefas técnicas devem estar incluídas dentro da feature, mas o importante é entregar a feature no final; ›  Primeiro se divide a visão geral do projeto em subsistemas;
  • 28. Developing by feature - 2 ›  Depois cada subsystema/modulo deve ser mais uma vez dividido em requisitos menores; ›  Quando os requisitos chegarem a um tamanho onde é possível saber como eles vão ser implementados, esse é o tamanho ideal;
  • 29. Developing by feature - 3 ›  Cadafuncionalidade precisa ser feita em no máximo duas semanas, mas o tamanho ideal é de poucas horas ou dias; ›  Features devem ser quantificadas para que haja progresso visível o tempo todo, pra evitar que o desenvolvimento todo pare;
  • 30. Formato das features ›  <ação> <resultado> <objeto> ›  Calcular o total de uma venda ›  Avaliar a performance de um vendedor ›  Validar a senha de um usuário ›  Autorizar uma transação de crédito no banco;
  • 31. Class/code ownership ›  Em FDD desenvolvedores tornam-se donos de classes do sistema e não do sistema como um todo; ›  Objetiva manter a consistência do sistema no seu nível mais simples, o das classes;
  • 32. Class/code ownership ›  O responsável pode sempre responder as dúvidas dos outros sobre o que a classe deve fazer ou não; ›  Ele pode implementar soluções mais rápido do que outros membros da equipe;
  • 33. Problemas? ›  Uma única pessoa responsável pode fazer com que ela torne-se um gargalo no desenvolvimento; ›  Se essa pessoa vai embora da empresa, o seu conhecimento também se vai com ela;
  • 34. Por que não ser do coletivo? ›  As vezes, a propriedade coletiva do código faz com que o código não seja de ninguém; ›  Ninguém se sente responsável pelo código escrito; ›  A qualidade geral do código produzido diminui e refactorings tornam-se inexistentes;
  • 35. Mais sobre não ser coletivo ›  Pessoaspodem adicionar novas funcionalidades a classe sem ter uma idéia real de como ela deve funcionar realmente; ›  Em equipes pequenas e com classes pequenas o funcionamento tende a ser mais simples;
  • 37. Feature teams ›  Assim como classes vão pertencer a pessoas, funcionalidades também; ›  A pessoa responsável pela funcionalidade deve se organizar junto com os responsáveis pelas classes que ela vai precisar que sejam alteradas para coordenar o trabalho da feature;
  • 38. Feature teams - 2 ›  Os features devem ser distribuídos entre os desenvolvedores para que cada um tenha um conjunto de itens a trabalhar; ›  A equipe deve se reorganizar ao redor das funcionalidades pra garantir que todos os envolvidos estão trabalhando juntos;
  • 39. Feature teams - 3 ›  Aofim de cada feature, a equipe se desmancha e novas equipes se fornam para as novas funcionalidades; ›  Éimportante que todos estejam o tempo todo trabalhando em conjunto sempre que possível;
  • 40. Feature teams - 4 ›  Devem ser pequenos, de 3 a 6 pessoas; ›  Todosos envolvidos devem ter participação como donos do código que vai ser criado/modificado; ›  Cadamembro contribui com análise, design e implementação da funcionalidade;
  • 41. Feature teams - 5 ›  Class owners podem pertencer a várias equipes ao mesmo tempo, mas deve-se evitar fazer disso uma coisa comum (mais de 3 equipes, por exemplo) pra nào acabar com problemas de troca de contexto; ›  Todos os envolvidos, inclusive os Chief Programmers, devem estar participando da construção das funcionalidades;
  • 42. Como as equipes trabalham no seu dia a dia? E como elas se comunicam na hora de executar tarefas relacionadas?
  • 43. Inspeções ›  Devemfazer parte do dia a dia da equipe, com inspeções de todo o código produzido; ›  Transferem o conhecimento entre os desenvolvedores, dos mais experientes pros menos experientes;
  • 44. Inspeções - 2 ›  Garantema aderência aos padrões de codificação, pois mais de uma pessoa vai ver o código e validar que ele está seguindo o padrão; ›  Quandoreunidas com dados reais do mundo, podem demonstrar as partes do sistema que mais dão problema;
  • 45. Inspeções - 3 ›  Cuidado pra não fazer com que as inspeções façam as pessoas sentirem-se humilhadas ou diminuídas; ›  Inspeções devem ser vistas como uma forma de fazer com que todos aprendam de alguma forma o que está sendo feito;
  • 46. Inspeções - 4 ›  EmFDD, uma Feature Team é responsabilizada pelas coisas encontradas durante uma inspeção, não é uma coisa que depende de uma única pessoa; ›  Ochief programmer deve organizar as inspecões do código que está sendo produzido;
  • 47. Como são as inspeções no seu dia a dia? Se elas não são, será que elas podem lhe ajudar?
  • 48. Regular Build Schedule ›  A intervalos regulares, o sistema deve ser posto para QA e depois pada produção; ›  Os builds devem ser produzidos em uma frequência que faça sentido para o produto, empresa e mercado, pode ser contínuo, diário ou semanal;
  • 49. Regular build schedule - 2 ›  Emum ambiente ideal o cliente sempre vai poder ver (e, preferencialmente, usar) as novas funcionalidades conforme elas são entregues; ›  O build é o ponto final de avaliação de progresso, é nele que se vê que as coisas estão realmente caminhando;
  • 50. Regular build schedule - 3 ›  É possível usar ferramentas automatizadas para auditoria e métricas no códifo fonte; ›  Organizaros release notes/ funcionalidades completadas até o período atual;
  • 51. Como é o seu build schedule atual? É bom? Pode melhorar?
  • 52. Configuration management ›  Inicialmente, um sistema de controle de versão deve ser o suficiente; ›  Soluções complementares devem ser adicionadas conforme as necessidades do projeto, como um sistema de integração contínua; ›  É importante manter todos os documentos do projeto também dentro do controle de versão pra garantir backups e o histórico dos mesmos;
  • 54. FDD rapidinho 1.  Criação do domínio; 2.  Usar a informação do domínio e os outros requisitos pra criar a lista de funcionalidades; 3.  Planejar rapidinho pra quem vão as responsabilidades; 4.  Separar em Feature Teams e começar a produzir por 2 semanas; 5.  Volta pro 1 e repete tudo outra vez!
  • 55. Criação do domínio ›  Definir o design inicial do domínio conhecido do projeto, com todos os envolvidos e sobre a guia do Chief Architect; ›  Deve funcionar como design de alto nível, não deve incluir preocupações iniciais de baixo nível;
  • 56. Criação do domínio - 2 ›  Os especialistas do domínio definem os assuntos gerais e se organizam com as equipes pra produzir os o design inicial de cada um desses assuntos; ›  Depoisda criação, todos os times se reúnem mais uma vez para demonstrar as idéias encontradas;
  • 57. Definir as features ›  Depois da modelagem inicial, as equipes devem produzir tantos features quanto possíveis para o primeiro momento; ›  As funcionalidades devem ser agrupadas mais uma vez quanto aos assuntos do domínio aos quais elas pertencem;
  • 58. Repasar feature sets para os chief programmers ›  Sequenciar os features em grupos (sets) para que seja possível organizar eles por afinidade; ›  Repassar os feature sets para os chief programmers (lembrando da prioridade e dependências das funcionalidades);
  • 59. Desenvolvendo ›  Comos grupos de funcionalidades na mão, os chief programmers formam a equipes e começam a trabalhar nas features; ›  Cada feature deve ser planejada e desenvolvida dentro do contexto da equipe; ›  Ao fim do desenvolvimento, deve haver um code review do código produzido, estando tudo certo, o código entra pro próximo build;
  • 60. Progresso e estimativas ›  Track by feature; ›  O progresso é calculado através da definição de onde cada feature está; ›  Tudo é derivado sempre do estado das funcionalidades, não do quanto as pessoas acham que vai demorar;
  • 61. Fases de uma feature ›  Definição de domínio; ›  Design; ›  Inspeção de design; ›  Código; ›  Inspeção de código; ›  Promoção para o build;
  • 62. Vantagens ›  Não se pergunta nem se gasta o tempo das pessoas discutindo o que elas estão fazendo e a quantas anda o projeto; ›  A visibilidade é sempre alta, dado que é facilmente possível de se organizas as features nos seus blocos;
  • 64. Acompanhamento total ›  Com o acompanhamento das features é possível indentificar equipes que entregam pouco; ›  Tasks que demoram demais pra ser entregues (ou que foram estimados muito errados); ›  Quantidadede serviço por fazer e a probabilidade de ser feito no prazo;
  • 65. Documentação produzida ›  Mantenha somente o que for necessário pro futuro ou que sirva de utilidade para a equipe, coisas que eles usam; ›  Estimativas,gráficos e acompanhamento de features devem ser mantidos como dados históricos (eles ajudam em planejamentos futuros); ›  Responsabilidades (quem fez qual parte do sistema);
  • 66. Em equipes de integração ›  Deve haver uma documentação clara sobre os pontos de integração disponíveis; ›  Devem haver exemplos usando as tecnologias que sejam assumidamente as que vão ser utilizadas pra que seja simples de integrar; ›  Devem haver pessoas responsáveis por manter essa documentação atualizada e disponível;