La preuve par l’exemple

Par Julien Maury 14 avril 2014


Je publie cet article pour vous partager une mauvaise expérience ce jour.

La bonne information est compliquée à trouver. Quand on n’y a pas accès ou difficilement il faut persévérer. Ce qui s’est passé aujourd’hui me l’a montré. Je préparais une grosse mise à jour pour un de mes plugins en appliquant de nouvelles méthodes de code.

Pour sécuriser la mise à jour j’avais fait appel à des bêta testeurs (14 ont répondu présent) au cas où j’oublierais de tester une configuration particulière. Preuve qu’en voulant bien faire on ne fait pas toujours bien : j’avais zappé les différentes versions de PHP dont antérieures à 5.3 et tous mes testeurs devaient tourner sous la bonne version de PHP. Utilisant à tire larigot (oui je parle comme un vieux :D ) le mot-clé static:: dans mon code, la mise à jour a tout simplement cassé les sites où mon plugin était présent et où la version de PHP était ancienne.

2ème erreur : une option par défaut laissée à « no » au lieu de « yes » et c’est une fonctionnalité qui s’évanouit en apparence pour l’utilisateur. Effet « downgrade » !

Et pourtant…

Et pourtant j’avais pris le soin de bien choisir mon framework pour les metaboxes dans cette optique. Et pourtant j’ai fait tester le plugin avant de pousser l’update sur wordpress.org. Et pourtant j’ai veillé soigneusement à conserver les mêmes clés pour les postmeta définis avec la metabox ainsi que les tailles d’images prédéfinies.

Ainsi j’évite à l’utilisateur de perdre toutes les données réglées sur chaque post et d’avoir à régénérer toutes ses miniatures.

Et pourtant dév en mode DEBUG of course avec d’autres outils.

C’est pas moi c’est la faute à WP !

En développant des plugins pour wordpress.org contrairement à un site client on ne connaît pas l’environnement dans lequel l’extension sera utilisée. Donc si on veut inclure tout le monde on développe pour PHP 5.2.4 ou alors on dév pour une version spécifique de PHP mais on le signale ou on prévoit un système d’avertissement.

WP n’a rien à voir dans tout cela, c’est juste le dév qui a oublié de tester son code sous différentes versions de PHP avant de pousser son update. En cela problème de stabilité ce qui est assez paradoxal étant donné l’objectif de maintenance de départ #fail :/

Oui mais au final

Au final, je pourrais me trouver toutes les excuses du monde en me disant que je ne peux pas gérer tous les cas de figure, qu’un ou deux réglages à reconfigurer pour un plugin gratuit osef ! Que des sites tournant sous PHP en dessous de 5.3 ne sont pas dans les clous de toute façon.

Bah non, seul le résultat compte, peu importe la bonne volonté et l’énergie mis dedans et même si je pense que le code est globalement meilleur.

Vous aurez beau réparer rapidement vous aurez des réactions différentes, d’abord la radicale :

Users should have been warned that a routine update would require a PHP upgrade. This should have been noted in the update description. Stability and predictability are fundamental requirements for a production environment.

Upgrading PHP may be advisable, but it is not a trivial procedure, particularly when it involves adjusting other dependencies, such as mod_security, memory, etc.

I would rather discontinue using the plugin, rather than risking any more such surprises!

Ensuite la compréhensive :

Yes, it is working properly now! Thanks so much for the quick fix!

Le donneur de leçons (1ère réaction) m’importe peu au final si ce n’est que fondamentalement sa remarque me servira pour la suite.

Conclusion

Une preuve de plus que rien ne vaut la pratique pour apprendre en matière de code. La logique d’environnement est fondamentale, les processus aussi. En cela quand on a pas accès à la bonne information c’est plus compliqué, on doit apprendre tout seul sauf quand un blogueur partage sa mauvaise expérience avec vous :D.


2 commentaire(s)

  1. Ewen dit :

    Eh à ce qu'il parait, c'est en faisant des erreurs que l'on progresse :)
    Merci pour le partage de mauvaise expérience avec nous.

    Je crois que la difficulté en soi n'est pas de produire un plugin quel qui soit, mais de le rendre "cross-public",
    "cross-server" et "cross-browser"

    Perso, c'est pour cela que je bosse que sur site client et environnement connu, idéalement PHP 5.4+ ou sinon en local.

    Et au fait, quel est donc ce fameux plugin ?!

  2. Julien Maury dit :

    C Jm Twitter Cards :D, mais les bugs sont corrigés depuis.