Mission en cours · depuis 2023
SeineYonne, du champ au silo
Pour la coopérative agricole SeineYonne, je fais évoluer depuis 2023 l’application de gestion qui suit les exploitations des adhérents, leurs cultures, les contrats qualité et la collecte jusqu’au silo. De nouvelles fonctions métier, et en même temps une application plus rapide, plus cohérente et plus simple à faire évoluer.
- ≈ 40 %des évolutions du projet depuis 2023, 1er contributeur sur 8
- 10 h → 10 spour reporter le paramétrage des silos d’une année sur l’autre
- 92 %du code d’origine réécrit ou supprimé
- 80 %de mon temps, du front à la base de données
Le contexte
Un métier riche, longtemps géré sous Excel
Une coopérative agricole accompagne des centaines d’exploitations, année après année : ce qui est semé et où, les contrats aux cahiers des charges exigeants (agriculture biologique, industriels de l’agroalimentaire), les justificatifs à fournir, puis la collecte des récoltes jusqu’aux silos.
Chaque contrat a ses règles, chaque saison ses échéances. L’application réunit tout cela dans un seul outil, utilisé par les techniciens, les responsables de silo, les équipes qualité et les adhérents.
Au sein d’une équipe produit de huit personnes, en lien direct avec les équipes métier, j’ai rejoint le projet en février 2023. Cette application occupe 80 % de mon temps, du front aux vues PostgreSQL et aux endpoints Symfony qui l’alimentent. Le reste va aux autres applications de la coopérative.
- Champ
- Exploitation
- Contrats
- Collecte
- Silo
Le point de départ
Une application qui avait grandi vite
Comme beaucoup d’applications construites pour répondre rapidement au besoin, l’application avait accumulé, à mon arrivée, plusieurs bibliothèques d’interface, du code dupliqué et un outillage minimal. Plutôt qu’une refonte qui aurait gelé les livraisons, j’ai amélioré l’application au fil de l’eau, à chaque évolution.
Une interface unifiée
En 2023
Cinq bibliothèques d’interface coexistaient (Syncfusion, Bootstrap, Font Awesome, styles maison…), certaines chargées deux fois.
Aujourd’hui
Une seule bibliothèque de composants (MUI) et Tailwind pour la mise en page, un design system commun, une navigation adaptée au mobile et un mode sombre.
Syncfusion, présent dans 130 fichiers à son maximum, a été retiré entièrement.
Moins de code pour les mêmes fonctions
En 2023
Des pages d’administration copiées-collées, des fichiers de 600 à 800 lignes et du code qui ne servait plus.
Aujourd’hui
Des composants communs (boutons, fenêtres, grilles, listes de choix) utilisés dans des centaines de fichiers, un modèle unique de page d’administration et de grands nettoyages.
Des pages d’administration deux à trois fois plus courtes, plus de 17 000 lignes de code mort supprimées.
Une architecture lisible
En 2023
Des composants qui interrogeaient directement la base de données, un fichier principal et un fichier de routes de plusieurs centaines de lignes, des droits codés en dur.
Aujourd’hui
Une couche d’accès aux données commune, des routes organisées par domaine, des permissions stockées en base et administrables.
Un seul composant accède encore directement à la base, contre 28 au départ.
Un socle moderne et outillé
En 2023
Create React App et React 17, aucune règle de code appliquée, pas de TypeScript, deux tests.
Aujourd’hui
Vite et React 19, un formateur et linter appliqué à chaque commit, TypeScript, des tests sur les règles métier, une documentation technique et des outils d’assistance IA partagés.
Des montées de version par étapes, sans bloquer les livraisons, et une application qui se met à jour d’elle-même à chaque mise en production.
Performances
Des traitements de plusieurs heures ramenés à quelques secondes
Côté navigateur comme côté serveur, j’ai traqué les requêtes inutiles, regroupé les envois et réécrit les calculs les plus lents. Chaque optimisation est vérifiée sur les volumes réels, des centaines de milliers de lignes, avant sa mise en production.
- 10 h → 10 s
Passage à l’année suivante
Jusqu’à 740 000 lignes de paramétrage des silos à reporter chaque année : une seule requête au lieu d’environ 1,5 million d’allers-retours avec la base de données.
- × 1 400
Tableaux de pilotage
La page du chiffre d’affaires d’une année sur l’autre se charge jusqu’à 1 400 fois plus vite, avec des résultats vérifiés à l’identique.
- 2 requêtes
Préparation d’une nouvelle saison
Elle envoyait des milliers de demandes au serveur, l’une après l’autre. Elles sont désormais regroupées en deux envois.
- 250 → 5
Saisie en masse
Afficher 50 lignes à modifier demandait jusqu’à 250 requêtes, il en faut 5. À l’enregistrement, seules les valeurs modifiées sont envoyées.
- 1 requête
Fini les appels en boucle
La fiche d’un adhérent interrogeait le serveur toutes les 3 secondes tant qu’elle restait ouverte, l’accueil 40 fois en 20 secondes. Une seule demande suffit.
- 1 fois
Contrôles d’accès en base
Les droits de chaque utilisateur sont calculés une seule fois par requête, plutôt que pour chaque ligne lue : chacun ne voit que ses données, sans ralentir l’application.
Au-delà du code
Construire avec les équipes, pas seulement pour elles
Partir du terrain
Lors d’un atelier avec des utilisateurs, je les ai observés chercher une information. La recherche des pages de l’application est née de cette observation.
Construire avec le métier
Des règles définies avec les équipes, des barèmes validés avec elles et une démonstration en vidéo avant et après chaque développement.
Savoir renoncer
Un développement arrêté quand il n’était plus utile, une fonction retirée parce que personne ne s’en servait : moins de code à maintenir.
Une équipe qui avance ensemble
Pair programming, présentations internes, revues de code et documentation partagée.
Accompagner les utilisateurs
Un suivi des erreurs en production chaque semaine, et un outil pour voir l’application comme un utilisateur et reproduire son problème.
Rendre compte
Un compte rendu chaque jour et un résumé chaque mois : le client sait toujours où en est son application.
Ce que j’ai construit
Des outils pensés pour le quotidien des équipes
Une saisie guidée
Des formulaires qui appliquent d’eux-mêmes les règles de chaque contrat, avec une modification en masse pour aller vite.
Les justificatifs
Dépôt, réutilisation d’une année sur l’autre, génération automatique et suivi des pièces demandées par les partenaires.
Des formulaires sans développeur
Un éditeur visuel pour créer des questionnaires, les envoyer et suivre les réponses.
Un espace documentaire
Dossiers partagés et personnels, droits d’accès, versions successives et aperçu des fichiers.
Une place de marché interne
Des offres publiées par la coopérative, des commandes passées en ligne et leur suivi.
Des équipes autonomes
Des écrans d’administration au lieu de manipulations en base, des droits réglables par les administrateurs, des invitations et un support gérés sans développeur.
Zoom sur le générateur de formulaires
Questionnaires annuels, collecte de documents réglementaires : les équipes créent elles-mêmes leurs formulaires, les envoient et suivent les réponses, sans faire appel à un développeur. Ils ont remplacé peu à peu les outils tiers de formulaires, et les agriculteurs déposent eux-mêmes leurs documents réglementaires par un lien sécurisé.
Tout repose sur un standard ouvert, JSON Schema. Les besoins propres à l’application passent par des plugins : par exemple un champ qui vérifie un fichier officiel avant de l’envoyer, et prévient s’il est déjà à jour.
- Glisser-déposer pour ajouter et réordonner les champs, y compris dans des groupes.
- Champs conditionnels affichés selon la réponse donnée à une autre question.
- Annuler et rétablir chaque modification, pour expérimenter sans crainte.
- Aperçu du formulaire tel que le verra l’adhérent.
- Brouillons pour reprendre une saisie plus tard.
- Champs pré-remplis ou en lecture seule, avec des valeurs par défaut.
- Noms techniques générés à partir du libellé, et descriptions en Markdown.
- Campagnes d’envoi par e-mail, avec des formulaires publics et le suivi des réponses.
Zoom sur un outil d’aide à la décision
Pour certaines cultures, la coopérative doit évaluer un risque agricole parcelle par parcelle (ici, une céréale qui se couche avant la récolte) et le justifier auprès de ses partenaires.
J’ai conçu l’ensemble de la fonction, de la base de données à l’écran : une saisie des critères avec modification groupée, le calcul automatique d’une note et d’un statut, la génération du justificatif et un tableau de bord pour toute la coopérative. La même architecture a ensuite servi à une deuxième analyse.
React · TypeScript · Vite · MUI X (DataGrid Premium, graphiques) · Tailwind CSS · TanStack Query · React Hook Form · JSON Schema · Supabase / PostgreSQL · Symfony · Jest · Biome · GitLab CI · Netlify · Bugsnag
Autour de l’application
Du front à la base de données, et au-delà
Back-end de l’application
Les données derrière les écrans
Plus de 400 évolutions côté serveur : vues PostgreSQL pour les tableaux de pilotage, contrôles d’accès en base, tables des nouvelles fonctions, endpoints Symfony pour les exports et la génération de documents.
Application de collecte · Next.js
La collecte et les silos
L’application de la collecte des récoltes : gestion des silos, des stocks et des transferts, droits d’accès par site et connexion « en tant que » pour aider les utilisateurs.
Pour toute l’équipe
Sécurité, outillage et autres applications
Environ 70 % de vulnérabilités en moins sur trois applications de la coopérative, des contributions à l’intégration continue partagée et des outils d’assistance IA communs (Claude Code).
Ma façon de travailler
La technique au service de l’utilisateur
Comprendre le métier avant de coder
Saisons, parcelles, contrats, cahiers des charges : je traduis des règles agricoles complexes, souvent gérées sous Excel, en écrans que les techniciens utilisent au quotidien.
Soigner chaque détail
Des pages rapides, à commencer par les plus utilisées, un libellé clair, un cas particulier prévu : ces petits détails font la différence pour ceux qui utilisent l’outil toute la journée.
Penser à la suite
Chaque évolution est l’occasion d’assainir le code autour. L’application reste simple à faire évoluer, et le socle avance par étapes pendant que les nouvelles fonctions sortent.
Outiller l’équipe
Documentation technique, conventions, composants partagés et outils d’assistance IA communs : ce qui fait gagner du temps à une personne doit en faire gagner à toute l’équipe.