
Découvrez des conseils et des perspectives uniques sur le rôle de CTO, directement issus de mon parcours professionnel.
Cet article cherche à expliquer comment lePERMISLIBRE veille à maintenir une simplicité (donc une maintenabilité) produit & technique à travers l’exemple de la création de sa nouvelle offre de conduite accélérée qui a mobilisé des dizaines de personnes, d’équipes différentes sur plus d’une année complète. Si vous n’avez pas le temps de tout lire, vous pouvez directement vous rendre en fin d’article afin de connaitre les règles que l’on essaie de s’appliquer.
Après plus d’un an de travail,lePERMISLIBRE vient de sortir son offre d’apprentissage du permis de conduire en accéléré. Contrairement à notre formation standard où la réussite de l’examen peut mettre plusieurs mois (tout dépend de la motivation variable des élèves et du rythme qu’ils donnent à leur formation), notre promesse ici est de dispenser une formation complète et un passage à l’examen en moins de 2 mois. D’après nos premiers résultats, nous y arrivons même en moins d’un mois.
Cela en fait donc le mode de formation à privilégier pour ceux qui ont besoin du permis de conduire afin de débuter une expérience professionnelle rapidement ou ceux qui souhaitent mettre à profit leurs 2 mois de vacances estivales pour ne pas avoir à gérer leur apprentissage en parallèle de leurs études.
Sur le papier, cette formation est simple à comprendre, donc elle devrait être simple à mettre en place. En réalité, ce fut loin d’être le cas. Elle a ajouté de nouvelles contraintes que nous n’avions jamais eu à gérer jusqu’alors ce qui aurait pu se traduire par un ajout drastique de complexité produit, donc technique.
Voici les quelques règles de base que nous avons respectées durant une année entière afin de créer une nouvelle offre majeure sans perdre la simplicité de compréhension de notre plateforme.
La première des règles à respecter pour maintenir un produit simple est de trouver le réel problème à résoudre. Lorsque les utilisateurs ou le métier arrivent avec une demande de fonctionnalité, elle est déjà enrobée d’un contexte, de détails et de propositions de solutions.
Le problème avec cela, c’est que si la fonctionnalité demandée répond souvent au problème initial (avec plus ou moins de succès), elle s’intègre souvent mal avec les fonctionnalités existantes ou à venir. La mettre en oeuvre telle quelle aboutira donc à la création d’une complexité produit accidentelle, ce que l’on souhaite éviter à tout prix. En cumulant de petites complexités accidentelles sur de multiples fonctionnalités, on se retrouve irrémédiablement avec un produit complexe dans sa globalité.
Il y a un an, nous faisions la toute première réunion de lancement de notre projet de permis accéléré. Durant cette réunion, une quinzaine de personnes concernées étaient présentes et de nombreuses idées ont fusé sur ce à quoi devrait ressembler cette offre. Au final, rien de tout cela n’a été mis en place car l’objectif de cette première réunion était de trouver le réel problème à résoudre et non pas de sortir avec la solution à mettre en place.
L’obtention du permis de conduire en accéléré se réduit à une unique problématique : quelles sont les étapes chronophages d’une formation dite “standard” et comment allons-nous faire pour les raccourcir au maximum ?
Au moment même où l’on se pose cette question, nous nous rendons compte que finalement, ce n’est plus sur la création d’une offre de conduite accélérée que nous travaillons mais sur la réduction des délais d’apprentissage. Le permis accéléré ne sera que le packaging commercial des fonctionnalités et processus opérationnels que l’on mettra en oeuvre pour réduire nos délais d’apprentissage à leur strict minimum.
Comprendre cette distinction est fondamental, c’est elle qui nous permettra de penser un produit sans complexité et donc maintenable sur du long terme.
Lorsque l’on a réalisé que notre problématique était la réduction des délais et non la création d’une nouvelle offre, les différentes étapes du projet ont commencé à être visibles :
À ce stade nous arrivons à un embranchement où il devient à nouveau possible d’introduire de la complexité au sein de notre produit. lePERMISLIBRE va désormais fournir 2 types de formation différentes (standard et accélérée) là où il n’en existait qu’une auparavant. Certaines fonctionnalités n’étant disponibles que pour l’une ou l’autre des formations, cela complexifie la compréhension globale de nos règles métiers donc de notre produit au global.
Et si on se projette encore un peu, il y a 2 types de formations que nous ne proposons pas encore : la conduite accompagnée et la conduite supervisée.
Alors, est-ce une obligation que de créer des fonctionnalités qui n’ont de sens que dans un seul type de formation ? Pour moi, la réponse est (souvent) non. Cela nous amène à la deuxième règle produit que l’on essaye de s’appliquer au quotidien : lorsque l’on doit créer une fonctionnalité qui s’applique dans tel cas mais / sauf / à l’exception de…, il faut supprimer tout ce qu’il y a après le mais. Chaque mais est un si et chaque si est une nouvelle branche dans un arbre de décisions.
Dans notre cas “Réduire le délai de validation des démarches administratives pour le permis accéléré mais pas pour le permis standard”, il faut supprimer “mais pas pour le permis standard”.
Concrètement, cela se traduit par la création de fonctionnalités qui seront compatibles avec l’intégralité du produit et non pas seulement pour quelques scénarios bien définis à l’avance. Faire simple à long terme s’avère donc complexe à court terme.
Dans notre objectif de réduire les délais de formation dans un cadre de formation accélérée tout en restant compatibles avec l’ensemble de notre produit, nous en sommes donc arrivés à la création de 4 fonctionnalités majeures :
Ce que l’on voit ici, c’est qu’en enlevant le contexte de formation accélérée, nous avons été capables de penser et développer des fonctionnalités accessibles pour l’intégralité de nos utilisateurs. La compréhension produit s’en trouve facilitée ce qui implique que les développements techniques seront eux aussi facilités.
La formation accélérée devient finalement le simple regroupement obligatoire de fonctionnalités déjà disponibles mais facultatives. À travers ces obligations, à travers ce contrat de formation et avec un soutien pédagogique et opérationnel de nos équipes, la promesse initiale sera tenue pour l’obtention du précieux sésame.
L’histoire pourrait s’arrêter là mais ce serait trop simple. À ce stade, nous serions en mesure de rendre notre offre publique (nous l’avons d’ailleurs sortie en MVP privé pour obtenir des premiers retours terrains) mais cela aurait des effets secondaires assez néfastes pour la compréhension client et le service opérationnel qui en découle :
Désormais, la notion de formation accélérée n’existe presque plus dans nos réflexions. Si l’on veut maintenir un système simple et scalable, notre enjeu est plus global : comment gérer 4 types de formations, 2 types de boite différentes et 2 modes de financements soit 16 combinaisons différentes dans des centaines de villes en France ?
Nous avons donc du mettre 3 nouvelles fonctionnalités en place :
Ces fonctionnalités ont été pensées pour des cas d’usage que l’on n’a pas encore alors que nous aurions pu nous limiter à des cas d’usage que l’on a vraiment. Cela pourrait sembler contre-productif car à court-terme, cela se traduit par un léger surcout dans le temps de mise en place desdites fonctionnalités. Toutefois, si les cas d’usage n’arrivent jamais, nous aurons mis un peu plus de temps pour faire les choses correctement et si les cas d’usage arrivent, alors la quantité de travail à ce moment sera inférieure car ils auront déjà été prévus dans le fonctionnement existant. Ne restera donc qu’à se concentrer sur les nouveautés avec lesquelles ils viennent et non pas sur l’adaptation des fonctionnalités existantes en plus.
Savoir où l’on veut aller à moyen-terme et long-terme est donc la règle numéro 3 que l’on essaye de s’appliquer dans notre vision produit et technique. En sachant où l’on va, chaque brique que l’on ajoute quotidiennement devient un pas de plus vers notre vision au lieu de devenir un obstacle supplémentaire.
La quatrième règle qui me semble indispensable au maintien d’un système simple consiste en le fait d’avoir une approche module-first. Un module est une fonctionnalité complètement autonome dans son fonctionnement. Il est capable de gérer ses pré-requis ainsi que ses cas d’erreurs.
Si l’on reprend l’exemple de nos filtres en boutique, nous partons du principe que leurs valeurs seront pré-remplies pour être plus pertinents aux yeux de nos utilisateurs. Cela implique que les valeurs de pré-remplissage que l’on va utiliser proviennent probablement d’un autre module de notre application. Nous avons donc une fonctionnalité A qui repose sur le bon fonctionnement d’une fonctionnalité B.
Je trouve cela dangereux car le jour où la fonctionnalité B change de comportement, un risque de dysfonctionnement se crée sur la fonctionnalité A. Malheureusement, la personne qui travaillera sur B n’aura probablement pas connaissance qu’en changeant quelques règles métier, elle aura des impacts néfastes à des endroits inconnus (pour elle) de l’application.
Il faut à tout prix prévenir ce genre d’effets indésirables car ils sont vecteurs de frustration et de perte de temps, donc d’efficacité :
Ce qui est puissant avec cette approche module-first, c’est qu’elle vient naturellement avec la dernière règle à respecter pour la création d’un système simple et pérenne : il faut créer des composants réutilisables et réutiliser des composants déjà créés.
C’est quelque chose qui semble naturel une fois que l’on a un Design System mais cela reste valable même sur des développements techniques purs. Ré-utiliser des fonctionnalités ou des process existants permet de garder la logique métier à un seul et même endroit, donc à ne pas la dupliquer et devoir la maintenir à différents endroits.
Pour qu’une fonctionnalité soit pleinement ré-utilisable, elle doit être (au moins partiellement) configurable. Dans notre exemple de filtres pour la boutique, nous nous sommes rendus compte que nous avions les mêmes besoins pour notre module de réservation de leçons. Il a donc fallu créer un composant indépendant de son contexte (achat ou réservation) que l’on a au passage rendu configurable via les paramètres d’url. Grâce à cela, je suis capable de gérer ma boutique, mon flow de réservation ainsi que divers scénarios personnalisables via l’url pour des besoins marketing ponctuels ou pour accompagner un utilisateur qui aurait du mal à utiliser l’application de lui-même.
Les modules autonomes et personnalisables, en plus d’être simples à maintenir, sont aussi rapides à utiliser puisque le travail a déjà été fait. Ils permettent donc de créer de nouvelles fonctionnalités sur une base existante à une seule condition : il faut savoir faire des concessions sur la fonctionnalité parfaite pour ré-utiliser au maximum ce qui a déjà été créé et s’intégrer dans une vision d’ensemble plus simple à maintenir, donc à faire évoluer.
Si vous avez décidé de sauter tout le texte précédent pour arriver directement aux règles à respecter dans le maintien d’un système simple, les voici :
Transformons ensemble votre entreprise : contactez-moi pour découvrir comment mon expertise technique peut propulser vos objectifs business vers de nouveaux sommets de réussite.