Fui encarregado de gerenciar um projeto que foi terceirizado para alguns desenvolvedores ucranianos.
A empresa os contratou através da Elance a um preço fixo . Nesse ponto, meu chefe me deixou sozinha para lidar com eles e fazer o trabalho. Eu criei uma especificação detalhada da coisa completa que precisava ser feita.
O projeto envolveu lidar com coisas como XMPP, RabbitMQ e Database. Na minha primeira reunião com eles (sempre como primário), expliquei minuciosamente o que eles precisavam fazer. Eles pareciam entender - e estavam muito confiantes de que isso seria feito facilmente.
Por enquanto, tudo bem. Mas depois de uma semana, quando nos encontramos novamente, eles estavam cheios de mal-entendidos sobre o que precisava ser feito. Quando perguntei a um dos desenvolvedores se ele conhecia o XMPP, ele disse que estava trabalhando com ele pela primeira vez. Na nossa primeira reunião, eu mencionei muito especificamente a complexidade do projeto e as tecnologias envolvidas. Além disso, eu havia pedido repetidamente que escrevessem uma especificação funcional de exatamente como eles o fariam. Mas eles disseram NÃO e insistiram que prefeririam escrever o código. Eu disse ok.
O projeto foi concluído após três semanas e eles entregaram o que era necessário. Nesse ponto, comecei a revisar o código. Foi bom para a maior parte, mas existem alguns problemas importantes:
- eles codificaram algumas das coisas que precisavam ser separadas em um arquivo de configuração
- havia vários arquivos de configuração que eu precisava consolidar em um
- eles escreveram absolutamente nenhuma documentação
- algumas outras pequenas mudanças
Pedi a eles para fazer essas alterações (exceto a documentação) - E tivemos uma discussão.
Eles disseram que, como o preço era fixo, eu estava sendo injusto ao pedir a eles que fizessem alterações depois que eles concluíssem o código de trabalho. Que eles haviam trabalhado por uma quantidade razoável de tempo no projeto e agora estava completamente errado pedir qualquer coisa.
Finalmente, agora eles fizeram as alterações e o projeto acabou. Mas deixa algumas perguntas em minha mente ...
Eles fizeram o que era necessário, mas eu o fiz corretamente e, portanto, as mudanças. eu era realmente injusto?
Por que concordei em deixá-los codificar sem ter uma especificação funcional?
Por que não tive certeza de que eles entendessem tudo da primeira vez?
Alguém se encontra na mesma posição? Você acha que existe uma maneira melhor de gerenciar projetos terceirizados?
- ATUALIZAÇÃO -
Obrigado por todas as opiniões - depois de refletir sobre toda a experiência, posso concluir ...
Embora eu não fosse vago nas especificações do meu lado, certamente não as deixei duras, como sugerido. Portanto, a questão é: sempre seja o mais específico possível - leia também as especificações da perspectiva deles e veja se você perdeu alguma coisa. Repita pelo menos três vezes.
Apenas especificar o que o código deve fazer não é suficiente. Você deve especificar a aparência do código. Qual será a estrutura de diretórios; até os nomes dos arquivos, se possível. Isso o salvará de muito aborrecimento mais tarde. Especifique estritamente as diretrizes de codificação, as convenções de nomenclatura das variáveis, o formato da documentação interna, etc. Verifique se eles cumprem essas diretrizes e, se não, gritam.
Exija uma especificação funcional do lado deles - insista para que seja escrita antes de qualquer código. Isso acabará com muitas confusões e mal-entendidos.
Revise o código conforme ele está sendo desenvolvido, para identificar as anomalias anteriormente e corrigi-las. Fale com eles pelo menos uma vez em dias alternados.
Por fim, tente fazer um bom relacionamento com eles. Faça-os sentir que você aprecia o trabalho deles. Não exagere neles de forma exagerada para se adequar às suas diretrizes. Em vez disso, peça que eles o façam e diga que isso tornaria a manutenção do código muito mais fácil para você depois que eles concluírem o projeto.