O papel de um gerente de desenvolvimento pode ser estressante, pois é
a pessoa que está sempre no meio de um confronto, sendo puxado em
direções diferentes pela gerência, clientes, vendas, desenvolvedores e
outros. Se está fazendo bem o trabalho, ninguém percebe: as coisas
funcionam de forma fluente, o trabalho é feito sem drama e todos têm o
que precisam. Mas se as coisas dão errado, não importa qual a causa, a
culpa é do gerente de desenvolvimento.
O primeiro passo e o segredo para ser bem sucedido como um gerente de
desenvolvimento está em gerir as expectativas e fazer com que todos
entendam bem suas funções. Tanto o gerente como seus colegas de
trabalho, precisam estar em sintonia.
Tenho visto anúncios de emprego em que era necessário profundo
conhecimento de vários número de linguagens de programação e ambientes,
outros exigiam a certificação PMP. E por aí vai. Embora concorde que o
papel do gerente de desenvolvimento é nebuloso, ofertas de emprego como
as citadas dão a sensação de que as empresas não refletiram ainda sobre o
papel. Essa é uma fórmula que tende ao fracasso, tanto para a empresa
como para o contratado, sob essas condições.
A principal responsabilidade é fazer com que um produto seja lançado.
O objetivo é apresentar resultados para o cliente ou mercado, além de
fazer tudo o que for necessário para alcançá-los. Para atingir esse
objetivo, é necessário ter certeza de que a equipe de desenvolvimento é
capaz de desempenhar bem o seu papel, e isso significa garantir que
tenha metas claras, tanto a curto como a longo prazo, e remover
impedimentos. A partir do escopo inicial do projeto, até a implantação
do produto, cada etapa é de responsabilidade do gerente de
desenvolvimento, que pode, e deve, delegar, mas sempre verificando se as
coisas estão sendo realizadas como se deve e estando pronto para
ajudar.
Escopo de projeto
Como gerente de desenvolvimento, é necessário saber como avaliar o
potencial de uma oportunidade ou de uma iniciativa em um projeto.
Dependendo da organização e de como se trabalha com as equipes, isso
pode ser uma parte importante do trabalho. Se o gerente trabalha com
projetos terceirizados, então é de sua responsabilidade responder a uma
RFP (Solicitação de Proposta), preenchê-la com as entregas, prazos,
orçamento etc. Mesmo que só se vá lidar com projetos internos, sem um
sistema formal de documentação, deve-se adquirir o hábito de escrever um
documento de escopo para cada projeto. Além disso, se está trabalhando
com métodos ágeis, o documento de escopo precisa ser vivo, mantido e
atualizado de acordo com o progresso do projeto.
Projetos corriqueiros
Projetos corriqueiros fazem parte do trabalho, mas merecem um
parágrafo à parte. Já ouvi que esses projetos do dia-a-dia não precisam
de orçamento e prazo específicos. É um erro pensar assim, pois podem
podem desviar a atenção e o trabalho da equipe, fazendo com que se perca
tempo desnecessário e não contabilizado. Todo projeto tem pelo menos um
custo interno e uma entrega. É necessário ser capaz de negociar com os
envolvidos, em tudo o que for empreender.
Gerência de relacionamentos
Lembre-se que o gerente de desenvolvimento é a pessoa que está no
"meio de campo de batalha" e todas as falhas recairão sobre este papel,
mesmo que a causa esteja além de seu controle. Manter um bom
relacionamento com quem está envolvido é crucial.
É também importante que o gerente de desenvolvimento conheça o seu
chefe imediato e o chefe do seu chefe, além dos que estão no mesmo
nível. Conversar com os envolvidos sobre os projetos que gerencia é
importante; e é também fundamental certificar-se que recebam
atualizações regulares sobre a situação do projeto.
Outra pessoa importante para manter próxima é a que faz o
relacionamento com o cliente; ela pode gerenciar as expectativas e lidar
com reclamações. Por outro lado, se essa pessoa não está do lado do
gerente de desenvolvimento, pode prejudicá-lo, fazendo promessas aos
clientes sem o devido alinhamento, enviando relatórios de bugs
desnecessários, questionando sobre cronogramas não-realistas, entre
outras possibilidades.
Conheça a equipe. Verifique quanto tempo estão trabalhando na
empresa. Quais são os seus pontos fortes e fracos? Quem trabalha bem com
quem? São muito ocupados? O gerente de desenvolvimento precisa manter o
controle de pequenas coisas como aniversários, tempo de empresa, entre
outros. Reconhecer essas pequenas colabora para criar um ambiente de
comunidade.
O gerente de desenvolvimento também precisa certificar-se de que a
gestão saiba no que está trabalhando e possa ver o seu progresso. Isso é
fundamental para mantê-los satisfeitos. Comunicação e visibilidade são
fundamentais nesse trabalho. Mantenha bons programas, quadros de avisos,
quadros brancos e qualquer outra coisa necessária para mantê-los
atualizados.
Se os participantes entenderem os desafios que a equipe está
enfrentando, estarão menos propensos a terem uma expectativa irreal.
Alguns gestores, entretanto, nunca vão entender porque algumas coisas
não funcionam. Nesses casos, pode ser a hora de começar a procurar outro
emprego.
Planejamento de projeto
A não ser que se esteja trabalhando em um grande projeto, geralmente
não é necessário uma função separada para um gerente de projeto. Para
projetos pequenos e médios, que usam métodos ágeis, é possível ao
gerente de desenvolvimento assumir o papel e as responsabilidades de um
gerente de projetos. No entanto, há um conflito de interesses entre o
gerente de desenvolvimento e gerente de projeto, quando coexistem.
O gerente de desenvolvimento trabalha a fim de fazer tudo o mais
rápido possível, enquanto que o trabalho do gerente de projetos é dizer o
que pode ser feito e quando. É o equilíbrio entre estes dois pontos de
vista que tem que prevalecer. Se o projeto for grande o suficiente para
comportar um gerente de projeto experiente ou um Scrum Master, o gerente
de desenvolvimento não deve assumir esse papel sozinho. No entanto, uma
coisa que se deve fazer, sendo o modelo Cascata ou Agile, é
certificar-se de que o plano do projeto é um documento vivo,
continuamente atualizado.
Controle do processo
Essa é outra parte crítica do trabalho. Independentemente de utilizar
metodologias ágeis ou cascata, manter o processo nos eixos é
importante. Lembre-se que sua principal prioridade é evitar qualquer
coisa que afete as entregas.
Qual é o seu processo de desenvolvimento? Qual o nível de
formalidade? Se alguém o chama de "Agile", verifique se é realmente ágil
(sugiro manter um cartaz do Manifesto Ágil como lembrete para que todos
sigam os princípios). Como o seu processo pode ser melhorado?
Delegar é bom, mas é necessário supervisão. Grandes ideias muitas
vezes falham na execução porque não foi verificado se as tarefas foram
feitas corretamente. Conduzi alguns projetos que tinham todas as peças
certas no lugar, mas em que a execução foi mal feita e as coisas
desandaram.
Finalmente, é preciso informar a situação do projeto para os
envolvidos e esses relatórios devem se basear em alguns indicadores
fortes. Deve haver alguma forma de medir o progresso e consolidá-lo de
uma maneira clara para todos os interessados. Esses relatórios podem ser
diários, semanais ou conforme a necessidade. Esteja ciente do perfil
dos envolvidos que leem os relatórios e o nível de detalhe que esperam,
segmentando os seus relatórios no nível adequado. Acima de tudo, garanta
que seus relatórios sejam claros, precisos e de fácil leitura. Isso vai
diminuir o número de más interpretações, mas não eliminá-las. Esteja
pronto para esclarecer e explicar seus relatórios.
Tecnologia
Essa é uma área que eu vejo sempre nas ofertas de emprego. Algumas
empresas estão procurando gerentes de desenvolvimento com conhecimento
profundo em áreas específicas. O gerente de desenvolvimento não é um
gênio da tecnologia. Deixe isso para desenvolvedores sênior e líderes técnicos.
O gerente de desenvolvimento precisa estar confortável com as novas
tecnologias que estão por vir, mas não o deixe se tornar o perito; isso
será um desperdício de tempo e acabará desviando a atenção de outras
tarefas mais importantes.
O gerente de desenvolvimento precisa saber o suficiente sobre as
ferramentas que a equipe está utilizando para saber se estão usando-as
de forma eficiente, e quando há lacunas no conhecimento da equipe. Por
mais tentador que seja, é necessário delegar essa função para outros
especialistas na equipe.
Desenvolvimento
Mais uma vez, essa é uma área que tem que ser confortável para o
gerente de desenvolvimento, mas não ser uma especialidade de sua função.
O gerente de desenvolvimento precisa ser capaz de dizer qual código é
bom e qual é ruim, mas é necessário também confiar na equipe. Quando
momentos de crise surgirem, prepara-se para "mergulhar" e assumir
algumas tarefas de desenvolvimento. Mas é necessário manter a visão do
todo em mente e se concentrar em entregar o projeto. Não se pode dar o
luxo de passar dias exclusivamente na programação e esquecer o resto do
trabalho.
Testes automatizados
Separo testes automatizados da garantia de qualidade, pois os vejo
como funções separadas. Geralmente, esses testes são atribuídos aos
membros da equipe de controle de qualidade. Testes automatizados incluem
testes unitários e scripts de teste, em que a garantia da qualidade é
olhar manualmente o sistema; não apenas encontrar bugs, mas também
verificar uma boa usabilidade, desempenho e questões de design.
Como gerente de desenvolvimento, saber qual é a cobertura de testes
do código é fundamental. Quanto da base de código é coberta por testes
de unidade, quantos desses são automatizados? Esses valores estão
aumentando ou diminuindo? Um bom líder de QA será capaz de lhe dar esses
números, mas é importante ter um sistema que, pelo menos, estime esse
valor. Não prestar atenção na cobertura de código pode resultar em
código com erros em produção.
Garantia de qualidade
Inconsistências, especificações mal feitas, queda de desempenho,
entre outros, são alguns dos problemas que devem ser tratados pela
Garantia de Qualidade (QA). É o trabalho do gerente de desenvolvimento
garantir que esses testes sejam feitos. Manter a equipe de controle de
qualidade junto ao desenvolvimento é importante para que saibam o que
está acontecendo. Abro tarefas de QA para cada equipe de desenvolvimento
e asseguro que sejam atribuídas ao mesmo tempo que as tarefas de
desenvolvimento. Dessa forma, o desenvolvedor pode escrever notas nos
testes em um local separado dos comentários de código.
Testes de QA podem falhar por uma série de razões, como: mudanças de
código; especificações não compreendidas; e erros de rede ou de sistema.
Para chegar à causa raiz da falha é necessário aproximar os
desenvolvedores da equipe de QA. Isso não é tão difícil se a equipe de
QA fizer parte da equipe de desenvolvimento. Por outro lado, se a equipe
de QA fica em uma estrutura separada, até com um gerente próprio, será
necessário coordenar essa aproximação.
Gerenciamento de releases
Dependendo da complexidade do seu projeto, implantar uma release em
produção pode ser um projeto em si. Em um sistema simples, isso poderia
ser tão fácil quanto fazer uma compilação, mas em um sistema complexo
pode exigir a construção de uma série de pacotes (executáveis, arquivos
JAR, EXE etc.), com scripts de banco de dados e até mesmo outras
aplicações. Certificar-se de que há a versão correta de cada componente
pode ser difícil e demorado. Em um projeto muito complexo, pode haver um
"build master" designado para acompanhar as versões.
Também será necessário colocar a versão da release no código;
preparar e testar os arquivos de instalação; escrever e distribuir notas
de implantação e assegurar quem tem direito de acesso à nova versão.
Implantação
A implantação de um release é muitas vezes vista como parte do
gerenciamento de release, mas deve ser tratado como projeto separado.
Preparar o site para receber uma nova versão de release é um projeto
em si. Quem são os seus contatos? Esses contatos estão prontos para a
nova versão de release e foram informados sobre as mudanças? Qual é o
procedimento para relatar problemas? Quanto tempo dura o período Beta?
Você está pronto para reverter a implantação com o mínimo de
inatividade? Uma vez que a versão se torna Beta, os clientes estão
prontos? Todas essas perguntas acima têm de ser respondidas para cada
cliente antes que o release seja lançado.
Funções administrativas
Esta é uma parte do trabalho que muitos odeiam, mas é de
responsabilidade do gerente de desenvolvimento. Orçamentos, contratação e
demissão de profissionais, competição por recursos e espaço, elaboração
de relatórios e contabilidade são exemplos de decisões tomadas.
Integrantes da equipe
Os integrantes da equipe fazem parte da função administrativa, mas
merecem um tópico à parte. Seria ideal se todos os membros da equipe
estivessem nos papéis corretos, o que é difícil, mas isso não significa
que não se deve se esforçar para isso. "Encaixar" cada um nos níveis
corretos pode ser complicado. Uma grande equipe custará mais e pode ser
menos eficaz que uma equipe menor, mas não se deve permitir que todos
trabalhem com 100% da sua capacidade. O gerente de desenvolvimento
precisa permitir uma folga para que a equipe possa responder a
emergências, sem colocar em risco os projetos.
Não se preocupe se alguém precisar de dias de folga para assuntos
pessoais ou por outras razões. Existe uma série de estudos que mostram
que as equipes com altas taxas de absenteísmo (dentro de limites
razoáveis), são mais eficazes do que as equipes que nunca faltam. Isso
acontece, entre outros motivos, pois os membros da equipe são obrigados a
aprender diferentes partes do sistema quando os que normalmente são
responsáveis não estão lá. Portanto, permitir que os membros se
ausentem da empresa por motivos pessoais pode fazer com que a sua equipe
se torne mais eficaz.
O desligamento de funcionários é algo que acontece e pode ser algo
positivo. Eu digo a jovens desenvolvedores que devem mudar de empresa a
cada 5 anos. Isso lhes dá uma exposição a ambientes e tecnologias
diferentes, bem como a processos distintos. Isso é algo que procuro
quando analiso currículos, então também espero que os integrantes da
minha equipe façam o mesmo. O gerente de desenvolvimento precisa
planejar bem, não pode implorar a alguém para ficar porque é o único que
conhece uma determinada parte do projeto ou sistema. Certifique-se de
que a informação e o conhecimento foram disseminados e não está
concentrado em um ou dois indivíduos-chave.
No final, todo gerente de desenvolvimento passará por uma experiência
de ter que desligar alguém de sua equipe. Se o motivo for relacionado a
questões financeiras (redução da equipe), ou até mesmo devido a baixo
desempenho, é preciso estar preparado e conhecer as políticas e
procedimentos da empresa.
Conclusões
Para mim, o melhor exemplo de como ser um gerente de desenvolvimento
vem da indústria de manufatura, especialmente de uma história que ouvi
sobre os sapatos Bata.
Em sua fábrica original, hoje na República Tcheca, Thomaz Bata mantinha
um escritório em um elevador de carga. Sempre que havia um problema de
produção em determinado andar, Bata podia transferir seu escritório
inteiro para lá e microgerenciar a situação até que o problema fosse
resolvido. Depois, podia descer para o andar principal e gerir a
empresa, sem a distração do chão de fábrica.
Microgerencie quando necessário, mas deixe o caminho aberto para que a
equipe trabalhe o resto do tempo, pois existem muitas outras tarefas
para serem realizadas.
http://www.infoq.com/br/articles/development-manager-role?goback=.gde_145755_member_261442543#!
Nenhum comentário:
Postar um comentário