dimanche 13 décembre 2009

Team team team team ! Et Comment construire un solide Ecosysteme autour de son Projet ?



Vous le savez peut être ou pas, je travaille avec mon binome sur ce projet, dans le cadre de mes études à l'ISIMA. Malheureusement, cette fin de trimestre ne nous a pas laissé assez de temps pour nous y mettre (TPs à rendre, examens à préparer etc.) mais maintenant que les partiels sont terminés, et qu'un nouveau trimestre va commencer il est grand temps de donner un gros gros punch pour bien démarrer le projet. Le démarrage est l'une des phases les plus critiques, étant donné que nous devons reprendre un code existant, s'assurer qu'il compile, l'étudier, étudier les technologies qui gravitent autour. Mais avant ça, il faut définir une stratégie d'organisation à suivre tout au long du projet.

J'ai passé donc une grande partie de mon week-end à réfléchir aux méthodes et outils qui nous permettront de travailler efficacement. La chose la plus important x 10000, est d'abord de s'assurer que nous allons faire du bon travail d'équipe avec mon binôme. Quelque soit le niveau respectif des membres d'une équipe, si chacun se la joue solo et si la coordination entre les différents membres ne se fait pas correctement, le résultat ne pourra certainement pas être à la hauteur (ou alors, le résultat sera atteint en 3 fois plus de temps que si les membres avaient mieux collaboré ensemble!). D'ailleurs, je ne suis pas le seul à le penser:
Feu Mr. Reynholm (aka The greatest man in the world) donnait une grande improtance au travail d'équipe, et il n'a pas tort ! :).

Pour qu'un travail d'équipe soit efficace, il faut s'assurer que :

1) Tous les membres de l'équipe puissent communiquer efficacement : Si un membre envoie un message, les autres membres doivent le lire et doivent réagir par rapport au message envoyé.

2) Les données soient partagées en temps réel entre les différents membres.

3) Les objectifs pour chaque membre soient clairement définis.

4) Deux membres ne travaillent pas sur la même tache.

Il est nécessaire alors de définir un certain nombre d'outils qui permettront la mise en pratique des 4 principes énoncés ci dessus. J'ai donc passé toute une journée, à chercher tous les outils qui permettront de faciliter la communication et optimiser nos efforts durant ce projet, cette liste je vais la partager avec vous :


Client SVN Subversion: Gestionnaire de versions de fichiers. Il est important dans un projet de développement, de pouvoir partager en temps réel avec les différents membres, la toute dernière version du code source utilisé. Un SVN permet également de gérer les conflits (deux personnes modifiant le même fichier en même temps). Ainsi plus la peine, de s'envoyer le code source par email ou par flash disk, un simple "commit" (jargon SVN pour dire que l'on update les fichiers sur le serveur) permet de partager le projet avec toute l'équipe !
Le client que j'utilise est : Tortoise SVN. Il est pas mal foutu, intuitif, permet de gérer les différentes opérations via une interface user-friendly :). Si vous êtes sous linux ou Mac, vous aurez par contre affaire au Terminal !

Serveur SVN : Qui dit Client SVN, dit Serveur SVN ! (Faut bien mettre ces fichiers quelque part !). Là deux choix s'offrent à vous, soit vous dédiez une machine à vous à cette tâche (faut qu'elle soit tout le temps allumée pour que les membres de l'équipe puissent envoyer leurs dernières versions autant qu'ils le souhaitent), ou alors utiliser un service tiers qui fournit en plus du serveur SVN un tas d'autres fonctionnalités intéressantes utiles !
C'est le cas de Assembla, qui fournit entre autres un espace de travail collaboratif (partage de fichiers, messages, chat etc.). Assembla, m'a été plusieurs fois utile jusqu'ici et c'est donc sans aucune hésitation que je rempile encore une fois avec ce merveilleux outil !

Mesh : En complément du Serveur SVN, j'utilise Live Mesh pour synchroniser mon répertoire de travail entre les différentes machines sur lesquels je pourrais travailler. Pour moi la différence avec le serveur SVN, c'est que là la synchronisation se fait automatiquement et instantanément. ça me permet de garder mon répertoire updaté tout le temps, même si j'oublie de faire un commit.

