As Três Perguntas 3

Posted by caike on May 01, 2009

Antes de dar início a qualquer projeto, é necessário eleger um responsável pela priorização dos problemas e avaliação das soluções apresentadas pelo time. O Scrum, por exemplo, chama este papel de Product Owner. Independente do nome, esta é a pessoa que irá aprovar ou não o trabalho da equipe ao final de cada iteração.

Ao meu ver, é essencial que exista uma única figura representativa. Dependendo do cenário, esta figura pode ser um grupo de pessoas. O mais importante é que elas sejam capazes de chegar a um consenso e opinar como se fossem uma pessoa só. Quem cobra é quem pede. Já participei de projetos onde Fulano pediu/priorizou no Planning e Ciclano avaliou no Review. Não dá certo.

É preciso deixar claro para todos os envolvidos a razão pela qual o esforço está sendo feito. Um ano de atraso em um projeto não deveria pegar ninguém de surpresa, pois seu atraso na verdade aconteceu um dia de cada vez. A criação de espectativas e um ciclo de entregas obedecendo a prazos curtos são formas de evitar isto. Alguns investem tempo, outros investem tempo e dinheiro. Todos possuem algo em jogo.

Um grande equívoco é ter o problema ofuscado por uma possível solução, como na história do shampoo para o rapaz careca que queria seus cabelos de volta. Ele estava disposto a pagar qualquer preço por isto. Um belo dia encontrou-se com um cientista que aceitou o desafio. O cientista desenvolveu um shampoo que fez com que o rapaz voltasse a ter cabelos.

Passadas duas semanas, o rapaz retornou ao cientista dizendo que ainda não havia arranjado uma namorada, portanto o shampoo que o fez ter cabelos novamente não havia ajudado em nada! Ele sequer parou para pensar no que o impedia de arranjar uma namorada e supôs que seu problema fosse a calvice. Talvez o problema do rapaz fosse a falta de um bom papo ou apenas ausência de carisma (leia-se: ele é feio que dói).

Uma prática bastante interessante é a dos “5 Whys”, utilizada no Sistema Toyota de Produção e que hoje faz parte também de Lean e Kaizen. Segundo esta prática, através de apenas cinco questionamentos seguidos é possível tornar mais claras a raíz do problema e sua solução.

No exemplo do rapaz careca, caso o cientista tivesse procurado entender um pouco mais sobre o real problema de seu cliente, talvez notasse uma dúvida entre um shampoo, uma peruca ou um chapéu. Indo um pouco mais além nas perguntas, descobriria uma certeza quanto a não querer ficar sem namorada. Desenvolvedores experientes são igualmente responsáveis por descobrir junto ao cliente o seu real problema.

Motivação também é peça-chave para o andamento de qualquer projeto. Parte da motivação do desenvolvedor está em implementar a solução para o problema do seu cliente, pois um sistema nunca é igual ao outro e desenvolvedores adoram novos desafios. Outra parte da motivação é, obviamente, uma boa remuneração. Bons profissionais custam caro. Mais caro ainda são os profissionais ruins, pois fazem com que seu cliente gaste com o projeto muito mais do que o necessário e sem a garantia de que seu problema será resolvido . A frase “na verdade, não era bem isso que eu queria” soa familiar ?

Outra característica marcante de bons profissionais é o fato de serem, ao mesmo tempo, especialistas e generalistas. Além de sentirem-se confortáveis dentro de suas especialidades, quando fora delas, sabem aonde (ou a quem) recorrer. A partir de referências sobre algum assunto no qual são generalistas, são capazes de avaliar e trilhar caminhos necessários para suprir suas necessidades.

Não perca seu tempo começando um projeto sem perguntar-se antes se existe a) um bom motivo para investir seu tempo,  b) alguém para prover feedback constante e c) uma noção dos meios através dos quais o resultado pretende ser atingido.

Hacker vs. Developer 13

Posted by caike on April 16, 2009

O Hacker

Um hacker, segundo a RFC 1392, é uma pessoa que possui grande conhecimento sobre o funcionamento de sistemas de computadores. Em outras palavras, é aquele (ou aquela) que sabe o que está fazendo quando o assunto é programação.

O termo foi cunhado em 1960, quando aqueles que desenvolviam sistemas passavam dias trancafiados em laboratórios sem comunicação alguma com o mundo externo ou com outros colegas. Em algumas semanas, ou meses, concluiam sozinhos o desenvolvimento de alguma ferramenta sensacional ou inútil.

Os Processos

Apesar de existir um certo nível de comunicação entre a comunidade de hackers (a colaboração em sistemas open-source é um exemplo), sua fama de anti-sociais persistia. A indústria via um grande potencial técnico nos hackers mas, ao mesmo tempo, um grande gap no quesito comunicação e organização perante o mercado.

