J'avais été chargé de gérer un projet qui était sous-traité à certains développeurs ukrainiens.
L'entreprise les a embauchés via Elance à un prix fixe . À ce moment-là, mon patron m'a laissé seul pour les gérer et faire le travail. J'ai créé une spécification détaillée de la chose complète qui devait être faite.
Le projet consistait à traiter des choses telles que XMPP, RabbitMQ et Database. Lors de ma première rencontre avec eux (toujours IM), j'ai expliqué à fond ce qu'ils devaient faire. Ils semblaient le comprendre - et ils étaient convaincus que cela se ferait facilement.
Jusqu'ici tout va bien. Mais après une semaine, lorsque nous nous sommes revus, ils étaient pleins de malentendus sur ce qui devait être fait. Lorsque j'ai demandé à l'un des développeurs s'il connaissait XMPP, il m'a répondu qu'il y travaillait pour la première fois. Lors de notre première rencontre, j'avais mentionné très précisément la complexité du projet et les technologies impliquées. De plus, je leur avais demandé à plusieurs reprises d'écrire une spécification fonctionnelle exactement COMMENT ils le feraient. Mais ils ont dit NON et ont insisté pour qu'ils préfèrent écrire le code. J'ai dit OK.
Le projet s'est terminé après 3 semaines et ils ont livré ce qui était nécessaire. À ce stade, j'ai commencé à revoir le code. C'était correct pour la plupart, mais il y avait des problèmes importants:
- ils ont codé en dur certaines des choses qui devaient être séparées dans un fichier de configuration
- il y avait plusieurs fichiers de configuration que je devais consolider en un
- ils ont écrit absolument AUCUNE documentation
- quelques autres changements mineurs
Je leur ai demandé de faire ces changements (sauf la documentation) - Et nous avons eu un argument.
Ils ont dit, puisque le prix était fixe, j'étais injuste en leur demandant d'apporter des modifications une fois qu'ils avaient terminé le code de travail. Qu'ils avaient travaillé pendant un temps déraisonnable sur le projet et maintenant c'était complètement faux de demander quoi que ce soit.
Enfin, ils ont maintenant fait les changements et le projet est terminé. Mais cela laisse quelques questions dans mon esprit ...
Ils ont fait ce qu'il fallait mais j'avais besoin que cela soit fait correctement , et donc les changements. étais-je vraiment injuste?
Pourquoi ai-je accepté de leur laisser du code sans avoir de spécification fonctionnelle?
Pourquoi ne m'étais-je pas assuré qu'ils avaient tout compris la première fois?
Quelqu'un se retrouve-t-il dans la même position? Pensez-vous qu'il existe une meilleure façon de gérer les projets externalisés?
-- METTRE À JOUR --
Merci pour toutes les opinions - après avoir réfléchi à toute l'expérience, je peux conclure ...
Bien que je ne sois pas vague dans les spécifications de mon côté, je ne les ai certainement pas rendues étanches comme suggéré. Le point à retenir est donc: soyez toujours aussi précis que possible - lisez également vos spécifications de leur point de vue et voyez si vous avez oublié quelque chose. Répétez-le au moins trois fois.
Il ne suffit pas de spécifier ce que le code devrait faire. Vous devez spécifier à quoi le code est censé ressembler. Quelle sera la structure du répertoire; même les noms de fichiers si possible. Cela vous évitera bien des ennuis plus tard. Spécifiez strictement les directives de codage, les conventions de dénomination des variables, le format de documentation interne, etc. Veillez à ce qu'elles respectent ces directives, et sinon, criez.
Exigez une spécification fonctionnelle de leur part - insistez pour qu'elle soit écrite avant tout code. Cela éliminera beaucoup de confusions et de malentendus.
Examinez le code au fur et à mesure de son développement afin d'identifier les anomalies plus tôt et de les corriger. Parlez-leur au moins une fois tous les deux jours.
Enfin, essayez de nouer de bonnes relations avec eux. Faites-leur sentir que vous appréciez leur travail. Ne les poussez pas exagérément pour correspondre à vos directives - demandez-leur plutôt de le faire et dites-leur que cela rendrait le maintien du code beaucoup plus facile pour vous une fois le projet terminé.