WinMerge : Un conflit à résoudre au niveau des versions de fichiers ? Pas de panique, munissez vous de WinMerge et comparez ligne par ligne les deux versions de fichier en votre possession. Et effectuer la fusion des deux contenus de manière organisée et prudente ! Les différences sont highlightées en jaune pour une meilleure observation !

Pastie : Vous pourriez avoir besoin de partager des bouts de code avec votre équipe. Au lieu d'un copier coller non indenté de votre code, vous pouvez utiliser pastie qui permet coller son bout de code et d'obtenir un rendu correct (indentation + coloration syntaxique).

Shared View: Je sens que je vais avoir besoin de cet outil pour le démarrage du projet :). Shared view, permet d'intervenir sur un ordinateur distant (partage de dekstop). Vous voulez aider votre équipe à configurer un IDE ? C'est l'outil qu'il vous faut ! :).

Ever note : Ce site web, permet de centraliser tout ce que vous pouvez trouver utile sur internet (liens, vidéos, photos, articles..) ou dans la vie réelle (photo prise avec votre téléphone, enregistrement d'une conférence ou d'un cours etc.). Le concept est simple, vous disposez d'une sorte de mur que vous remplissez depuis l'extérieur soit en envoyant un mail à votre espace ou en en envoyant un DM via twitter à myen. Au lieu de noyer sa boite email de liens ou de tout autre fichier, envoyez tout ça sur ever note et triez par la suite :).

Spotify : INDISPENSABLE. La musique me permet d'entrer la zone et de me concentrer sur la tâche que j'ai à accomplir. Aussi bizarre que cela puisse paraitre, je suis beaucoup plus distrait sans musique ! Je suppose, qu'elle me permet de rythmer mon activité cérébrale :P. Pour l'information Spotify vaut vraiment le détour, pour moi c'est l'un des meilleurs lecteurs musicaux qui soient, à ne rater sous aucun prétexte !

Jing : Imaginez que vous testez le rendu de ce que vous étiez en train de coder depuis 48h, et que vous voulez partager le résultat avec votre équipe (par exemple dans le cas d'un bug que vous n'arrivez pas à résoudre, l'idéal est de montrer une capture d'écran montrant visuellement le problème). Là vous pouvez soit, faire le fameux impr écran, aller sur Paint, coller votre capture, puis allez sur imageshack et uploader votre capture, pour enfin transmettre le lien vers votre image. Pfffiouu, assez énervant comme procédure. C'est pour cette raison que j'utilise Jing, qui s'installe sous la forme d'un widget et qui permet de capturer une photo ou une vidéo à partir de n'importe quelle zone de votre écran et de partager instantanément cette capture avec l'ensemble de votre équipe (Un lien est automatiquement généré vers votre fichier). En 2 clics, le tour est joué !

Bouml : Un logiciel qui permet de générer des diagrammes UML, avec option de reverse engineering ! (qui sera certainement utilisée pour notre projet vu qu'on récupère un code existant !)

Balsamiq : Cet outil permet de générer des mockup (croquis) pour vos interfaces utilisateurs. Un outil pareil est quasiment indispensable au moment de la conception, au lieu de dessiner vous même au crayon vos croquis, faites le numériquement avec des composants adaptés à la création de logiciels !

Voilà, je n'ai pas tout cité je pense mais voici un bon paquet de logiciels/outils qui permettent d'améliorer l'efficacité d'une équipe sur un projet. Je vais tenter de prêcher la bonne parole pour qu'il adopte ces outils et les utilise, on verra bien ce que ça donnera :).

Pour terminer, n'hésitez pas à partagez les outils que vous jugez utiles sur un projet (notamment ceux que je n'ai pas cité ex: builds automatiques, tests d'intégration/unitaires ou des alternatives aux outils que j'ai déjà cité, notamment le balsamiq qui est payant !). Si vous avez des anecdotes à partager concernant les différents travaux que vous avez eu à faire en équipe (soit dans le cadre d'un projet académique ou pro) faites les nous partager également :).