Symfony, c'est fini…

A POSTCARD FROM CAPRI

Et dire que c'était le framework de mon premier amour ! Sous ce titre un peu ridicule ((en encore, vous ne me voyez pas le chanter devant mon écran)) se cache un véritable cri du cœur. Ou pourquoi j'ai décidé de ne plus utiliser les technos de Sensio.

Mise à jour : deux ans plus tard, j'ai écrit un `retour d'expérience sur ma migration vers Python et Django`_.

Un peu d'histoire

Comprendre les propos qui vont suivre nécessite d'avoir un aperçu de la vie du framework. Si vous n'aimez pas l'histoire, vous pouvez passer directement à la section suivante.

La première version de symfony est publiée en 2005. La version 1.0 voit le jour début 2007. Mi-2008 débarque la version 1.1, avec une refonte majeure de l'architecture interne, et l'arrivée (notamment) du framework du formulaire. La version 1.2 suit rapidement, fin 2008, ajoutant pas mal de fonctionnalités sympa. Enfin, fin 2009 sortent en parallèle les versions 1.3 et 1.4, avec l'intégration d'un beau mailer tout neuf, pas mal de travail sur les forms, et encore d'autres trucs sympa.

Ensuite ? Plus rien… Sensio a en effet décidé de ne pas poursuivre le développement de symfony en tant que tel, mais de réécrire le projet de zéro pour donner naissance à Symfony2. La branche 1.x ne verra donc pas d'ajout de nouvelles fonctionnalités, et ne sera plus supportée après 2012.

La nouvelle version du framework a été révélée la première fois en février 2010, mais l'idée de la réécriture date de bien avant. Je me souviens avoir assisté à une présentation Symfony par Fabien Potencier en 2008, et déjà, la réécriture du projet était évoquée.

Symfony2, au moment de la publication de cet article (juin 2011), est encore en beta, et la stable est attendue pour juillet.

Awesome framework is awesome !

Thumbs up 35mm

Contrairement à ce que mon titre pourrait laisser croire, je tiens symfony 1.x et ses créateurs en haute estime. Malgré quelques erreurs de jeunesse et problèmes qui apparaissent à l'usage, le framework est de haute qualité. ORM, architecture MVC, formulaires, outils de tests unitaires et fonctionnels, gestion des caches, générateur d'admin, documentation abondante et j'en passe en font une solution complète et robuste.

Mais plus important, symfony a contribué à diffuser les bonnes pratiques et outils de développement à une grande échelle. Avant symfony, aucun projet dans le monde PHP n'avait autant insisté sur l'importance de la programmation objet, de l'architecture du code, des tests automatisés, des développements itératifs, etc.

La plus belle réussite du projet, à mon humble avis, est d'avoir aidé le monde du développement web à sortir de son amateurisme bon enfant, pour le hisser vers les standards de compétence qu'on peut trouver dans d'autres branches du développement logiciel.

Bien entendu, on trouvera toujours une palanquée de zigotos se prétendant développeurs web parce qu'ils ont écrits trois lignes de PHP. Mais en s'imposant, symfony a aidé à séparer le bon grain de l'ivraie en permettant l'émergence d'une communauté de véritables professionnels.

C'est grâce à symfony et à son écosystème que j'ai découvert le développement itératif, les tests automatisés, et que j'ai eu mon premier contact avec les méthodes agiles. Et rien que pour ça, je tire mon chapeau à ce framework.

Vis ma vie de freelance

Mais alors, pourquoi aller voir ailleurs ? J'y viens.

Pour ceux qui ne sont pas encore au courant, sachez que je suis développeur web freelance. Ce qui signifie que je travaille seul, et que je dois assurer tous les aspects d'une prestation de développement web de A à Z (prospection, avant-vente, réponse aux appels d'offre, développement, gestion de projet, gestion administrative et commerciale, maintenance, etc.)

Nous vivons dans un monde qui évolue trés vite. Chaque semaine voit son arrivée de nouvelles technos, certaines demeureront, d'autres disparaitront. Mais décider d'apprendre à utiliser une certaine technologie, comme un framework, pour pouvoir ensuite l'inclure dans mes prestations, c'est un choix difficile, et un investissement trés lourd.

C'est un investissement trés lourd, puisque cela signifie que je vais devoir me former, lire de la doc, faire des tutos, tester sur des petits projets personnels, et tout cela prends beaucoup de temps. Et quand on est freelance et qu'on facture à la journée, je peux vous dire qu'on est trés conscient que le temps, c'est de l'argent.

C'est un investissement trés lourd, puisque cela signifie que j'accepte, pendant un temps plus ou moins long, d'être moins efficace dans mon travail. Une techno donnée ne me permettra d'être efficient que lorsque je la maîtriserai suffisamment pour passer plus de temps à produire qu'à chercher de la doc.

C'est un investissement trés lourd, puisque cela signifie aussi que le premier projet vendu dans cette techno sera hasardeux et commercialement risqué. Et comme je suis honnête, cela signifie aussi que je vendrai mon jour de travail moins cher à mes clients, parce que je ne peux garantir à 100% l'application des bonnes pratiques relatives à cette techno.

Bref, décider d'ajouter une techno à ma trousse à outil, c'est un investissement lourd, et comme pour tout investissement, j'en attends un bénéfice. Si je galère pendant 6 ou 9 mois pour redevenir efficient, j'espère que l'outil choisi restera valable pendant au moins 4 ou 5 ans.

Symfony, I am disappoint !

death by drowning

Mon véritable problème est qu'avec symfony, j'ai l'impression de ne jamais avoir récolté les bénéfices de mon investissement.

Symfony est une trés bonne techno. C'est aussi une techno qui est trés loin d'être parfaite, et qui aurait nécessité encore beaucoup d'ajustements. Sauf que… Dans le cul Lulu ! Parce qu'en 2009, boum ! Branche 1.x gelée ! Les nouvelles fonctionnalités ? Pas la peine, on est en train de tout réécrire ! Les bugs vraiment bloquants et complexes à corriger ? Trop dur, c'est un problème d'architecture ! Mais pas d'inquiètude, on est en train de tout réécrire, ça sera corrigé dans 2 ans.

Malgré tous mes efforts, je ne parviens pas à me débarrasser du sentiment que les nombreux arguments avancés à l'origine pour promouvoir symfony n'étaient que de la merde marketing.

Sensio mettait en avant que symfony était supporté par une entreprise, et pas une communauté de hippies pas sérieux. Qui a essayé de soumettre des bugs après le gel de la branche 1.x sait ce qu'il en est de ce fameux support. D'ailleurs, à ma connaissance, Kris Wallsmith, release manager de la dernière version stable, n'est pas un employé de Sensio.

Sensio mettait en avant que symfony était une techno pérenne, avec des LTS et tout le toutim. Sauf qu'une LTS ne sert pas à grand chose si le développement du projet s'arrête derrière. Ah, ça, mes clients à qui j'ai vendu une techno « LTS », ils vont bien rigoler en 2012, quand je leur dirai qu'ils faut réécrire leur site s'ils veulent continuer à bénéficier de mises à jour de sécurité.

Sensio mettait en avant que symfony était une techno bâtie sur l'expérience, inspirée par les meilleurs projets de l'époque. À l'utilisation, on s'aperçoit trés vite (et dans la douleur) que symfony est surtout bati empiriquement. Tous ceux qui ont essayé de créer un site multilingue, ou des formulaires imbriqués, ou d'utiliser le générateur de backend sur des « vrais » projets me rejoindront probablement.

Sensio mettait en avant que symfony était abondamment documenté. Sauf que l'info, elle peut être dans le livre d'introduction, ou dans le tuto de démarrage, ou dans le livre pratique de noël, ou dans le livre de référence, ou dans le tuto sur les formulaires, ou dans le tuto spécifique sur doctrine, ou dans un billet sur le blog, etc. Et attention à ne pas se gourrer entre la version doctrine ou propel du document. Qui plus est, les mêmes docs ne sont pas forcément disponible selon la version du framework, et bien évidemment, via un moteur de recherche, on ne sait jamais sur quelle version on va tomber. Bref, la doc de symfony, elle est trés bien sur le papier, mais en pratique, c'est vraiment casse-bombon.

D'ailleurs, c'est ça tout le problème de symfony. C'est toujours trés bien sur le papier, mais en vrai, ça laisse un petit goût bizarre dans la bouche Une petite impression de finalement, c'est pas si bien que ça. Symfony, c'est une techno pas finie, pas mature, et Sensio a choisi de tout reprendre à zéro plutôt que de terminer ce qu'ils avaient commencé.

Et maintenant ?

En tant que freelance, professionnel du développement web, j'ai maintenant deux possibilités :

  1. Je persévère, je me mets à Symfony2, je prends le temps de me former, je paie les pots cassés pendant quelques mois, j'attends que la techno soit stable, j'attends que les compétences se diffusent, j'attends que la communauté atteigne une taille suffisante, j'attends que les plugins et extensions apparaissent, j'attends les premiers retours d'expérience sur la mise en place de vrais projets, sans garantie que tout ne recommence pas dans 5 ans.
  2. Je vais voir ailleurs si je peux trouver mieux.
fly away

Alors, à votre avis, je fais quoi ? Et bien, j'ai fait ce que tout bon développeur web doit savoir faire : j'ai été curieux. J'ai sauté une grande marche, et je suis carrément allé voir dans d'autres écosystèmes, d'autres communautés. J'ai testé python, j'ai testé flask, j'ai testé django, et ce que j'ai vu m'a plu.

Django, ce n'est bien sûr pas parfait, mais c'est aussi bien en pratique que symfony sur le papier. Ce n'est pas une techno de frimeurs, on n'en dit pas plus que ce qu'on en fait. L'avenir me dira si c'est un bon choix.

Pour conclure. Je ne dis pas que Symfony2 ne sera pas une techno géniale, et qu'elle ne doit pas être utilisée. Je ne dis pas que je ne toucherai jamais un projet en Symfony2. Je ne dis pas que prendre la décision de tout réécrire a été mauvaise. J'imagine que ce fut un choix trés difficile. Je dis et répète que j'admire et loue les équipes qui travaillent sur symfony, et que toutes ces remarques sont faites avec humilité, en ayant conscience que la critique est aisée, mais l'art est difficile.

Simplement, à mon niveau, pour mon cas personnel, je ne peux plus considérer symfony comme une techno viable.

Et rien ne me dit que dans 5 ans, le même schéma ne se reproduira pas. Rien ne me dit que dans 5 ans, Fabien Potencier ne va pas péter un boulon pour aller élever des chèvres dans le désert. Et alors, quel avenir pour symfony ?

Je suis allé voir ailleurs, et j'y ai trouvé mieux. Un petit pas pour l'humanité, mais un grand pas pour moi ?

Mise à jour : deux ans plus tard, j'ai écrit un retour d'expérience sur ma migration vers Python et Django.

Docutils System Messages

System Message: ERROR/3 (<string>, line 3); backlink

Unknown target name: "retour d'expérience sur ma migration vers python et django".