Aller au contenu principal
01Étude de casForest · Produit B2B

Forest

Faire évoluer un produit complexe sans imposer une rupture.

Rôle
Full Stack Engineer
Périmètre
Interfaces produit · Workflows ops · Intégrations
Période
Depuis mars 2024
Stack
React · Ember · TypeScript · Rspack · Module Federation
Workflow Builder de Forest montrant un parcours de remboursement avec plusieurs embranchements
Workflow Builder, embranchements et connecteurs. Source : page officielle Forest Workflows, 2026.Voir la source officielle (nouvel onglet)

Chez Forest, je travaille sur des interfaces produit, des workflows opérationnels et des intégrations de données. J’ai notamment impulsé une migration incrémentale d’Ember vers des microfrontends React et amélioré les performances du Workflow Builder sur des graphes volumineux.

Ce que Forest doit relier

Forest fournit une infrastructure destinée aux équipes qui pilotent des opérations complexes. Le produit relie des sources de données, des workflows, des permissions et des actions réalisées par des humains ou des agents.

Les interfaces ne se limitent pas à afficher des données. Elles doivent aider des équipes à comprendre un contexte, exécuter une action et suivre ce qui s’est passé sur plusieurs systèmes.

Changer de socle sans casser le rythme

Le produit possède une base Ember importante et continue d’évoluer. Introduire React ne justifie pas de remplacer automatiquement ce qui fonctionne déjà.

Nous devions choisir les périmètres où React apportait une valeur réelle, organiser sa cohabitation avec Ember et définir les fondations partagées. En parallèle, les workflows restaient connectés à plusieurs sources de données et les graphes volumineux devaient rester fluides pendant l’édition.

Ma part dans la migration

Je contribue aux interfaces produit, aux workflows opérationnels, aux intégrations de sources de données et à l’outillage interne. Mon périmètre couvre le frontend et les parties du socle fullstack nécessaires à ces parcours.

J’ai préparé la migration autour de fonctionnalités pouvant être isolées, testées et livrées progressivement.

J’ai travaillé avec l’équipe pendant la migration fonctionnalité par fonctionnalité.

Les choix d’architecture

Comparer avant de choisir

Les premières pistes exploraient notamment l’usage d’iframes et du Shadow DOM. Elles ajoutaient trop de contraintes d’intégration, en particulier autour des échanges réseau et de la communication avec l’application hôte. Les preuves de concept ont rendu ces compromis visibles avant de retenir Module Federation avec Rspack.

Migrer par frontières utiles

La migration ne suit pas un objectif abstrait de remplacement du framework. Elle avance par ensembles de fonctionnalités pouvant être isolés, testés et livrés sans fragiliser les parcours voisins. Cette approche évite une réécriture globale et conserve des déploiements séparés.

Faire cohabiter Ember et React

La coexistence fait partie de l’architecture, même si elle reste temporaire pour certains domaines. Les échanges entre les deux environnements doivent être suffisamment explicites et stables pour ne pas transformer chaque évolution en cas particulier.

Organiser les applications et les packages partagés

Le monorepo sépare les applications dans apps/ et les briques communes dans packages/. Le package UI porte les composants partagés, tandis que le package Data centralise les contrats et besoins de données réutilisables. Cette organisation améliore l’expérience de développement sans obliger tous les périmètres à être déployés ensemble.

Garder le Workflow Builder fluide

Le Workflow Builder doit rester exploitable quand un graphe devient volumineux. Le travail s’est concentré sur la virtualisation des éléments inutiles à l’écran, la réduction des repaints coûteux et la limitation du travail déclenché pendant les interactions.

Ces optimisations conservent des interactions fluides pendant l’édition, sans afficher davantage de détails que ce qui peut être documenté publiquement.

Ce que cette approche a permis

La migration peut avancer fonctionnalité par fonctionnalité sans bloquer les déploiements existants. L’architecture a donc été évaluée sur sa capacité à accompagner le produit, pas sur le remplacement d’Ember comme objectif en soi.