Critérios efetivos para organizar equipes de engenharia

De todos os aspectos relevantes para uma organização de engenharia de alto desempenho, a estrutura das equipes é o mais importante.
0
Consideraçõesx

Equipes bem organizadas têm responsabilidades bem definidas, sem ultrapassar os limites de carga cognitiva das pessoas, conferindo autonomia para fazer o trabalho e gerar valor percebido.

Neste capítulo, abordamos critérios efetivos para organizar equipes de engenharia, estruturando organizações de engenharia para maximizar resultados.

Equipes bem planejadas “entregam” mais

A forma mais efetiva de “planejar” as equipes de uma organização de engenharia é considerando, primeiro, as “entregas” esperadas desses times. Genericamente, podemos assumir quatro tipos diferentes de entregas associadas a times de engenharia de software. De maneira ótima, cada time deverá realizar apenas um tipo de entrega.
0
Considerações?x

SRP e organização dos times

O princípio da responsabilidade única, geralmente associado ao design de sistemas, que indica que cada componente tenha uma, e somente uma, responsabilidade, é aplicável, também, a organização das equipes.

A ideia é que cada equipe se comprometa com um, e apenas um, tipo de entrega.

O primeiro tipo de entregas associado a equipes de engenharia é o atendimento, direto, dos objetivos do negócio. Ou seja, a capacidade de converter “requisitos funcionais” em software, geralmente, pelo desenvolvimento de features que os usuários percebem e interagem. Externamente, é o desempenho de equipes que endereçam esse tipo de expectativas que irá dar a “fama” da organização de engenharia.

O mito dos requisitos

Costuma-se dizer que as demandas do “negócio” são “requisitos”. Entretanto, o que o negócio tem, geralmente, são “anseios” e hipóteses de como atendê-los.

O fato é que essa “presunção” de que o que se tem são requisitos atrapalha mais do que ajuda. Assume-se uma certeza que, na maioria dos casos, não existe.

O segundo tipo de entregas associado a equipes de engenharia é o desenvolvimento de partes mais complicadas, geralmente, basilares para as funcionalidades que o usuário deseja. Em uma plataforma como a Uber, por exemplo, a definição das rotas das viagens é algo importante, sobretudo porque tem impacto direto nos custos, por outro lado, não é uma parte do sistema que recebe requisições frequentes por parte dos usuários da plataforma.

Não raro, essas partes complexas entregam os “diferenciais competitivos” para o negócio.

O terceiro tipo de entregas associado a equipes de engenharia está no suporte a “requisitos não-funcionais”, como segurança e observabilidade. A ideia é fornecer recursos que garantam para as equipes que atendem os objetivos de negócio artefatos técnicos suficientes para focar no negócio e não em demandas técnicas. Esse tipo de de entrega geralmente é atendido por equipes dedicadas em organizações maiores, com centenas ou milhares de desenvolvedores.

Finalmente, o quarto tipo de entrega associado a equipes de engenharia é apoio consultivo para práticas e padrões. A ideia é garantir a adoção continuada das melhores práticas na organização sem desviar o foco, principalmente das equipes que estão “na linha de frente”. São comuns equipes dedicadas a facilitar atividades relacionadas a agilidade, operações e arquitetura de software.

Quatro tipos de equipes

Como já foi dito, uma equipe, para ser mais eficiente, deverá atender apenas um dos quatro tipos de entrega relacionados à engenharia de software.

Team Topologies: Organizing Business and Technology Teams for Fast Flow

A terminologia que adotamos aqui foi sugerida, primeiro, nesse excelente livro.

Acessar livro

O primeiro tipo de equipe, identificável como stream-aligned teams, é aquele que comprometido de atender as demandas do negócio. Em organizações saudáveis, equipes desse tipo são as mais numerosas. Aliás, todos os outros tipos de equipes devem ter, como objetivo primário, reduzir a carga cognitiva para as equipes stream-aligned. O foco é minimizar o lead-time, custos e riscos.

