No meu artigo sobre foco ou diversificação comentei sobre essas duas estratégias que podem ser usadas na gestão de produtos de uma empresa e em quais circunstâncias cada uma dessas estratégias é mais apropriada.
Nesse artigo vou falar um pouco sobre como organizar seu time de desenvolvimento de produto a depender da estratégia adotada.
Quando uma empresa opta pela diversificação, a organização dos times tende a ser mais simples. Para cada produto, haverá um único time com engenheiros (de 2 a 8 pessoas, que podem ser back-end ou front-end ou full stack, a depender da necessidade de seu produto), mais um SysAdmin (administrador de sistemas), ou seja, até 9 pessoas na engenharia. Além disso, terá de 1 a 2 pessoas de UX e, por fim, um gestor de produtos. Esse é o core team do produto que comentei no artigo “Criando um produto de sucesso“.
Contudo, mesmo existindo esse ponto positivo, existem outras formas de se trocar boas práticas, sem sacrificar o tempo e a atenção de uma pessoa compartilhada. Por isso, o mais recomendável mesmo é não compartilhar pessoas entre dois produtos. É claro que se você tiver restrições financeiras, essa divisão entre produtos é aceitável, mas procure considerar isso uma situação temporária.
Atenção: compartilhar pessoas entre mais de dois produtos é extremamente desaconselhável. O máximo aceitável de compartilhamento é em dois, e isso já terá um impacto considerável em atenção, produtividade e qualidade.
Outro ponto importante desse tipo de estrutura é a importância de manter uma coesão funcional. Isso pode ser feito por meio de uma liderança funcional, ou de uma auto-organização funcional.
A coesão funcional é importante para garantir que exista consistência entre o trabalho dos times, e que cada um aprenda com as boas práticas do outro. Caso contrário, cada time fará um produto que parecerá não só ser de um time diferente, como também de uma empresa diferente!
Na Locaweb, optamos por manter a coesão por meio de liderança funcional e auto-organização funcional. Temos líderes de UX e de engenharia, e temos auto-organização funcional para front-end e design visual. Isso nos garante uma boa consistência entre os diferentes produtos. Por exemplo, criamos padrões de interação, o Locaweb Style, assim todos os produtos da Locaweb têm um padrão de interação igual. Um cliente do produto E-mail Marketing sabe que, quando for usar o produto Backup, não terá de aprender a interação tudo de novo. O Locaweb Style está disponível como open source.
Como organizar times grandes?
Quando seu produto cresce – quer seja em uma empresa de um único produto, quer seja em uma com um portfólio diversificado –, começam as questões sobre como se organizar. Normalmente, isso demora mais em empresas com portfólio de produtos diversificado, pois, sempre que um determinado time cresce um pouco, existe a vontade de pegar algumas pessoas dele para focar em um novo produto.
Já em uma empresa com foco em um único produto, a necessidade de organizar times grandes acontece bem rápido. Não é difícil imaginar mais de 8 engenheiros disponíveis para trabalhar em um produto e, como vimos anteriormente, cada time de produto deve ter, no máximo, de 6 a 8 engenheiros. Como se organizar com times maiores?
O produto deverá ser quebrado em subsistemas. Estes terão certamente algum tipo de integração e interdependência, mas suas arquiteturas devem ser tal que a interdependência seja mínima para que a camada de integração seja a mais simples possível. Cada time desses precisará de engenheiros, UX, SysAdmin e gestor de produtos. Por se tratar de subsistemas de um mesmo produto, esses times podem eventualmente compartilhar o mesmo gestor de produtos, o mesmo UX e o mesmo SysAdmin. Aqui o compartilhamento é um pouco mais aceitável e pode existir compartilhamento em até mais de 2 subsistemas.
Contudo, é preciso ficar atento para que essas pessoas compartilhadas entre mais de um subsistema não virem gargalos. O ideal é ter pessoas 100% dedicadas a cada um. Nesse cenário ideal, no qual cada membro dos times que cuidam de cada subsistema é 100% dedicado, é muito importante alguém ter uma visão geral para ajudar na coordenação dos trabalhos entre os times. Como mencionado, é importante minimizar a interdependência desses subsistemas, porém, alguma dependência sempre existirá, e isso precisará ser coordenado. Eventualmente, um gestor de gestores de produto pode ser necessário para ajudar nessa coordenação. Idealmente deveríamos ter um gestor de gestores de produto, um gestor de engenharia que acompanha o trabalho de todos os times de engenharia, e um gestor de UX para ajudar na coordenação do trabalho dos designers de UX de cada subsistema.
Assim, um outro time cuida do painel de controle e do webmail do e-mail, e, por fim, mais 4 times cuidam dos subsistemas ligados diretamente à infraestrutura, que são os times de infraestrutura Linux, de Windows, de banco de dados e de e-mail.
Temos dois gestores de produtos para todos esses times: um focado nos subsistemas de hospedagem de sites, outro focado nos subsistemas de e-mail. Temos também dois designers de UX, com a mesma separação de foco, além de um gestor de gestores de produto, um de designers de UX e um dos times de engenharia.
Outro bom exemplo, em uma escala consideravelmente maior, é o Spotify, aplicativo de streaming de música criado na Suécia em 2008, que tem mais de 75 milhões de usuários de acordo com os dados de junho de 2015. A empresa tem mais de 1.500 funcionários, todos dedicados a um único produto, e boa parte deles faz parte do time de desenvolvimento do produto.
Recentemente, eles postaram dois vídeos contando um pouco sobre sua cultura e como eles se organizam. Vale a pena assisti-los! Eles encontram-se em https://vimeo.com/85490944 e em https://vimeo.com/94950270.
Próximo artigo
No próximo artigo vou falar um pouco sobre o papel de gestor de gestores de produto. Stay tuned!