Equipes de Funcionalidades
Uma equipe de funcionliddes, mostrada na Figura 1, é uma equipe de longa duração, multifuncional, de componentes cruzados quem completam muitas funcionalidades de ponta a ponta, uma a uma.
As características de uma equipe de funcionalidades estão listadas abaixo:
- Duradoura - a equipe permanece junto para que ela possa amadurecer para ter um maior desempenho; Ela assume novas funcionalidades ao longo do tempo
- multifuncional e multicomponente
- Idealmente, co-localizada
- Trabalhar em uma completa funcionalidade centrada no cliente, através de todos os componentes e disciplinas (análise, programação, testes, …)
- Composta de especialistas generalistas
- No Scrum, tipicamente 7 ± 2 pessoas
Aplicar as modernas práticas de engenharia - especialmente a integração contínua - é essencial ao adotar equipes de funcionalidades. A integração contínua facilita a propriedade compartilhada do código, o que é uma necessidade quando várias equipes trabalham ao mesmo tempo nos mesmos componentes.
Um mal-entendido comum: cada membro de uma equipe de funcionalidade precisa conhecer todo o sistema. Não é assim, porque
- A equipe como um todo - e não cada membro individual - requer as habilidades para implementar toda a funcionalidade centrada no cliente. Estas incluem conhecimento de componentes e habilidades funcionais como teste, design de interação ou programação. Mas dentro da equipe, as pessoas ainda se especializam … preferencialmente em várias áreas.
- As funcionalidades não são distribuídas aleatoriamente entre as equipes de funcionalidades. O conhecimento e as habilidades atuais de uma equipe são fatorados na decisão de qual equipe trabalha em quais funcionalidades.
Dentro de uma organização com equipe de funcionalidades, quando a especialização se torna uma restrição … o aprendizado acontece.
Uma organização de equipe de funcionalidades explora os benefícios de velocidade da especialização, desde que os requisitos mapeiem as habilidades das equipes.
Mas quando os requisitos não mapeiam as habilidades das equipes, o aprendizado é “forçado”, rompendo a restrição de superespecialização.
As equipes de funcionalidades equilibram a especialização e flexibilidade.
Equipes de componente vs. equipes de funcionalidades
A tabela abaixo e a Figura 2 mostram as diferenças entre equipes de funcionalidades e equipes de componentes mais tradicionais.
equipe de componente | equipe de funcionalidade |
---|---|
Otimizada para fornecer o número máximo de linhas de código | Otimizada para fornecer o valor máximo do cliente |
Foco no aumento da produtividade individual através da implementação de funcionalidades “fáceis” de baixo valor | Foco em funcionalidades de alto valor e produtividade do sistema |
Responsável por apenas parte de um funcionalidade centrada no cliente | Responsável pela funcionalidade completa centrada no cliente |
Maneira tradicional de organizar equipes - segue a lei de Conway | Maneira “moderna” de organizar equipes - evita a lei de Conway |
Conduz a um trabalho “inventado” e a uma organização que cresce para sempre | Leva ao foco no cliente, à visibilidade e às organizações menores |
Dependências entre equipes leva a um planejamento adicional | Minimiza dependências entre equipes para aumentar a flexibilidade |
Foco em especialização única | Foco em múltiplas especializações |
Propriedade de código individual / equipe | Propriedade do código do produto compartilhado |
Responsabilidades individuais claras | Responsabilidades compartilhadas da equipe |
Resulta em desenvolvimento “cascata” | Suporta desenvolvimento iterativo |
Explora as competências existentes; Nível mais baixo de aprendizado de novas competências | Aproveita a flexibilidade; Aprendizado contínuo e abrangente |
Funciona com práticas de engenharia desleixadas - os efeitos são localizados | Requer práticas de engenharia qualificadas - os efeitos são amplamente visíveis |
Ao contrário do que se acredita, muitas vezes leva a código de baixa qualidade no componente | Fornece uma motivação para tornar o código fácil de manter e testar |
Aparentemente fácil de implementar | Aparentemente difícil de implementar |
A tabela abaixo resume as diferenças entre as equipes de funcionalidades e os grupos convencionais de projetos ou funcionalidades.
equipe de funcionalidade | gruposde projetos ou funcionalidades |
---|---|
Equipe estável que permanece junta por anos e trabalha em muitas funcionalidades | Grupo temporário de pessoas criado para uma funcionalidade ou projeto |
Responsabilidade compartilhada da equipe para todo o trabalho | Responsabilidade individual pela “sua” parte baseada na especialização |
Equipa de auto-organização | Controlado por um gestor de projeto |
Resulta em uma organização simples de uma única linha (sem matriz!) | Resulta em uma organização matriz com pools de recursos |
Os membros da equipe são dedicados - 100% alocados - para a equipe | Membros são part-time em muitos projetos por causa de especialização |
A maior parte dos inconvenientes das equipes de componentes é explorada no capítulo “Equipes de Funcionalidades” do Scaling Lean & Agile Development, a Figura 3 resume algumas delas.
O que às vezes não é visto é que uma estrutura de equipe de componentes reforça o desenvolvimento sequencial (em cascata ou modelo V), com muitas filas com pacotes de trabalho de tamanhos variados, altos níveis de WIP, muitas transferências e aumento da multitarefa e alocação parcial.
Escolhendo equipes de componentes ou equipes de recursos?
Uma organização de equipe de funcionalidades pura é o ideal sob a perspectiva de entrega de valor e flexibilidade organizacional. Valor e flexibilidade, no entanto, não são os únicos critérios para a estrutura organizacional, e muitas organizações, portanto, acabam com um híbrido, especialmente durante uma transição de componente para equipes de funcionalidades. Cuidado: modelos híbridos têm as desvantagens de ambos os mundos e pode ser … doloroso.
Uma razão frequentemente expressa em favor de uma organização híbrida é a necessidade de construir infraestrutura, construir componentes reutilizáveis ou limpar o código -trabalho tradicionalmente feito dentro de equipes de componentes. Mas essas atividades também podem ser feitas em uma organização de equipe de funcionalidades pura - sem estabelecer equipes permanentes de componentes. Como? Adicionando infraestrutura, componentes reutilizáveis ou trabalho de limpeza ao Product Backlog e fornecendo-o a uma equipe de funcionalidades existente, como se fosse uma funcionalidade centrada no cliente. A equipe de funcionalidades temporariamente - enquanto o Product Owner desejar - faz esse trabalho e, em seguida, retorna à construção de funcionalidades centradas no cliente.
Transição para equipes de funcionalidades
Diferentes organizações requerem diferentes estratégias de transição ao mudar de equipes de componentes para equipes de funcionalidades. Temos experiência com muitas estratégias que funcionaram … e falharam em contextos diferentes. Uma estratégia segura, mas de transição lenta, é estabelecer uma equipe de funcionalidades dentro da organização em uma equipe de componentes existente. Depois que esta equipe executa bem, uma segunda equipe de funcionalidade é formada. Isso continua gradualmente na velocidade com a qual a organização se sente confortável. Isso é mostrado na Figura 4.
Leitura Recomendada
- Feature Team Primer
Este artigo apareceu originalmente em Feature Team Primer - Capítulo Feature Teams de Scaling Agile & Lean Development
Esta análise de 60 páginas de equipes de recursos e componentes também está disponível online - Dynamics of Software Development de Jim McCarthy Originalmente publicado em 1995, mas reeditado em 2008. O livro de Jim é um verdadeiro clássico no desenvolvimento de software. Já em 1995 enfatizou as equipes de funcionalidades. O resto do livro é recheado com dicas perspicazes relacionadas ao desenvolvimento de software.
“XP and Large Distributed Software Projects” de Karlsson e Andersson. Este antigo artigo de desenvolvimento ágil em larga escala foi publicado em Extreme Programming Perspectives. É um artigo perspicaz e muito menos apreciado descrevendo a forte relação entre times de funcionalidades e integração contínua.
“How Do Committees Invent?” de Mel Conway.
Este artigo de 40 anos é tão perspicaz hoje como era há 40 anos. Está disponível através do Web site dos autores em www.melconway.com