Não perturbe o programador - Blog sobre Transformação Ágil
Recentemente, acompanhando a lista de discussão sobre Scrum "Scrum Development", vi uma discussão interessante sobre um programador que afirmava precisar de tempo de isolamento para trabalhar.
Isso me fez pensar bastante. Realmente várias vezes eu senti necessidade de me isolar para poder trabalhar (em especial em um momento me que eu precisava implementar algum algoritmo específico ou precisava otimizar determinado código). Isso fez muito sentido na minha cabeça e durante um tempo cheguei a concordar com o programador. Mas será que isso é uma coisa boa?
Vamos analisar a curto prazo. Durante duas horas eu me isolo da equipe (não posso mais chamar de time pois estou trabalhando sozinho) e resolvo o problema. Foi vantajoso porque se eu parasse para discutir ou utilizasse pair-programming demoraria cerca de 8 horas (algoritmos são bem difíceis de explicar para quem ainda não teve contato com ele). Aumentei a velocidade do time e isso foi uma coisa boa, correto?
Não. Essa foi a pior atitude que poderia ser tomada. Pensem na sequinte situação ocorrendo logo após essa.
Novamente a equipe é confrontada com um problema semelhante. Quem é o único que tem experiência resolvendo esse tipo de problema? Eu. Então novamente me isolo da equipe para resolvê-lo. Começaram a notar onde pretendo chegar?
No momento em que me isolei da equipe, eu causei um dano muito sério. Retive conhecimento ao invéz de compartilha-lo. Se apenas eu sei como lidar com o problema, na próxima vez que ele ocorrer ou quando for necessário dar manutenção, eu preciso trabalhar nele. Ou seja, o Truck Factor para aquele trecho de código é 1.
Porque isso é muito ruim? Um programador com tendência de concentrar informação, não vai concentrar apenas um dos pontos. Ele irá agir dessa forma muitas outras vezes. Logo, ele será o único com conhecimento para resolver muitos problemas, causando um sério impedimento. Isso sem contar que a equipe não vai ter a oportunidade de crescer e aprender a resolver esse problema.
Isso é uma atitude de muita irresponsabilidade. O crescimento da equipe deve ser prioridade para todos os programadores da equipe. Apenas agindo dessa forma a equipe poderá passar a ser um time.
Ótimo post amigo Jonas.
Discordo da sua visão. Acredito que o conceito de isolamento é mais baseado na concentração do que na exclusividade de conhecimento.
Quando o programador se isola pra resolver determinado problema ele pode após o isolamento compartilhar com a solução tomada.
Existem programadores que não se isolam e que agem da mesma forma que você retratou.
Acredito que o isolamento é muito importante para se programar, pois no momento da concentração qualquer conversa paralela irá atrapalhar a concentração.
Conheço vários programadores que pra se isolarem, dentro de uma sala com muita gente, colocam fones de ouvido com música em alto volume.. só assim pra conseguirem concentração suficiente pra resolverem os problemas.
Já senti isso na pele várias vezes!
Entendo seu ponto de vista, mas compartilhar a solução tomada não é transmitir conhecimento. Todo o conhecimento que foi adquirido com as tentativas frustradas não tem como ser transmitido dessa forma (e na minha opinião essa é uma das principais partes do que é programar).
Se o programador precisa se isolar para conseguir se concentrar, provavelmente ele não está em um ambiente muito saudável. Se conversas paralelas atrapalham, o time tem que evitar que isso aconteça.
E obviamente existem programadores que não se isolam (fisicamente) e restringem a divulgação de conhecimento. É uma atitude tão ruim quanto a que coloquei acima, se não for ainda pior.
Eu também discordo do seu ponto, porque se um membro da equipe adquirir um determinado conhecimento sozinho não o impede necessariamente de compartilha-lo com a equipe na proxima reunião. Na verdade esse é até um dos ótimos pontos que eu vejo no Scrum: O Fato de vc expor um problema que vc teve e depois mostrar como vc conseguiu solucioná-lo.
Não sei se entendi seu ponto. Nada impede que ele compartilhe o conhecimento com a equipe, mas dificulta muito. E em que reunião ele compatilharia isso? As cerimônias do scrum não tem como objetivo difusão de conhecimento técnico (nem vejo muito como usá-las para isso). Criar uma nova reunião para suprir a falta de comunicação dentro da equipe? Dificilmente isso vai funcionar bem porque é bem diferente receber a solução "mastigada" ou trabalhar para encontrá-la. É possível aprender muito mais com a segunda opção.
Ter um tempo para trabalhar sozinho é extremamente saudável para o programador. Incentiva areas criativas que estariam inativas em outras situações como quando se está pareando.
Porém como vc mesmo comentou, a divulgação de conhecimento fica comprometida. Mas não creio que impedir o acontecimento desse tempo de "isolamento" seja válido, muitas vezes ele é necessário.
A solução? Code Review. Durante anos programadores tem aprendido algoritmos, tecnicas e hacks por meio de leitura de código, e funciona muito bem (vide open-source).
Pingback: Tweets that mention Blog AdaptWorks » Blog Archive » Não perturbe o programador -- Topsy.com
Eu concordo em parte com esse tipo de ação. Muitas vezes não da pra chegar a todas as soluções em conjunto. As vezes é melhor se isolar. Entendo a necessidade de transmissão de conhecimento, mas aprender a achar soluções sozinho pode ser algo necessário para alguns membros da equipe. Claro qeu duas pessoas pensando juntas vão achar formas de resolver, mas será que um desses caras, colocado sozinho tmb conseguirá resolver? Ele deveria ser capaz. acho que um meio termo gerido por muito bom senso seria o ideal.