Inspirados nos processos fabris de linhas de produção, foram criados processos semelhantes de gerenciamento e desenvolvimento de software. Acreditava-se ser a melhor forma de domar os pedreiros de programas de computador.

Com processos meticulosamente definidos e documentados, a idéia era que qualquer pessoa com o mínimo de conhecimento em sua área pudesse seguir um manual e produzir software conforme o esperado. Do ponto de vista dos profundos conhecedores dos processos, os que trabalhavam para fazer o programa funcionar passaram a ser chamados de recursos. Um recurso é, teoricamente, algo altamente previsível, como uma conexão com o banco de dados ou um stream para um arquivo do filesystem e que deveria funcionar exatamente durante o horário comercial - e as vezes até mais.

Epic Fail

Trinta anos e trilhões de dólares depois, conclui-se que a fórmula

hackers + processos

não resulta em software funcionando nem em clientes satisfeitos. Os famosos processos dificilmente são instanciados de forma correta, suportando mudanças do mercado ou a alta rotatividade dos “recursos”.

Tentar domar os hackers através da criação de processos com canais formais de comunicação não funcionou. As barreiras criadas pelos processos entre “quem quer” (stakeholders) e “quem faz” (hackers) provaram-se extremamente prejudiciais a todos os envolvidos.

E se os hackers evoluíssem suas habilidades sociais a ponto de serem os responsáveis pela criação de seus próprios canais de comunicação ?

Nova Fórmula

Quanto mais tempo um programador passar codificando, mais fluência ele terá em sua linguagem de escolha e maior familiaridade com sua API. Interrupções como listas de e-mail, IRC, amigos, prática de esportes, festas e namoradas apenas servem para tirar o tempo que ele poderia estar codificando ou estudando. Isto é fato. Mas vimos que hackers não foram muito bem sucedidos no desenvolvimento de software para o mundo dos negócios, mesmo quando controlados por processos de big vendors.

Alguém que venha a tornar-se um excelente hacker mas sem habilidades sociais será um péssimo desenvolvedor.

hacker + comunicação = developer

Um bom developer, por sua vez, possui não só um conhecimento técnico acima da média, mas também habilidades sociais que possibilitem sua comunicação com as pessoas. Ele precisa comunicar-se com o restante do seu time, com seus clientes e com outras áreas de sua empresa.

“In the old waterfall method, the business experts talk to the analysts, and analysts digest and abstract and pass the result along to the programmers, who code the software. This approach fails because it completely lacks feedback” - Eric Evans (Domain Driven Design)

Os processos - desta vez mais ágeis - utilizados por sua equipe visam facilitar a comunicação. Os conhecedores destes processos não controlam, mas facilitam, e tentam livrar a equipe dos impedimentos que ameaçam o andamento do projeto.

Participação na comunidade, seja ela open-source ou específica de suas plataformas e ferramentas também é vital. Nenhum processo ou ferramenta é “the one to rule them all”. A troca de experiências da comunidade através de eventos, listas de e-mail, workshops e etc,  evita que erros sejam repetidos e divulga novos caminhos que foram traçados com sucesso e que podem servir de guia para outros.

A idéia de um hacker que recebe algumas ordens e depois programa, sozinho e incomunicável em uma sala por algums dias até sair com um programa “simplesmente funcionando” já provou ser um fracasso para problemas em domínios que não os já entendidos por ele. Não é assim que se faz software passível a expansão, manutenção e que satisfaça as reais necessidades do cliente.

Software Craftsmanship Manifesto 2

Posted by caike on March 07, 2009

It’s not only about making something work. Just coding the “simplest thing that could possibly work” is not how your final product should look like. That’s not code that should go into production and I believe it shouldn’t bother your continuous integration process either.

It’s not about just killing bugs and being able to change requirements no matter what. It’s about doing it the best way by producing easily maintainable legagy code.

It’s not about getting together everyday for 10 minutes while standing up and calling it “Daily Scrum”, or “Dailly Meeting”. It’s about exchanging ideas and sharing your recently gained experience, as well as learning from others.

It’s not about having someone who you can call “client”. Having a client is just one of the many steps towards agile development (and a very important step). It’s more than that. You need a partnership with someone that seeks business value and is willing to invest in it.

It’s not about getting it done, it’s about doing it right.

This is the Software Craftsmanship Manifesto:

As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:

Not only working software, but also well-crafted software.

Not only responding to change, but also steadily adding value.

Not only individuals and interactions, but also a community of professionals.

Not only customer collaboration, but also productive partnerships.

That is, in pursuit of the items on the left we have found the items on the right to be indispensable.