O segundo tipo de equipe, identificável como complicated-subsystem teams, cumpre a expectativa de desenvolver as partes mais complicadas dos sistemas. Geralmente, são formados por especialistas técnicos, que, através da equalização das unidades de distribuição e de reuso, diminuem a fricção para os equipes stream-aligned sem intervenção direta.

Deployment/Reuse Equivalence Principle

Código não deveria ser reutilizado copiando-o de uma trecho e colando-o em outra. Afinal, se o autor original corrigir algum bug no código original ou adapta-lo para atender alguma nova demanda, há riscos de inconsistência. Seria necessário, sempre, descobrir o que mudou, para, então, alterar as cópias.

A melhor alternativa é fazer com que código que deve ser reutilizado através de biblioteca ou blocos de expansão.

O terceiro tipo de equipe, identificável como platform teams, é aquele que atende os requisitos não-funcionais e aspectos operacionais, garantindo a autonomia para os equipes stream-aligned façam entregas ponta-a-ponta.

Finalmente, o quarto tipo de equipe, identificável como enablers, é aquele que cumpre a expectativa de dar consultoria em padrões e práticas para os demais. Geralmente, essas equipes operam em forma de “colegiado”, infiltrados no dia-a-dia das outras equipes, de forma temporária.

Modos de interação

Havendo diversas equipes em uma organização, é fundamental buscar maneiras eficientes para que as interações aconteçam de maneira assertiva. Generalizando, temos entregas as-a-service, por colaboração ou facilitação.

Equipes platform geralmente atendem equipes stream-aligned e complex-subsystem fornecendo facilidades em modalidade as-a-service, ou seja, com ênfase em reuso e baixa customização, tendo trabalho facilitado – ou seja, com orientação direta – recebida de times enablers.

Equipes complicated-subsystem atendem times stream-aligned fornecendo facilidades em modalidade as-a-service ou através de colaboração para o desenvolvimento de soluções customizadas. Essas equipes também têm trabalho facilitado por times enablers e consomem serviços de times platform.

Equipes enablers atendem todas as demais equipes da organização através de facilitação. Eventualmente, colaboram para formação de capabilities muito específicas. Raramente demandam das demais equipes.

Equipes stream-aligned, idealmente, não atendem outras equipes de engenharia. Em contrapartida, são suportadas por todas as demais equipes.

Métricas! Métricas!

A organização das equipes tem impacto direto nas quatro métricas fundamentais: development lead-time, frequência de deploy, MTTR e taxa de falhas.

Garantir que cada equipe tenha como atribuição apenas um tipo de expectativa colabora para a assertividade e, consequentemente, para redução na taxa de falhas.
0
Considerações?x

De maneira mais específica, equipes platform e enablers garantem a adoção das melhores práticas, com facilidades, ajudando a reduzir o development lead-time, aumentar a frequência de deploy e melhorar o MTTR. Equipes complicated-subsystem também ajudam a reduzir drasticamente a taxa de falhas.
0
Considerações?x

Finalmente, a formação de times stream-aligned independentes habilitam a redução do development lead-time.
0
Consideraçõesx

Para pensar…

Desenvolver software é muito mais sobre achar formas efetivas para pessoas trabalharem juntas, atingindo o máximo de potencial, do que sobre tecnologias.

Compartilhe este capítulo:

Compartilhe:

Comentários

Participe da construção deste capítulo deixando seu comentário:

Inscrever-se
Notify of
guest
0 Comentários
Feedbacks interativos
Ver todos os comentários

Fundador e CEO da EximiaCo, atua como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

Consultoria e Assessoria em

Engenharia de Software

Adoção de práticas, políticas e ferramentas para o desenvolvimento de software.

ElemarJúnior

Fundador e CEO da EximiaCo, atua como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

Podcast

Arquitetura de Software Online

55 51 9 9942 0609  |  me@elemarjr.com

+55 51 99942-0609 |  contato@eximia.co

+55 51 99942-0609  contato@eximia.co

0
Quero saber a sua opinião, deixe seu comentáriox
()
x