3 jours de travail et revenir en arrière : l'importance du déploiement régulier

mercredi 4 mai 2016 :: perrick :: Développement :: aucun commentaire :: aucun trackback

J'ai repris un peu le développement de Lozeil : le compte GitHub associé au projet a un peu bougé (même si l'application est encore loin d'être finalisée - surtout graphiquement). Sauf que ce matin, je mets à la poubelle 3 jours de boulot pour revenir en arrière : la piste que je tentais de suivre n'est pas si concluante techniquement et surtout elle m'empêche de continuer à déployer régulièrement.

Parce qu'un déploiement régulier (voir continu) est devenu pour moins aussi important que les tests unitaires (avec l'intégration continue qui va de pair) et que j'en prends conscience aujourd'hui : 56 heures sans déploiement en production sont devenus un laps de temps trop long. J'ai besoin de sentir que je ne casse pas tout inutilement, que le reste de l'application tourne quand même, que je n'ai pas choisi un bulldozer pour tracer un petit chemin dans le code. Et aujourd'hui je déclare forfait.

Bien sûr je ne mettrai pas tout à la poubelle : rien que le code. Ma carte mentale de l'application a évoluée, je "vois" un autre chemin pour arriver à mon but, un chemin avec moins d'effort, plus astucieux et surtout plus respectueux de l'application elle-même. Peut-être plus long aussi, mais nous avons le temps : un bon logiciel aussi prend 10 ans.

Git : marche arrière chez No Parking

samedi 10 octobre 2015 :: perrick :: Développement :: 9 commentaires :: aucun trackback

Aucun doute : Git a gagné la bataille des gestionnaires de code source. Même SimpleTest a migré vers GitHub et donc vers Git. Chez No Parking aussi, nous avons lancé la transition de Subversion vers Git avec les débuts de Lozeil.

Et puis nous avons fait marche arrière pour deux raisons.

Tout d'abord le problème des Submodules. Lozeil (comme Opentime d'ailleurs) est composé de 2 logiciels imbriqués : l'application d'une part et le back-office (qui gère le site web, toutes les instances des clients, les processus de facturation, etc.). L'un et l'autre s'articulent sans effort grâce aux svn:externals. La documentation sur les submodules de Git était prometteuse : il arrive souvent lorsque vous travaillez sur un projet que vous deviez utiliser un autre projet comme dépendance. Mais nous avons dû nous rendre à l'évidence : il s'agit là d'un point faible de Git - au moins dans notre cas. En effet nous souhaitons que les deux projets n'en fassent plus qu'un : nous mettons cette double "HEAD" en production régulièrement. La documentation de Git précise les choses : vous voulez être capable de gérer deux projets séparés tout en utilisant l'un dans l'autre. Nous n'étions pas fait pour nous entendre en fait !

Secundo les outils d'intégration continue, de déploiement automatique, de ticketing ont été construits pour Opentime et restent liés à Subversion. Passer à Git pour Lozeil impliquait de les ré-écrire, de les étendre ou de les remplacer. Nous avons préférés utiliser nos jetons d'innovation sur d'autres trucs à commencer par de l'algorithme de Fisher.

Subversion reste notre bonne vieille techno pour quelques temps encore.. Et cela n'empêche pas certains devs de profiter de la passerelle Git-SVN ;-)

Recruter un développeur PHP quand on est éditeur sur un framework maison

vendredi 11 juillet 2014 :: perrick :: Développement :: aucun commentaire :: aucun trackback

J'ai reçu aujourd'hui une questions originale : on cherche un profil de dev php pour notre logiciel en SAAS à base d'aucun framework (maison). Toi qui prônes l'anti framework :) comment réussis tu à trouver des profils intéressants et es-tu obligé d'avoir des gars sans expérience que tu formes pour ne pas les voir s'enfuir à grandes enjambées lorsque tu leur dis qu'ils n'utiliseront ni Symfony 2, ni ZF, ni même un autre framework à la mode ?

Ce n'est effectivement pas le plus simple, surtout que je suis plutôt bien placé pour le savoir : sur nos trois derniers recrutements techniques, le premier a été licencié dans les 15 jours, le second a posé sa démission dans les 2 mois et le troisième est en fait un ancien salarié qui est revenu ;-)

Bref ma petite expérience en la matière, c'est qu'il faut un travail de longue haleine.

