Se fixer un but pour garder le cap
Après quelques décennies passées à suivre des procédures formelles et lourdes, l'heure est aux méthodes agiles qui prônent la supériorité du pragmatisme sur le dogmatisme.
Je suis personnellement convaincu du bien-fondé des approches agiles. Plutôt que de viser un idéal impossible à atteindre, elles préconisent de constamment revoir sa copie et de s'adapter au mieux aux circonstances afin que le projet colle le plus possible au besoin réel et non au besoin exprimé ou pire encore : au besoin imaginé.
Il arrive que les nouveaux pratiquants pensent à tort que les méthodes agiles s'apparentent à la trop célèbre méthode La Rache. Même si elles sont moins contraignantes que les méthodes dites traditionnelles, les méthodes agiles proposent chacune un formalisme.
Au-delà de la méthode choisie, il me semble important de ne jamais perdre de vue le but du projet. Pour cela Tom Preston-Werner a imaginé une méthode originale et tout à fait intéressante : le Readme Driven Development. Il préconise de toujours commencer un projet par la rédaction de son fichier README. Ce fichier est traditionnellement inclus dans la distribution d'un programme afin d'en expliquer l'usage.
Rédiger ce document avant toute autre chose permet d'éviter de se jeter tête baissée dans le développement avec le risque que ce soit lui qui induise la direction que prendra le projet. Il faut au contraire que le code ne soit qu'un instrument destiné à atteindre un but. En se mettant à la place de l'utilisateur final dès le début, on privilégie l'usage et non le développement du produit.
Par ailleurs, si de nouveaux développeurs viennent étoffer l'équipe ou s'il faut expliquer le but de l'application à quelqu'un d'extérieur, ce document sera une bonne base de travail.
Parfois, le produit n'est pas vraiment une application destinée à un utilisateur final mais plutôt une librairie qu'utiliseront d'autres développeurs pour construire une application. Dans ce cas là, j'ai pris pour habitude de commencer par concevoir les exemples d'utilisation.
Ainsi, je peux voir si l'usage est simple et logique. Généralement, je fais plusieurs modifications radicales avant d'arriver à quelque chose qui me satisfasse pleinement. L'avantage de cette approche est que les classes n'étant pas encore implémentées, le coût de refactorisation du code à ce stade est quasiment nul.
Cette approche très simple à mettre en œuvre permet de concevoir une librairie idéale sans se laisser influencer par d'éventuels raccourcis que l'on utilise parfois pour se faciliter la programmation mais qui vont compliquer l'usage ultérieur de la librairie.
Cela se rapproche de la philosophie du Test Driven Development mais sans s'encombrer, pour le moment, du framework de tests unitaires. Le but est de prototyper l'usage de la future libraire de la manière la plus souple possible.
Et vous, utilisez-vous une méthode personnelle pour conserver le cap lors de vos développements ?
Readme Driven Development
Tenir une réunion technique hebdomadaire
Il y a de nombreuses réunions qui jalonnent le calendrier de travail, mais je remarque de plus en plus qu'il en manque une principale : la réunion technique. Réfléchissez un instant, à quand remonte la dernière rencontre technique que vous avez faite sur votre projet actuel ? Au mois dernier ? A l'an dernier ? Jamais, le plus souvent.
Comment se fait-il que l'équipe technique ne se réunisse qu'exceptionnellement pour parler de ce qui fait son quotidien : programmer. Les raisons affluent alors immédiatement à l'esprit : on n’a pas le temps, le chef n'a rien organisé, ce n'est pas productif, on n’est jamais tous là, on n’y a pas pensé. Mettons que si vous avez commencé à lire cet article, le dernier point n'est déjà plus recevable : vous êtes maintenant en train d'y penser.
Dans une réunion technique, on reproduit ce qui est fait pour les autres aspects du projet, mais cette fois-ci, concentré sur des points techniques. Cela s'organise très bien tout seul d'ailleurs : actualité des technologies (PHP a sorti une nouvelle version), retour d'expérience (j'ai utilisé Git, c'est super), dossier approfondi (on va voir ensemble comment écrire un test unitaire), revue de code ou de conception, problèmes qui se profilent. Les sujets ne manquent pas.
Le plus important de la réunion est de traiter des points de fond, indépendamment de la production. C'est le cadre idéal pour débattre de la conception, ou réfléchir à la manière dont les espaces de noms vont pouvoir être utilisés dans les développements actuels. Pas de décision immédiate, pas d'obligation à produire : notez combien cela change de ces "discussions techniques", faites avec une fesse sur le coin d'un bureau, qui se terminent toujours par des décisions unilatérales, sous contrainte de production.
Durant la réunion, c'est le moment de laisser chacun expliquer pourquoi il préfère les constructeurs aux usines d'objets (et vice-versa), ou faire une démonstration de tests unitaires. Une telle réunion permet d'élever le niveau de jeu de tous les intervenants, et de souder les membres de l'équipe : le travail en entreprise a fortement tendance à cloisonner les développeurs dans des tâches parallèles : c'est bien connu, les parallèles ne se rencontrent jamais.
Pour réussir cette réunion, voici quelques suggestions :
- Placez-la à un moment de la semaine, moins chargé. Vendredi après-midi par exemple (quand on ne fait plus de mise en production) mais si vous avez un pic de trafic ce soir-là, placez-la mercredi matin.
- 1 heure suffit : indiquez aux participants les horaires exacts, et soyez précis dans leur application. Pas besoin de faire trop long, il faut garder les intervenants concentrés. De plus, il est facile de trouver une heure par semaine.
- Soyez réguliers : il vaut mieux tenir la réunion, et la faire courte. L'important ici est de prendre l'habitude.
- Nommez un secrétaire pour noter l'ordre du jour, et les minutes importantes. Cela permet de garder une trace. Cela permet aussi d'écarter les remarques ridicules du genre : c'est une perte de temps. Désormais, on peut baptiser la réunion "veille technologique" ou "formation".
- Étendez la réunion à l'ensemble des développeurs de l'entreprise : vous pouvez commencer par votre équipe, mais n'hésitez pas à faire venir les développeurs des autres services/projets. Cela élève le niveau de compétences de tous.
- Vous n'avez pas besoin d'autorisation de toute votre hiérarchie pour tenir ce type de réunion. Et ce n'est pas uniquement le chef de projet ou le gourou qui peut proposer ces réunions : il faut surtout quelqu'un qui sache trouver la bonne salle.
Une réunion technique régulière porte rapidement ses fruits en termes d'esprit d'équipe et de connivence de développement. Et vous pouvez même apporter les croissants si vous voulez ou fêter les 15 ans de PHP.
PHPTV parle d’industrialisation de PHP
Damien a été interviewé par PHPTV sur le thème de l'industrialisation de PHP. Ce fut l'occasion de rappeler les éléments de base à mettre en place pour commencer à industrialiser ses développements PHP.
http://www.dailymotion.com/videoxbwt9qQu’est-ce qu’industrialiser les développements PHP ?
L'industrialisation des développements PHP est un thème émergent. Depuis quelques mois, on en entend de plus en plus parlé mais qu'est-ce que cela recouvre concrètement ?
Une définition pourrait être que l’industrialisation des développements consiste à mettre en œuvre des pratiques et des outils visant à rendre les logiciels produits plus robustes, tout en restant dans des délais et des coûts maîtrisés. On a donc là deux leviers : des pratiques et des outils qui permettent d'atteindre deux buts précis : obtenir des logiciels robustes en maîtrisant à la fois le budget et le planning.
Ces pratiques et ces outils sont multiples et varient selon les habitudes, les sociétés et les projets. Nous avons tenté d'en lister un certain nombre qui nous paraissent essentiels :
- Former les équipes ;
- Employer une convention de programmation ;
- Utiliser un dépôt de code ;
- Utiliser un framework ;
- Adopter un IDE de développement ;
- Automatiser les tests ;
- Mettre en place une intégration continue ;
- Déployer automatiquement ;
- Pratiquer l'analyse statique ;
- Utiliser des outils de conception ;
- Mettre en place des méthodes de programmation ;
- Maîtriser de la qualité du code ;
- S'assurer de l'implication des utilisateurs.
Et vous, quelles pratiques et outils utilisez-vous pour industrialiser vos développements ?

