Author Archive

Conversa Rápida Junho

Wednesday, May 18th, 2011

No dia 13 de Junho, das 19:30 às 22:00, teremos a segunda edição do Conversa Rápida aqui na AdaptWorks.

Para os que não viram a primeira edição, todas as palestras estão no YouTube.

Nessa edição do Conversa Rápida, teremos 10 palestras de aproximadamente 5 minutos.

Os palestrantes confirmados são:

Como temos poucos lugares, caso tenha interesse em assistir as palestras, por favor envie um email para jabreu@adaptworks.com.br confirmando.

Tiny Types

Monday, May 16th, 2011

Enquanto eu resolvia o primeiro desafio de expressividade que postei no VidaGeek.net, me deparei com uma situação comum para programadores Java.

Eu precisava que a classe java.lang.String fosse capaz de fazer coisas (como inverter a string) que ela não é.

A solução mais comum seria criar uma classe Strings (seguindo o padrão da java.util.Collections) que conteria o comportamento.

Daí para usá-la, seria da seguinte forma:


Strings.inverte(suaString);

O problema é que isso espalha o comportamento que deveria pertencer à String (que não temos como alterar).

Ao invéz de solucionar o problema dessa forma, resolvi usar um Tiny Type para encapsular essa string (chamei de BinaryString).

Essa BinaryString é capaz de se inverter, além de eu poder dar os nomes que eu quiser para os métodos (deixando mais expressivo).

Mas a maior vantagem de ter usado esse Tiny Type é que ele me abriu possibilidades que não existiam no código sem ele e eu mudei completamente a solução que pretendia criar. A nova solução ficou (na minha opnião) mais elegante e expressiva.

Se tiverem maior interesse sobre Tiny Types, eu escrevi sobre o assunto aqui e tem um post do Darren Hobbs que é onde eu entrei em contato com o assunto.

Além disso, no nosso novo treinamento Scrum Developer Skills, vários assuntos relacionados à expressividade são abordados, incluindo Tiny Types.

Conversa Rápida – Retrospectiva e Palestras

Wednesday, May 4th, 2011

A primeira edição do Conversa Rápida foi realizada nessa segunda feira, dia 2.

(Se estiver interessado apenas nas palestras, pode pular para o fim do post)

Além de ter sido muito divertido para os palestrantes e participantes, o formato do evento agradou a todos. Isso era uma preocupação da organização, pois nunca tínhamos feito algo assim.

Basicamente, foram 12 palestras de 5 minutos (mais uma orientação do que uma regra). Mas o que tornou o evento mais interessante, além dos palestrantes (muito obrigado Alexandre, Fabiano, Edmilson e Juliano) e o público (muito obrigado a todos que vieram até a AdaptWorks em uma segunda feira com trânsito recorde), é que apenas os palestrantes sabiam sobre o que iam falar. Propositadamente não houve divulgação das palestras. E isso foi bem recebido pelo público.

O objetivo da não divulgação das palestras é tirar todos da zona de conforto e poder discutir sobre assuntos que voluntariamente muitos não procurariam, mas que fazem muito sentido para Desenvolvimento Ágil.

Além disso, houve uma boa variedade de formatos de palestras, o que tornou tudo ainda mais dinâmico. Alguns palestrantes usaram apresentações mais tradicionais (slides), outros usaram o quadro branco, e em algumas não foi usado material de apoio. Até mesmo uma dinâmica de grupo aconteceu durante uma das apresentações.

Após a sequência de palestras, precisávamos colher o feedback do público. Ao invés de usar os tradicionais questionários, optamos por uma Retrospectiva Ágil. Além de diversos post-its elogiando o evento, conseguimos identificar vários problemas a serem resolvidos para a próxima edição.

Novamente, muito obrigado a todos que puderam vir. E para os que não puderam, todas as palestras foram filmadas e estão agora no youtube. Segue a lista delas:

