ALM é um meio, não um fim

imageEste post foi motivado por um comentário recente de um cliente – se bem que, na verdade, não é a primeira vez que escuto algo assim.

“Precisamos colocar ALM pra funcionar!”

“Os desenvolvedores vivem arrumando ‘jeitinhos’ para desviar do ALM… Tem algum jeito de garantir que eles vão seguir os processos de ALM que nós definimos?”

“Nossa prioridade agora é o ALM.”

Bom, vamos começar pelo começo. Smile

Parece que é fácil de se esquecer disso, mas seus desenvolvedores são pagos para desenvolver software, não para “usar ALM”. Se colocamos processos e ferramentas acima das pessoas e das interações entre elas, então estamos fazendo errado!

Por mais clichê que isso possa soar, no instante em que começamos a dar mais importância à estrada que ao nosso destino, simplesmente nos esquecemos de onde queremos chegar. Tenho visto isso acontecer com uma frequência cada vez maior. Muitas empresas se esquecem de que o desenvolvedor precisa do mínimo de impedimentos no seu caminho para ser capaz de produzir software de qualidade. Não é por acaso que uma das principais atribuições de um Scrum Master é justamente a de resolver impedimentos.

ALM existe apenas como um meio, um suporte para o time. Seu propósito deve ser apenas ajudar, facilitar o desenvolvimento de software com qualidade. Mais do que “relatórios de produtividade” (que normalmente são apenas uma contagem da quantidade de linhas por hora/dia/check-in, como se isso tivesse qualquer coisa a ver com produtividade) e políticas de check-in para “barrar código sujo”, deveríamos nos preocupar em capacitar nossos times e dar a eles as ferramentas para que possam trabalhar com foco no seu projeto – e que os auxilie a garantir a qualidade de suas entregas.

Lembre-se: Uma boa plataforma de ALM, tal como um bom Scrum Master, deve ser invisível para o time!

Um abraço,
Igor

O que é o treinamento Professional Scrum Developer para mim

imageNesta semana de 04 a 08 de março estou em Chicago fazendo algo que chamam de PSD TTT (Professional Scrum Developer Train The Trainer). É um curso restrito da Scrum.org para formar e selecionar potenciais novos instrutores para o curso de Professional Scrum Developer.

Hoje, depois de voltar do terceiro dia de curso, peguei-me refletindo sobre toda a bagagem de informação que recebi nestes três primeiros dias – e, em especial, sobre o que me trouxe até aqui.

Provavelmente a maioria dos leitores deste blog não deve ter a menor ideia disto, mas já ministro treinamentos há quase 20 anos. Aliás, é bem engraçado lembrar que meus primeiros treinamentos de ferramentas de desenvolvimento foram os cursos de dBASE e Clipper na SOS Computadores em 1994… Smile

O fato é que, apesar de ministrar treinamento há tanto tempo, nunca fui formalmente um instrutor/professor “profissional”. Minha profissão, no sentido estrito da palavra, sempre foi a de programador (que já virou analista programador, desenvolvedor, engenheiro de software… nem sei mais do que chamamos hoje em dia Open-mouthed smile). Lecionar, para mim, sempre foi muito mais uma paixão –  um hobby remunerado  – do que um trabalho, visto que nunca foi minha atividade principal.

Assim, o melhor dos mundos para mim sempre foi juntar minhas duas paixões – desenvolver sistemas e  lecionar – em uma só: treinar pessoas a se tornarem (melhores) desenvolvedores. Certamente foi essa a motivação que me levou a começar a estudar ALM (que, em 2005, ainda chamávamos de SDLC) e TFS. A ideia de compartilhar experiências com as pessoas ao meu redor, dividindo o pouco que eu sei e aprendendo ainda mais no processo de ensinar sempre me fascinou.

Entretanto, quando me tornei efetivamente um consultor de ALM, ajudando times e empresas a melhorar seu ferramental de suporte ao processo de desenvolvimento, ficou óbvio que havia uma peça ausente no quebra-cabeças. Não fazia o menor sentido melhorar o ferramental à disposição do time se eles não sabiam como usa-lo. E não fazia o menor sentido ensiná-los a usar o ferramental se eles não fossem capazes de transcender a ferramenta para chegar ao que realmente interessa: entregar software de qualidade (no sentido mais amplo da palavra qualidade).

Durante todo meu tempo como programador sempre tive o infortúnio de atuar em times disfuncionais. Não quero, com isso, desmerecer as pessoas com quem trabalhei – pelo contrário! Trabalhei com alguns caras realmente brilhantes. Mas talentos individuais não fazem, necessariamente, um bom time. E mesmo um bom time, por sua vez, não consegue ir muito longe se a cultura que o cerca não faz nada além de sufocá-lo.

Foi na busca por alternativas que me deparei com as Práticas Ágeis (ou aquilo que chamamos simplisticamente de Agile). Foi óbvio que essa era a peça que estava faltando. De nada adiantavam os processos e as ferramentas de ALM (que são úteis, claro!) se não dermos a devida atenção às pessoas e as interações entre elas.

Depois dessa epifania, que pode soar até idiota agora mas que estava longe de ser óbvia, ficou claro que de nada adiantaria ajudar meus clientes a adotar o ferramental de ALM sem trazer junto as práticas de engenharia de software do XP (Extreme Programming) e as práticas de gestão de projetos do Scrum para acabar com os (aparentemente insolúveis) problemas de desenvolvimento de projetos/produtos complexos. Ou seja, o “mundo perfeito” seria um time capaz de utilizar as melhores práticas de engenharia de software, amparadas por valores fundamentais como Transparência, Inspeção e Adaptação (tendo por trás o devido suporte do ferramental que diminui o trabalho braçal e garante a consistência e previsibilidade do resultado) para entregar valor de maneira contínua a seus clientes.

Como resolver isso, então? Como colocar um time no caminho correto, vendo seus projetos de maneira mais ampla e não apenas focando num pedaço da solução?

A resposta à essa pergunta para mim, hoje, é:

“O curso Professional Scrum Developer é o primeiro, e com isso talvez o mais importante, passo na direção correta.”

Extraído do site da Scrum.org, o curso de Professional Scrum Developer é:

The Professional Scrum Developer course teaches students how to work in a team, using modern software engineering practices and your specific technology platform to develop an increment of potentially releasable functionality. All of this is done as iterative incremental development within the Scrum framework.

O curso Professional Developer Scrum ensina os alunos a trabalhar em equipe, usando práticas modernas de engenharia de software e sua plataforma de tecnologia específica para desenvolver um incremento de funcionalidade potencialmente entregável. Tudo isso é feito como desenvolvimento iterativo incremental dentro do framework Scrum.

Note que a proposta do curso é mostrar tudo de maneira integrada, exatamente como deveria acontecer na vida real: as práticas de engenharia (como TDD, CI, Refatoração, ATDD…) suportadas pelo ferramental (que no caso do PSD.NET é o Visual Studio e o TFS) e guiados pelo Scrum.

Estar aqui em Chicago, participando deste TTT, é uma oportunidade única para mim de poder também ministrar esse treinamento no Brasil (hoje só o Giovanni Bassi o tem ministrado).

Dividir um pouco das minhas experiências, poder aprender ainda mais com as experiências dos alunos – e ainda por cima poder ajudar essas pessoas a melhorar seu dia-a-dia em suas empresas para entregar mais software de qualidade e principalmente melhorar sua qualidade de vida. Não vejo a hora!!!

Um abraço,
Igor