
Plateforme d'essais agronomiques
Sortir les essais agronomiques du carnet et de l'Excel, jusqu'au tableau de bord.
Développeur full stack
Groupe agroalimentaire
- React
- TypeScript
- NestJS
- MongoDB
- Azure AD
- Docker
- Jest
- essais par an
- 350
- génération d'un plan
- < 1 s
- plans générés valides
- 100 %
Le contexte
- Les techniciens notent leurs relevés à la main dans les parcelles, puis les ressaisissent dans Excel en fin de campagne.
- L'analyse des résultats vit dans des graphiques Excel, repris d'une campagne sur l'autre.
- Le public visé va des techniciens aux agriculteurs, et travaille en parcelle comme au bureau, ce qui impose un outil utilisable sur tablette dès qu'un réseau est disponible.
Ma mission
- Développement de la majeure partie du backend, en NestJS et MongoDB.
- Algorithme initial de génération des plans d'essai, sous contraintes de répartition.
- Frontend React, d'environ 15 % du périmètre à la livraison à un tiers aujourd'hui.
- Reprise des évolutions après la première livraison : chiffrage, clarification des specs et échanges avec le client.
- Livrable de documentation technique attendu par le client : routes d'API et captures situant chaque appel dans l'interface.
- Réduction incrémentale de la dette technique sur les modules retouchés.
Chronologie
- 2026
- Transmission progressive de l'application à un collègue, tout en restant référent sur les aspects techniques, organisationnels et métier.
- 2023
- Développement de nouvelles fonctionnalités, et rôle d'interlocuteur technique du client sur le chiffrage et la clarification des specs.
- 2022
- Première mise en production, et passage en CDI après avoir démontré une autonomie technique sur le cœur du produit.
- 2021
- Arrivée en alternance et développement de l'algorithme de génération des plans d'essai.
Décisions et arbitrages
- 01
Générer les plans d'essai depuis un point de départ fixe plutôt qu'aléatoire
ProblèmeLa génération remplit une matrice de parcelles sous contraintes de répartition. La première version part d'une colonne au hasard, pour varier les plans.
SolutionUn benchmark révèle qu'un départ aléatoire tombe sous 50 % de plans valides sur les petites tailles, les plus courantes. Un point de départ fixe rend la génération fiable sur les tailles et les types d'essai utilisés.
Pourquoi ce choixSur ces tailles, obtenir un plan valide prime sur sa variété. Le coût est une moindre diversité des plans.
- 02
Aligner l'existant par petites touches plutôt qu'en une refonte
ProblèmeLe module central reste en couches techniques, sans tests, alors que l'équipe adopte ailleurs un découpage inspiré de la Clean Architecture.
SolutionÀ chaque passage, un sous-module est restructuré vers ce découpage et couvert par des tests, dans une logique d'amélioration continue.
Pourquoi ce choixUne refonte d'un bloc mobilise un temps long et laisse des changements non couverts. Les passages courts donnent des exemples complets au collègue qui a repris l'application. Le coût est que les deux styles coexistent sans converger.
Ce que ce projet m'a apporté
- Montée en compétence en autonomie sous une revue de code exigeante, sur un premier projet en alternance.
- Validation d'une hypothèse de conception par benchmark, la mesure ayant révélé qu'un départ aléatoire faisait chuter le taux de plans valides sous 50 % sur les petites matrices.
- Prise en charge du chiffrage, de la clarification des specs et des échanges client sur les évolutions après la première livraison.
- Bascule vers le backend après quelques semaines, pour débloquer la vélocité là où les allers-retours de revue la ralentissaient côté frontend.
Avec le recul
- Consacrer plus de temps à la planification et à la qualité d'ensemble avant de livrer. L'habitude de foncer sur la mise en production a laissé de la dette et multiplié les allers-retours sur de petits bugs, applicatifs ou dans le flux de données React Query.
- Investir plus tôt la recherche opérationnelle pour la génération des plans. La version ultérieure, en programmation par contraintes, montre le gain qu'une meilleure base algorithmique aurait apporté dès le départ.