A internet não é a sua casa – Jonas Abreu
Ambiente para Inovação – Jonas Abreu
Certificados Digitais – Juliano Alves
Criando Melhores Apresentações – Edmilson Miyasaki
E quando a empresa não é ágil? – Juliano Alves
Expressividade de Código – Jonas Abreu
Liderança técnica não é sinônimo de bons líderes – Fabiano Milani
Opressor x Oprimido – Jonas Abreu
ProductOwner – Ação Requerida – Alexandre Magno
Recursão – Jonas Abreu
ScrumMaster – Ação Requerida – Alexandre Magno
Time – Ação Requerida – Alexandre Magno

Conversa Rápida

Wednesday, April 27th, 2011

No dia 2 de maio, das 19:30 às 21:30 teremos a primeira edição do Conversa Rápida na AdaptWorks.

O Conversa Rápida é um conjunto de 12 palestras de 5 minutos (cada uma seguida de 5 minutos para perguntas).

Até o momento, temos 5 palestrantes confirmados:

  • Alexandre Magno
  • Edmilson Miyasaki
  • Fabiano Milani
  • Jonas Abreu
  • Juliano Alves

Caso tenha interesse em assistir as palestras, envie um email para jabreu@adaptworks.com.br para que seu lugar seja reservado. Temos poucos lugares.

Dojo na Adaptworks

Wednesday, May 5th, 2010

Ontem realizamos o primeiro Coding Dojo aqui na AdaptWorks. Foi uma ótima experiência tanto para os participantes quanto para a AdaptWorks, pois foi o primeiro evento que organizamos na nova sede.

Na retrospectiva encontramos vários pontos que devemos melhorar para os próximos dojos, mas mesmo assim foi muito divertido, o que nos incentiva a repertimos a dose.

Veja todas as fotos do Dojo

Caça às Bruxas

Wednesday, April 14th, 2010

Tempos atrás me encontrei em uma situação interessante. Por problemas de comunicação, eu estava em um lugar e deveria estar em outro. Quem já não passou por isso?

Mas o que me chamou a atenção foi a primeira pergunta que me foi feita quando notamos o problema. “Quem falou para você vir para cá?”. Por reflexo respondi, mas fiquei com isso na cabeça.

O que eu vi acontecer nos próximos minutos foi uma rápida caça às bruxas. O importante não era descobrir como eu chegaria a tempo no local certo e sim descobrir quem era o culpado por eu estar no lugar errado. Não tem algo de estranho por aqui? O que seria ganho encontrando o culpado?

Isso é um traço cultural de muitas empresas. Essa “cultura do culpado” é muito forte e costuma trazer efeitos desastrosos. O erro passa a ser tratado como a pior coisa que pode acontecer e não como parte do aprendizado. Como o erro é uma ofensa terrível, ele deve ser escondido. Pronto. Acabamos de destruir uma empresa. Esses erros que ficam ocultos vão minando as bases da empresa até o ponto em que ela fica insustentável.

Uma solução a essa “cultura do culpado” é uma “cultura da solução”. O culpado passa a ser um personagem secundário. O realmente importante é encontrar uma solução e voltar o mais rápido possível ao estado normal de trabalho. Essa forma de agir tem algumas vantagens:

  • Seus problemas são solucionados mais rápido
  • O erro passa a ser parte do aprendizado e por isso não faz sentido ter medo e escondê-los
  • Como seus erros estão visíveis, você finalmente tem a chance de fazer melhorias reais para evitar que eles aconteçam novamente

Essa “cultura da solução” é um dos principais pontos dentro de Scrum (e também é uma das mais difíceis de serem implantadas). Toda a parte de Inspecionar e Adaptar só é possível se você tiver (não apenas dentro do time, mas com todos os envolvidos no projeto) segurança para relatar os problemas que tem acontecido.

Não perturbe o programador

Wednesday, April 7th, 2010

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.

Sim. Documentação é vital!

Wednesday, November 4th, 2009

Acredito que em todos os projetos nos quais já trabalhei, documentação foi um fator determinante para o sucesso ou fracasso do projeto. Documentação é muito importante e chega a ser irresponsável dizer que documentação é inútil.

