Une entreprise paie chaque mois un logiciel qu'elle ne maîtrise pas, dont la facture
grandit avec ses effectifs. Voici comment je l'ai remplacé par un outil interne,
conçu, développé et mis en production en deux mois.
Le problème
THF-ES compte une quarantaine de collaborateurs, dont plus de la moitié sont des
techniciens itinérants intervenant sur des pylônes et des antennes relais partout en France.
Leurs comptes-rendus passaient par Kizeo Forms, une solution SaaS facturée
à l'utilisateur. Deux coûts : un abonnement qui grandit avec l'effectif, et surtout une
dépendance totale à un prestataire externe sur un outil devenu central à l'activité.
La mission
Développer le remplaçant à partir d'une page blanche : une application hébergée et
maîtrisée en interne, couvrant les quinze formulaires métier existants, utilisable
au pouce depuis un smartphone en haut d'un pylône. Deux mois pour livrer.
Le choix qui a tout changé
Les quinze types de rapports ne sont pas codés en dur. Chacun est un
handler implémentant une interface commune, découvert automatiquement
par le conteneur de services de Symfony. Ajouter un seizième type de rapport, c'est
écrire une classe — sans toucher une ligne du code existant. L'entreprise peut faire
évoluer son outil sans refonte.
L'obstacle
Le développement tournait sous PostgreSQL dans Docker, la production sous MariaDB chez
Infomaniak. Doctrine masque cette différence sur les requêtes courantes, mais pas sur les
migrations de schéma : syntaxe d'altération, contraintes et fonctions natives divergent.
Chaque migration sensible a été rendue consciente de sa plateforme, pour garder
un dépôt unique fonctionnant des deux côtés.
Le résultat
L'application est en production et utilisée quotidiennement. Chaque push
déclenche son déploiement automatique — dépendances, migrations, cache — sans aucune
manipulation sur le serveur. THF-ES a résilié son abonnement Kizeo et maîtrise désormais
son outil comme ses données.