Tchau, tchau gerente, agora sou Scrum!

Já que Scrum define apenas três papéis: Scrum Master, Product Owner e Time, onde é que fica o papel do Gerente de Desenvolvimento? Será que é hora de dizer adeus?

Contextualizando

Há pouco tempo assumi uma posição na Locaweb como gerente da equipe de desenvolvimento responsável pelos sistemas centrais da empresa. É uma equipe relativamente grande, dividida em três times de multi-talentosos desenvolvedores, um para cada domínio de negócio que lidamos: Provisionamento, Cobrança e Atendimento; além de dois sysadmins que dão suporte a estes times em tempo integral.

Os times atualmente estão organizados como times de Scrum tipicos, com os tais multi-talentosos desenvolvedores, um Scrum Master e um Product Owner — que no nosso caso, é um gerente de produtos que trabalhar fortemente conosco, extremamente comprometido com os interesses de negócio da empresa.

Desde então, comecei a buscar me interar um pouco mais sobre assuntos de gerenciamento e liderança ao melhor espírito ágil, com a preocupação de não me tornar aquele tipo de gerente que simplesmente “delarga” e vive alienado; ou pior ainda, aquele que comanda e controla o tempo todo, e queno final das contas, mais caroça e atrapalha do que ajuda.

Novo release: Gerente 2.0

Bem, além de conversar com vários amigos — muito mais experiêntes do que eu nesse papel —, também naveguei bastante pela Web e acabei chegando num artigo muito interessante de Pete Deemer, da Scrum Training Institute, que tem me ajudado bastante. Se você também tem interesse no assunto, acho que vale a pena ler.

Pete sugere no artigo, de maneira bem coerente, 14 atividades de um gerente de desenvolvimento. Vamos dar uma olhada no resumão delas:

1- Ajuda a remover impedimentos que o time não tem condições de resolver por si só

Enquanto o Scrum Master remove impedimentos hora-a-hora, dia-a-dia, coisas referentes ao projeto, o gerente precisará focar seus esforços em resolver impedimentos mais sistemátivos, mais corporativo, digamos assim.

Estes impedimentos, frequentemente, são os mais desagradáveis; e que requerem alguma influência, alguma autoridade, para lidar com eles de maneira efetiva.

2- Dá ao time conselhos e sugestões sobre dificuldades técnicas que aparecem

Gerentes deveriam estar disponíveis para dar conselhos e assitência técnica ao time sempre que solicitado.

Nota minha: é que claro que, volta e meia, o gerente vai precisar ir a reuniões estratégicas, corporativas — ou seja lá como chamemos em nossa empresa —, e não poderá atender às solicitações do time de imediato. É preciso tratar isso de maneira bem madura com o time, colocando na mesa as limitações impostas por suas outras atividades e buscando uma maneira de mitigar isso, para que nem o time fique na mão quando precisar, nem o gerente seja crucificado quando não estiver à pronta disposição.

3- Regularmente conversa com os membros do time, um por um, para dar coaching e mentoring

Gerentes deveriam gastar tempo com os membros do time, individualmente, com certa frequência (que cada um deve achar a melhor para si), para dar coaching e mentoring. Veja: não é para pedir status report; é para ensinar, ajudar, guiar, etc, menos cobrar.

Alguns gerentes gostam de fazer isso pareando e escrevendo código junto.

4- Dá sugestões sobre como fazer features melhores

Estas sugestões são endereçadas diretamente ao Product Owner, geralmente, durante a Sprint Review.

Nota minha: o ideal é que isso aconteça sempre, mantendo o máximo de proximidade possível com o Product Owner. No meu caso, por exemplo, sento de frente para o gerente de produtos de sistemas centrais e bato-papo com ele o tempo todo. Ou seja, se tenho algo a sugerir, não preciso esperar a cerimonia de revisão.

5- Mantem-se pari passu do desenvolvimento de ferramentas, tecnologias e técnicas que o time está usando

Esta é uma atividade muito importante e frequentente negligenciada pelos gerentes. Gerentes não podem ficar congelados no tempo. Mesmo porque, a atividade 2 é sobre estar apto a dar conselhos técnicos ao time.

Nota minha: não tem coisa mais irritante do que um gerente que não entende nada do trabalho que você está fazendo, dando palpites furados, e ainda querendo que você explique para ele algo que ele não tem um mínimo de base técnica e conceitual para entender.

6- Planeja treinamento e outros skills de desenvolvimento para os membros do time

Gerentes deveriam pensar cuidadosamente sobre onde o time poderia usar seu skill; e também, cláro, que capacidades o time precisará ter quando for desenvolver determinados itens do Product Backlog.

7- Mantem-se atualizado sobre as novidades e evoluções da indústria

Novamente, uma atividade importante, mas frequentemente neglienciada. Sem ela, a atividade 2 fica fortemente comprometida.

8- Antecipa ferramentas, skills e futuras necessidades

Outra atividade importante, que tem tudo a ver com a atividade 6, e que é frequentemente negligenciada. Converse com seu time a respeito, peça sugestões.

9- Planeja e gerencia orçamento e caixa