Na minha opnião, documentação é uma forma de comunicação entre você (programador/documentador do presente) e você ou outros (programadores/gerentes do futuro – sendo futuro qualquer momento posterior à escrita da documentação). Através da documentação, tem que ser explicado para o próximo o que aquele sistema ou módulo faz. Essa é a função primordial da documentação.

Mas documentação não é apenas escrever dezenas de UMLs. Como disse, documentação é uma forma de comunicação e por definição não pode estar restrita à modelos. Modelos são ótimos para termos um lugar de onde partir (afinal, a melhor forma de aprendizado é através da cópia), mas temos que ter consciência de que devemos criar nossas próprias formas de comunicação com nossa equipe futura.

O que muitos acreditam erroneamente é que agilistas não gostam de documentação. Isso com certeza não é verdade. A maioria dos agilistas que vejo é mais preocupada com documentação do que desenvolvedores que utilizam processos tradicionais. A grande diferença é como cada um lida com a documentação.

Em um processo tradicional, a documentação é vista como uma obrigação. E obrigações são chatas e entediantes, não importa qual seja. Os agilistas encaram de outra forma. A documentação é uma responsabilidade de toda a equipe.

Então você não pode ter alguém responsável por escrever a documentação em uma equipe? Claro que pode (e talvez deva). Mas o ponto de ser uma responsabilidade afeta todos os tipos de documentação, não apenas os que devem ser entregues a algum gerente/supervisor/chefe.

Uma documentação que costuma ser muito ignorada é o próprio código. Como documentação é uma forma de comunicação entre o agora e o futuro, o código fonte da aplicação é o primeiro ponto de contato. Código auto-documentado é um dos principais tipos de documentação. Nenhum outro é capaz de suprir sua falta, porque esse é o código que realmente roda em produção (e consequentemente é quem traz dinheiro para a empresa). E notem a ênfase em auto. Eu não estou falando em ferramentas como javadoc, ndoc, ou comentários. Estou falando sobre código que além de legível é compreensível. Existe uma grande diferença entre os dois. Na comunidade de desenvolvimento SmallTalk isso é levado muito a sério. As boas práticas dizem que se você sentir a necessidade de acrescentar um comentário, você deve alterar o código para que fique mais compreensível e o comentário seja desnecessário.

Um segundo ponto de contato muito importante são os testes automatizados. Testes nada mais são do que documentação funcional do seu código, que ainda tem uma vantagem sobre os outros tipos. Eles são capazes de dizer se o seu código está certo com relação à quando o teste foi escrito. Se um teste falha, significa que o código está errado ou que o teste perdeu o sentido (ou seja, você nunca corre o risco de ficar com essa documentação desatualizada).

Esses são dois tipos de documentação que tem manutenção automática. Você não precisa lembrar de alterar o documento DOC4129-X porque acrescentou um método à classe Funcionario. Acrescentando o método (e o teste), a documentação estará feita.

Mas isso é suficiente? Nem sempre. Trabalhei com vários projetos onde foi o suficiente. Vários outros, não chegou perto do mínimo necessário. Quando estou desenvolvendo uma API para uso público, eu costumo documentar (com uma ferramenta como javadoc) toda a parte pública dela (por mais que muitas vezes eu gaste mais tempo com a documentação do que escrevendo essa parte pública), porque preciso explicar tudo o que vai acontecer, sem que o usuário precise olhar a implementação. Se quero que o projeto ganhe visão, preciso de uma documentação para o usuário, ensinando-o a usar o sistema (essa costuma levar mais tempo ainda).

O mais importante é lembrar que qualquer tipo de documentação exige esforço. Quanto desse esforço é convertido em valor para o projeto? O Toyota Production System é completamente baseado em eliminação de desperdício. E desperdício é qualquer coisa que não acrescente valor ao produto ou cliente. Quanto da documentação nos seus projetos atuais agregam valor aos seus clientes? Todas as 10 páginas para se criar uma modificação em uma classe? Então essa documentação é ótima. Nenhum dos diagramas UML? Então essa documentação precisa ser reavaliada.

Documentação é tão vital quanto água. Sem documentação, um projeto pode morrer. Com documentação excessiva, também.