Paris, le 5 avril 2013 La loi des 2 pieds 2 vendredi 5 avril 13 * Loi des 2 pieds ! * Si vous n'êtes en train d'apprendre ou de contribuer, passez à autre chose ! * Ne vous sentez pas obligé de rester ici * Cette conférence n'est pas technique ! * On apprend pas comment utiliser Silex ! * Un simple retour d'expérience, pour partager les erreurs, succès ! * A la fin, un regard sur cette année passée
Paris, le 5 avril 2013 4 vendredi 5 avril 13 * The ebook alternative
* Startup dans le monde du livre numérique
* Plateforme compléte de diffusion et de lecture de livres numériques
* Silex
* Pour voir si vous avez suivi ;)
* Nous allons y revenir ... * Ruby
* J'ai vu d'autres choses, d'autres approches, car je pense "le bon outil pour le bon besoin" * Symfony
* Découverte en 2007 (Symfony 1.0 !)
* Application en SSII (responsable technique)
* Migration progressive jusque Symfony2.0
Paris, le 5 avril 2013 L’entreprise • Startup • Tout à construire 7 vendredi 5 avril 13 * Startup
* Nouvelle société
* Nouvelle branche (livre numérique)
* Tout à construire, tout à faire, sur une équipe réduite
Paris, le 5 avril 2013 Le projet 8 vendredi 5 avril 13 * Projet de 0 * Liberté totale sur tout les choix * Seule contrainte : il va falloir le maintenir
Paris, le 5 avril 2013 L’équipe • Experts (ou presque) • Sentiment d’être contraint 9 vendredi 5 avril 13 * Equipe d'experts => 2 séniors, 1 débutante avec de grands idéaux => Expérience significative en Symfony 1/2 * Le sentiment d'être plus souvent contraint qu'aidé par le framework
Paris, le 5 avril 2013 Les projets 10 vendredi 5 avril 13 * Sur les projets de la société (PHP, Symfony, Silex, Ruby bulk, Rails), 2 retenus * Projets typiques pour appuyer mon propos
Paris, le 5 avril 2013 Warehouse • Entrepôt de livres numériques • Beaucoup de traitements métiers • Uniquement des API 11 vendredi 5 avril 13 * Un projet qui sort des sentiers battus * Beaucoup de traitements métiers * Stockage de fichier, watermarking, protection DRM, ... * On utilise pas trop les fonctionnalités du Framework * Uniquement des APIs * Part minime du fonctionnement général
Paris, le 5 avril 2013 Backend • Ecrans d'administration • Ecrans de reporting de données • Connexion/profils utilisateurs 12 vendredi 5 avril 13 * Un projet "classique" * Des écrans qui servent d'interfaces pour création/modification de données * Un peu de calcul, mais sans plus * Profils utilisateurs * Ecrans à contenu adaptables
Paris, le 5 avril 2013 Les débuts, l’euphorie • Grisé par la feuille blanche • Récupération des bonnes idées • Arborescence • ORM • Twig • Adaptation de ce qui gène • Controleurs partagés 13 vendredi 5 avril 13 * Feuille blanche * Grisé par le "tout à faire" * Euphorie du début * On récupère les bonnées idées * Arborescence * Découpage propre * ORM * Doctrine * On garde toute la couche * Twig * C'est tellement pratique de l'utiliser * On adapte celles qui nous gènes * Controlleurs partagés * On construit des controlleurs qui sont réutilisables, et utilisés par plusieurs routes
Paris, le 5 avril 2013 La maintenance, la désillusion 14 vendredi 5 avril 13 * Puis, un jour, il faut maintenir le projet * Le backend évolue * il faut rajouter des écrans * Modifier les traitement métiers
Paris, le 5 avril 2013 ORM «Mais pourquoi on a gardé ça ?» Tout ce qu’on voulait éviter, les contraintes sans la souplesse 15 vendredi 5 avril 13 * Système rigide
* Qui n’a jamais pesté après Doctrine pour faire une requête un peu compliquée ? * Perte de performances * Verbosité
Paris, le 5 avril 2013 Sécurisation • Chaque controleur vérifie l’utilisateur 16 vendredi 5 avril 13 * D’un code simple, on est tombé dans le simpliste * Duplication de code * Difficulté de maintenance, d’évolution
Paris, le 5 avril 2013 Tasks «Mais pourquoi on a pas utilisé le composant Console ?» On a réinventé la roue 17 vendredi 5 avril 13 * Emporté par l'élan, on a fait une monumentale erreur * Ecriture de notre propre librairie de commandes CLI, mais fonctionnellement loin du composant Symfony
Paris, le 5 avril 2013 Tasks «Mais pourquoi on a pas utilisé le composant Console ?» On a réinventé la roue Et en plus, elle est carrée :/ 18 vendredi 5 avril 13 * Emporté par l'élan, on a fait une monumentale erreur * Ecriture de notre propre librairie de commandes CLI, mais fonctionnellement loin du composant Symfony
Paris, le 5 avril 2013 Configuration • Gestion et accès • Valeurs par défaut • Gestion multi-environnement 19 vendredi 5 avril 13 * Gestion et accès facile * Pimple est cool ... * ... mais il faut l'alimenter :/ * Valeurs par défaut * Comment éviter 10mn de configuration à chaque MEP * Gestion multi-environnement * ça semble simple, hein ;)
Paris, le 5 avril 2013 ORM-- ; DBAL++ • Retrait de l’ORM • Conservation de la couche DBAL 21 vendredi 5 avril 13 * Retrait ORM * Tout ce qui est Entity, Repository, bref, le code auto-généré * On ne passera plus par du code pour accéder à la base de données * Conservation de la couche DBAL * Facilité d'accès à la connexion * Gestion des erreurs * Protection des requêtes * Encapsulation "simple"
Paris, le 5 avril 2013 Sécurisation «Comment faire sans le composant Security ?» Middleware Silex 22 vendredi 5 avril 13 * C'est pas super, mais c'est un quickwin
Paris, le 5 avril 2013 Difficultés de migration • Eviter le «tremblement de terre» • Cohabitation • Difficulté de maintenir 2 versions en parallèle 23 vendredi 5 avril 13 * Refactoring "tremblement de terre" * On ne peux pas investir X jours sans produire de la valeur * On fait la base, le nécessaire, puis ça sera du continue * Cohabitation * On est plus devant une feuille vierge * On "paye la note" * Maintenance * Une petite modif ? Ah bah non, c'est dans un code à migrer
Paris, le 5 avril 2013 Tiens, une nouvelle bonne idée ! • Instauration de la notion de services • Tiens, une 3ème organisation 25 vendredi 5 avril 13 * A force de se renseigner, on trouve de nouvelles idées * Le découpage est plus proche de notre approche par profil * ça colle, on y va * Nouvelle organisation * Alors que le refactoring précédent n'est pas terminé, on s'apprète à introduire une 3ème approche * Alerte * On va trop vite, on se laisse trop porter par le vent
Paris, le 5 avril 2013 Tiens, une nouvelle bonne idée ! • Instauration de la notion de services • Tiens, une 3ème organisation ALERTE ROUGE ! 26 vendredi 5 avril 13 * A force de se renseigner, on trouve de nouvelles idées * Le découpage est plus proche de notre approche par profil * ça colle, on y va * Nouvelle organisation * Alors que le refactoring précédent n'est pas terminé, on s'apprète à introduire une 3ème approche * Alerte * On va trop vite, on se laisse trop porter par le vent
Paris, le 5 avril 2013 Dis-cu-tons ! • Notre vision a fortement changée en quelques mois • Sur Silex • Sur notre métier • On se pose et on parle 28 vendredi 5 avril 13 * Vision * En quelques mois, on est fortement monté en compétences sur Silex (intrinsèque et bonnes pratiques) * Nous avons découvert notre métier, et ses contraintes * Capable de voir et comprendre les erreurs qui ont été faites * Discussion * On prend le temps de se poser, d'échanger sur les bonnes idées, les gros ecueils, ...
Paris, le 5 avril 2013 Refactoring, bis • Nouvel arbitrage • Nouvel investissement • Guidelines pour éviter que ça ne se reproduise 29 vendredi 5 avril 13 * Il faut trancher en fonction de différents indicateurs
* Gène à la maintenance
* Portée de la modification
* Temps de développement * On se donne des bonnes pratiques, à suivre pour la cohérence générale et pour ne pas que ça se reproduise
Paris, le 5 avril 2013 Retour sur les projets • Presque tout les retours concernent le backend • Warehouse principalement pour les bonnes pratiques 31 vendredi 5 avril 13 * Backend * La plupart des retours auraient pu être évités dans un contexte plus formel * Chacun est parti dans son coin, sur ses bonnes pratiques, sans le cadre du framework * Warehouse * Quelques errements, mais globalement maitrisé * L’erreur principale concerne surtout le composant Console
Paris, le 5 avril 2013 Si c’était à refaire • Backend : Symfony2 • Warehouse : Silex 32 vendredi 5 avril 13 * Backend * Symfony : Trop besoin d'outils déjà existant * On a trop réinventé la roue sur ce projet * Warehouse * On continuerais avec Silex * Ce projet contient principalement du code business, sans trop de code classique * Trop peu d'utilisation des composants de Symfony, trop de hors chemin * On est persuadé que Symfony nous aurais demandé du travail d'adaptation (Bundle, modèle, ...)
Paris, le 5 avril 2013 Les leçons à retenir • Indicateur : nombre de composants utilisés • Se poser la question des composants utiles tôt • Est-ce un projet « standard » ? 33 vendredi 5 avril 13 * Réinstallation composant * Si on en installe trop, c'est qu'on fait quelque chose de mal * Quels composants ? * Se poser la question au plus tôt de ce qu'il faut * Projet standard * Si Symfony convient, pourquoi vouloir en sortir ? * Ne pas se laisser porter par le vent des nouveautés