Outra vez, algo muito importante, mas muito negligenciado por diversos gerentes.

Nota minha: qual foi a última vez que você colocou no seu orçamento um din-din para cursos, eventos, livros, e outras coisas que melhoram o skill do seu time? Ou você é do tipo que não se preocupa com isso e que, pior ainda, até acha ruim que seu time vá a eventos, faça cursos ou leia livros no horário de trabalho?

10- Dá sugestões de que features o time deveria construir

Vale o mesmo comentário do item 4, não vale? Acho que sim, tem tudo a ver.

11- Faz avalição de performance e dá feedback aos membros do time

Isso é algo necessário em muitas empresas, apesar de bastante subjetivo. Mas o ponto aqui é que gerentes deveriam basear suas avaliações em suas próprias observações, bem como no feedback de outros membros de time.

12- Faz planejamento e desenvolvimento de carreira com os membros do time

Oportunidade de carreira é uma das mais significantes formas de compensar pessoas por seu trabalho. Além de din-din, é lógico!

13- Recruta, entrevista e contrata novos membros para o time

Uma das melhores (mas às vezes, aterrorizantes!) ações de gerenciamento é tomar decisões de contratação. Isso porque boas contratações dão lucro desde o primeiro dia, enquanto que más contratações são uma “taxa” invisivel na habilidade do time entregar valor de negócio.

14- Remove membros que não são capazes de fazer um bom trabalho no time

Se mesmo depois de extenso coaching um membro do time não é capaz de contribuir, de trabalhar harmoniosamente com os outros membros do time, ou de fazer seu trabalho na qualidade esperada, ele precisa ser removido do time, ou mesmo da empresa, rapidamente. Tipicamente, gerentes precisam guiar esse processo de maneira coordenada com o RH da empresa.

Nota minha: não deixe a moral do seu time e o dinheiro da sua empresa ir para o ralo. Cuidado! Há uma linha muito tênue entre “vou dar mais uma chance” e a omissão. Não tenha medo de fazer uma demissão, mesmo que tenha sido você que fez a má contratação. Contratações são quase que como loterias! Na verdade, quem fez a má contratação é o que menos importa; o que realmente importa é a performance e moral do time, que no final das contas, se traduz em mais dinheiro para a empresa.

Conclusão

O papel do gerente de desenvolvimento 2.0, como diz esse artigo de Pete Deemer, traz um mix de habilidades de liderança técnica e de gerenciamento de pessoas — pelo amor de Deus, não chame as pessoas de recursos!

A mim faz todo sentido; e está bem alinhado com as atribuições que recebi, quando contratado pela Locaweb. Aliás, acho que vale citar que, uma das coisas que Pete diz no artigo é que esse “novo” papel do gerente de desenvolviemnto precisa ter uma bênção formal do diretor de direitor TI, ou alguém com poderes equivalentes.

Mas e você, o que acha? Deixe um comentário…

Geração e build de projetos Erlang/OTP

OK. Hora do jabá…

Há alguns meses, quando comecei a mexer mais com Erlang/OTP, senti a necessidade de ter uma ferramenta que gerasse a estrutura dos projetos, bem como stubs dos módulos necessários. Não encontrei nenhuma que fosse realmente simples. O que fiz? Cocei minha própria coceira, crie o projeto otp_kickoff.

Agora, de saco cheio desconfortável de usar Make para automatizar tarefas de build, resolvi coçar minha própria coceira novamente, crie o projeto ebuilder.

Se você também está mexendo com Erlang/OTP, sugiro que dê uma olhada nestes projetos, quem sabe eles também não facilitam sua vida, ahmmm?

A Rails Rumble foi demais!

Se eu tivesse que descrever a minha impressão sobre a Rails Rumble em uma frase apenas, certamente, eu usaria o título deste post, porque pra mim, a Rails Rumble foi demais mesmo.

Não ganhamos a competição, mas ganhamos muito participando da competição. Aprendemos muita coisa, fizemos amigos, nos divertimos bastante e fizemos umas das coisas que mais gostamos de fazer: programamos pra caramba! — dormi aproximadamente 5 horas durante as 48 horas de competição.

Meus sinceros agradecimentos à galera do meu time: Anderson Leite (com quem pareei bastante), Rafael (que foi quem teve a brilhante idéia do projeto) e Douglas (o melhor sysadmin que eu conheço). Foi muito bom fazer parte do time com vocês.

Nosso projeto

Bem, o resultado final do nosso projeto é este: whatannoysus.com. Não é tudo que nós gostaríamos que fosse, mas com certeza, já é um ótimo começo — e vamos dar continuidade.

Nós o construímos em menos de 48 horas, usando Ruby on Rails, Cucumber e MySQL; e o botamos para rodar num Ubuntu Server com Phusion Passenger e Nginx.

Patrocínio

Vida longa à Gonow! 🙂

A Gonow nos tratou muito bem, com tudo do bom e do melhor. Comida, camiseta Rails Rumble, hotel (que eu nem fui lá conhecer) e uma infra-estrutura de primeira.