Chez No Parking, il y a un tropisme plutôt prendre un "jeune" et le faire monter en compétence. L'inconvénient, c'est qu'il faut parfois les voir partir à la fin du stage : un éditeur a souvent moins de turnover que les prestataires en forfait (qui en a moins encore que les prestataires en régie). Nous avons eu 2 stagiaires relativement récents comme ça qui sont allés à la "concurrence" parce qu'on ne pouvait pas les embaucher sur le moment (même si on s'en est mordu les doigts 3 ou 6 mois plus tard).

Avec les personnes plus expérimentés, il faut les choyer et passer pas mal de temps en one-to-one pour les faire monter en compétence rapidement sur le framework maison, les outils internes, les conventions traditionnelles, etc. En effet la transition et la courbe d'apprentissage sur une nouvelle techno ne sont pas toujours faciles à accepter : la tendance peut vite à reprendre ses vieilles habitudes, celles qui marchaient dans le contexte précédent.

Le pair-programming est un bon outil pour se familiariser avec du code : à consommer sans modération. L'autre truc qu'on fait de temps en temps avec des nouveaux, ce sont des journées de remaniement.

Le principe est simple :

  1. on identifie des "trucs moches" dans le code (le nouveau est souvent bon pour ça)
  2. tout le monde se met en binôme derrière un écran
  3. on lance un chrono de 30 minutes
  4. chaque binôme se lance dans un remaniement
  5. au bout de 30 minutes, on fait tourner les binômes
  6. on recommence jusqu'à la pause de midi, puis du soir

Ce petit exercice permet de mettre un peu de "fun" dans des tâches souvent bas niveau et répétitives, de la gamification.

Bien sûr ces petits trucs valent quand le nouveau collaborateur est arrivé. Avant il faut le convaincre, au délà des salaires, des conditions de travail (et de déplacements), parmi les éléments techniques à mettre en avant il y a la différence fondamentale éditeur v. SSII. D'un côté des projets sur le long terme dans lesquels on peut se projeter, de l'autre des projets qui s'enchaînent et pas toujours très qualitatifs ! Même si les SSII parleront eux de logiciels vieillissants et sclérosés sur des technos rétrogrades, en comparaison de leurs projets toujours innovants pour des clients à la pointe des technologies dans un univers où on peut devenir "chef de projet" (il paraît que ce serait le graal).

Petit Euler deviendra grand

mercredi 30 octobre 2013 :: perrick :: Développement :: aucun commentaire :: aucun trackback

J'ai découvert le Projet Euler en 2009. J'avais pris le temps de résoudre à l'époque les 7 premiers problèmes de cette plateforme pour mathématiciens / informaticiens. Quatre longes années plus tard, j'ai repris le fil : le nombre de questions disponibles est désormais largement plus important, ça devient vertigineux. Par contre l'équipe qui gère le site a eu la bonne idée d'ajouter des badges et des niveaux...

Je suis donc fier d'afficher mes 2 premiers badges, après 20 bonnes réponses :

Je suis surtout content de refaire un petit peu de maths ! Le CRUD, c'est bien mais écrire de "vrais" algorithmes, c'est pas mal non plus...

Nginx, un serveur web pour demain ?

jeudi 4 juillet 2013 :: perrick :: Développement :: un commentaire :: aucun trackback

Dans ma liste des trucs à tester côté "server web", il y a longtemps que j'ai mis lighttpd puis Mongrel2. Et puis le temps passe, sans que je m'y penche, ni sur l'un ni sur l'autre.

Sur un tout autre registre, Guillaume - un nouveau stagiaire - est arrivé lundi : la première étape est souvent de configurer un serveur complet (avec FreeBSD) et/ou sa propre machine (avec la distribution de son choix). Pour la première fois, ce n'est pas Apache qu'il a chois mais Nginx. Et puis aujourd'hui j'apprends que Nginx just became the most used web server among the top 1000 websites. Je crois qu'il était temps que je mette à jour cette petite liste des choses à tester... Demain ?

Un truc à suivre : TakeOff - en janvier 2013 à Lille

mercredi 17 octobre 2012 :: perrick :: Développement :: aucun commentaire :: aucun trackback

Une conférence tout en anglais avec des intervenants de qualité dans le monde du web ET à Lille, c'est désormais sur les rails. Ou devrais-je dire sur la rampe de lancement : TakeOff a choisi la métaphore spatiale pour se positionner... From server side to pure front end and design, from new languages, web frameworks to development techniques or typographic tricks, Take Off is your chance to discover how the Web will evolve in the coming year.

Ce sera donc les 17 et 18 janvier 2013 à Euratechnologies... Et le teasing pour les speakers - proche d'un calendrier de l'avent - mérite déjà le détour. Il ne manque que des balises <a name="XXX"> pour vous pointer vers la bonne section mais les commentaires HTML (à voir dans le source) sont jolis alors on pardonne...

Code as Craft : le blog technique d'Etsy

vendredi 30 mars 2012 :: perrick :: Développement :: aucun commentaire :: aucun trackback

Ce n'est pas si souvent que je découvre un nouveau blog intéressant : celui de l'équipe technique d'Etsy vaut le détour. Et pas seulement parce qu'il considère le développoment logiciel comme un artisanat : Code as Craft. Au delà du clin d'oeil à Marcus Baker et à un bouquin que j'avais bien aimé, j'y ai trouvé du contenu intéressant pour le développement d'une équipe de dev. Avec une mention spéciale pour Optimizing for developer happiness...

Alors que l'UTF8 a pris son envol, Twitter rame un peu

jeudi 11 février 2010 :: perrick :: Développement :: aucun commentaire :: aucun trackback

Il y a deux ans (oui oui, c'était en 2008), l'UTF-8 devenait l'encodage le plus utilisé sur le web. Il y a quelques semaines Google annonçait que bientôt 50% des pages de son index seraient en UTF-8...

Pendant ce temps, Twitter fait des siennes avec des problèmes d'encodage (sur Opera au moins)...

Bien sûr il y a aussi des défauts dans la CSS...

Et moi qui pensait qu'ils n'avaient que des problèmes de charge ! Heureusement qu'ils sont de plus en plus à bosser sur le projet ;-)

Twitter Code Swarm from Ben Sandofsky on Vimeo.

Conférence sur la Qualité Logiciel au LORIA

mercredi 3 juin 2009 :: perrick :: Développement :: aucun commentaire :: aucun trackback

Petite tranche d'auto-promotion puisque je viens de terminer mon support numérique pour demain... J'ai été invité à participer à un séminaire au sein du LORIA sur la qualité et développement logiciel. Au programme pour moi, un retour d'expérience sur les pratiques collaboratives que nous utilisons dans OpenTIME ! C'est la première fois que je fais une conférence dans le monde universitaire : reste à voir si c'est si différent des conférences PHP - de Paris, Londres ou San José.

Des tests unitaires pour couvrir des process

jeudi 12 juin 2008 :: perrick :: Développement :: 2 commentaires :: aucun trackback

L'équipe de No Parking s'est largement étoffée depuis 10 mois : trois nouveaux développeurs m'ont rejoint. Histoire de partager 65 000 lignes de code d'opentime : elles ne sont pas toujours faciles à apprivoiser... En plus il faut surtout continuer à avoir une haute qualité de code pour chaque release. Et comme on peut en faire presque tous les jours, la tâche peut être rude.

Parmi les petits trucs qui aident, nous avons mis en place une gamme un peu spéciale de tests unitaires : ils vérifient non pas une fonctionnalité mais des propritétés sur les fichiers dans le dépôt. Ainsi on va vérifier que toutes les chaines de traduction existent bel et bien dans les trois langues : français, anglais et italien. On va aussi vérifier la concordance entre le numéro de la version courante et le dernier numéro dans le fichier de mise à jour. Bref tout un tas de vérifications (automatisées via le hook en post-commit dans Subversion) qui permettent de ne pas oublier ces petites choses qui font la qualité d'un logiciel au quotidien.

PS : merci à Gérald de m'avoir fait comprendre lors du PhpCamp de juin 2008 que ce "petit truc" pouvait en intéresser d'autres ;-)

Aller voir une pièce de code

mardi 8 mai 2007 :: perrick :: Développement :: aucun commentaire :: aucun trackback

Lors de mes deux passages aux XP days (à Malignes l'année dernière et à Paris il y a quelques semaines), j'ai assisté à deux Kata. D'abord celui de Emmanuel Gaillot & Christophe Thibaut -- A Fugue about Paradigms and Functional Programming -- puis celui de Régis Medina -- Refactoring: la voie vers l'abstraction.

A chaque fois, c'est avec un large sourire que j'ai quitté la salle : c'est très impressionant de voir du code naitre, pousser et grandir... Bien sûr ils avaient préparé leur démonstration. Exactement comme un jongleur s'est entrainer avant de monter sur scène. Il s'agit bien là d'une performance (au sens artistique du terme).

Pour un néophyte, les raccourcis clavier, ceux de l'IDE et aussi ceux de l'expérience auront parfois tendance à brouiller le chemin emprunté. Alors que le résultat final est juste beau : du code limpide, dense, expressif (même en Java).

Ceux qui voudront creuser la question pourront aller jeter un coup d'oeil du côté de CodeKata ou du DojoDeveloppement.

Un commit qui fait plaisir

vendredi 13 octobre 2006 :: perrick :: Développement :: 4 commentaires :: aucun trackback

Il y a un mois, Vincent - stagiaire chez No Parking - a mis en place un outil d'intégration continue pour suivre le développement d'openTIME. Il s'appuie sur un hook post-commit de Subversion. Le process suivant s'enchaine :

  1. destruction de l'installation précédente
  2. export du dépôt SVN
  3. attribrution des bons droits sur les fichiers
  4. création de la base de données
  5. configuration d'openTIME
  6. instanciation des variables globales
  7. lancement des 2893 tests unitaires
  8. envoi d'un email

Et aujourd'hui j'ai enfin obtenu le résulat que je souhaitais :

[nopkg opentime 1135] SUCESS !!!
Commit de perrick le 13/10/2006 à 16:30
opération effectuées :
Nouvelle image pour les rendez-vous [rdv]
fichiers concernés :
A : /grafx/class_rdv.gif

Unit testing
OK
Test cases run: 30/30, Passes: 2893, Failures: 0, Exceptions: 0

Dans Thunderbird, ça donne :
succès au post-commit

Dire que cela faisait 113 commits que je l'attendais : pas mal pour un vendredi treize.

Des tests de recette directement dans l'application en développement

vendredi 25 août 2006 :: perrick :: Développement :: 3 commentaires :: aucun trackback

Il y a deux ans déjà, j'avais écrit mes premiers test de recette avec SimpleTest. Pour des raisons de performances et surtout parce que le support JavaScript y est inexistant, nous n'avions pas été très loin. Depuis Selenium est arrivé avec un concept différent : au lieu d'émuler le navigateur, il s'en sert pour effectuer des tests. Principal avantage, on voit ce qui se passe concrètement !

Après un premier test concluant hier, j'ai passé mon après-midi à hacker Selenium pour l'intégrer dans mon univers de développement. Une fois compris son fonctionnement interne, je suis arrivé à :

Selenium dans openTIME

C'est assez original d'avoir l'application openTIME dans l'application openTIME via une iframe mais on s'y fait vite. Le gros avantage, c'est que tous mes paramètres de configuration sont pris en compte directement au lancement des tests. Il me reste juste un souci avec Opera (que j'espère mineur) et ce sera le bonheur...

Trouver les points de levier dans le code

jeudi 25 mai 2006 :: perrick :: Développement :: aucun commentaire :: aucun trackback

L'objectif du remaniement n'est pas uniquement d'avoir du code joli. Il est aussi d'avoir du code malléable : de trouver les points de levier. Ceux qui feront qu'il devient facile de faire évoluer son application.

Reste à trouver ces points : ils ne sont que très rarement évidents au début du développement. J'ai même l'impression qu'ils sont impossibles à anticiper. Le client, la mode, la couleur du ciel : tout participe à l'évolution des fonctionnalités. Pas la peine alors d'essayer de les anticiper.

Plutôt que de les chercher, j'ai parfois l'impression qu'ils émergent naturellement grâce à un remaniement continue. J'en ai encore eu l'exemple cette semaine : j'ai installé la dernière version d'Opera -- version 9 béta. Premier défaut, ils ont changé le raccourci pour ouvrir un nouvel onglet (le très mozillien Ctrl + t, au lieu de Ctrl + n). Deuxième défaut plus génant : une anomalie sur la priorité des champs <input>. Forcément la grille de saisie des temps dans mon logiciel maison contient 6 des ces boutons. Autant dire que je suis assez sensible à ce qu'il se passe quand on appuie sur Entrée au lieu de cliquer sur tel ou tel bouton.

Read next

Une bible pour le remaniement

lundi 15 mai 2006 :: perrick :: Développement :: aucun commentaire :: aucun trackback

Ce n'est pas souvent qu'après quelques heures un bouquin devienne une référence : c'est exactement ce qui m'est arrivé avec Refactoring: Improving the Design of Existing Code. Martin Fowler a écrit avec Kent Beck et quelques autres une bible. De celles qu'on relit jour après jour.

En deux jours sur la table au bureau, ce livre est déjà passé par toutes les mains. Il permet tout simplement de créer un vocabulaire commun au sein de l'équipe de développement. Dans les phases d'apprentissage -- une fois que le code marche -- il devient une aide très précieuse par son côté systématique. Juste dommage que ce vocabulaire soit anglophone encore une fois.

Et puis il faut avouer que cette exploration est largement aidée par la batterie de tests que nous avons sur openTIME. En attendant d'acheter le livre, un détour par le site refactoring.com pourra peut-être s'avérer utile à quelqu'un. D'ailleurs ce quelqu'un pourrait très bien être moi-même : je viens d'y découvrir le Split Loop. Et j'adore découvir des remises en cause de mes pratiques.