Muito obrigado mesmo, a todos da Gonow e, se precisarem de alguma coisa, é nóiz!

Poder aos pares!

Tenho que concordar com o Yoshima, parear traz um ganho incrível no desenvolvimento. Ainda tem muita gente que acha que parear é reduzir o trabalho pela metada, afinal, são dois em um computador. Mas a real é que boa parte do nosso trabalho como programadores é pensar e conceber soluções que, em última instância, codificamos. E é aí que entra o ganho da programação em parte: duas cabeças pensam melhor do que uma — e quatro olhos acham bugs mais rápido também.

Outros relatos?

É isso que eu [resumidamente] tinha a dizer. Se você quiser saber um pouco mais, conhecer outros relatos, veja os posts do Anderson Leite e do Rodrigo Yoshima. E se houver algo que eu não mencionei e que você gostariam de saber, sinta-se à vontade para deixar um comentário.

Vou ficando por aqui e espero poder rever toda a galera — que foi muito legal conhecer — na Rails Summit.

Abraço!

Quer saber onde será seu próximo trabalho?

Então não deixe de visitar…

O site é recém-nascido, mas já tem uns recursos bem legais, como sistema de pesquisa por palavras-chave, núvem de tags e entre outros. Vale a pena conferir e acompanhar sua evolução — e oportunidades de bons trabalhos.

Mais uma iniciativa bem interessante da Caelum. 🙂

Campus Party 2009: Scrum Agile Development

Agora a pouco o Antonio Carlos, gerente de tecnologia do Yahoo!, postou os slides de sua apresentação na Campus Party 2009 sobre desenvolvimento ágil de software com Scrum.

Resolvi postar aqui também, porque achei bem interessante para quem quer ter uma visão introdutória sobre o assunto.

Divirtam-se!

Hammm? Declínio e queda do Agile?

Ontem foi publicado no InfoQ Brasil a tradução de um post bem legal de Chris Sims entitulado James Shore: The Decline and Fall of Agile. O texto começa falando sobre o cenário atual dos novos times ágeis e como isso é decadente se comparado ao verdadeiro espírito ágil:

James Shore declarou que agile está em declínio. Ele cita como por exemplo os vários times fazendo ‘sprints’ e stand-up meetings, sem adotar nenhuma das práticas técnicas necessárias para produzir software de alta qualidade no longo prazo. Em sua estimativa, este fato tem levado milhares de times Scrum praticar métodos Ágeis tão pobremente que eles quase certamente fracassarão, e provavelmente levarão o movimento ágil com eles.

Esse é um bom ponto de partida para que novos times ágeis façam uma reflexão sobre o quão ágeis realmente são.

Aqui na CVC Turismo estamos praticando desenvolvimento ágil há pelo menos um ano e meio, e uma das coisas que aprendemos durante esse período foi que, manter o espírito ágil realmente vivo em nós, é mais importante do que seguir “regras de caixinha”. Afinal de contas:

Indivíduos e interações são mais importantes que processos e ferramentas!

Então, muito embora Scrum seja a nossa base, não é e nem jamais será o nosso limite. Além de Scrum, há também outras práticas ágeis que estão presentes em nosso dia a dia, tais como:

Integração Contínua (mesmo antes de adotarmos Scrum);
– Code review;
Refactoring;
Código coletivo;
– E testes, testes e mais testes!

Ainda temos muito que aprender, crescer e amadurecer – mas acreditamos que estamos no caminho certo.

E você, o que tem a dizer sobre seu ambiente de trabalho? O quão ágil ele realmente é?

Reciclagem, uma missão para o Scrum Master

Uma tendência natural do ser humano é aos poucos ir deixando de lado os detalhes. Isso acontece em quase tudo na nossa vida. Basta você parar para pensar um pouquinho e vai ver que já fez isso inumeras vezes – no seu trabalho, nos seus estudos, na sua vida familiar. Todas as vezes que você se sente muito confortável e sabedor de algo, acaba se esquecendo de algum detalhe. E são nesses momentos que você comete os erros mais banais da sua vida.

Todos já fomos somos vítimas desse mal. Mas todos temos também a solução ao nosso alcance…

Reciclagem!!!

Todo processo e todo conhecimento precisa de reciclagem periódica. Só assim conseguimos nos manter atentos aos detalhes.

Tudo bem, mas o que isso tem a ver com o Scrum Master?

O Scrum Master deve ser o guardião dos valores e das práticas do Scrum na equipe. É dele a responsabilidade de disseminar esses valores e práticas e promover a sua reciclagem de tempos em tempos, tanto para o Time quando para o Product Owner. Isso mantém o Scrum não apenas vivo, mas evoluído na equipe.

Com isso, a toda equipe [e os projetos] só tem a ganhar. Porque nem o Time, nem o Product Owner, nem o próprio Scrum Master, se esquecerão de coisas que parecem apenas meros detalhes – mas que fazem a diferença quando observadas [e/ou aplicadas] adequadamente.

Por isso, Scrum Master, fica a você a perguntas: O que você tem feito para promover a reciclagem da sua equipe?

Afinal, ser Scrum Master é ser facilitador…