Migrer une plateforme e-commerce qui génère des millions de CA mensuel, c’est comme changer le moteur d’un avion en plein vol. Voici comment nous l’avons fait.

Pourquoi le headless ?

Notre monolithe Magento 2 atteignait ses limites :

  • Performance : Time to First Byte > 800ms
  • Scalabilité : Black Friday = sueurs froides
  • Vélocité : 3 semaines pour un changement de header
  • Multi-canal : Impossible d’alimenter l’app mobile proprement

L’architecture cible

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   Next.js   │     │   Next.js   │     │    App      │
│   (Web FR)  │     │   (Web US)  │     │   Mobile    │
└──────┬──────┘     └──────┬──────┘     └──────┬──────┘
       │                   │                   │
       └───────────────────┼───────────────────┘

                    ┌──────▼──────┐
                    │  API Layer  │
                    │  (GraphQL)  │
                    └──────┬──────┘

       ┌───────────────────┼───────────────────┐
       │                   │                   │
┌──────▼──────┐     ┌──────▼──────┐     ┌──────▼──────┐
│   Magento   │     │  Algolia    │     │   Stripe    │
│  (Backend)  │     │  (Search)   │     │ (Payments)  │
└─────────────┘     └─────────────┘     └─────────────┘

La stratégie Strangler Fig

Pas de big bang. Nous avons migré progressivement :

  1. Mois 1-3 : API Gateway + premières pages statiques
  2. Mois 4-6 : Catalogue produit headless
  3. Mois 7-9 : Checkout découplé
  4. Mois 10-12 : Compte client + fidélité
  5. Mois 13-18 : Optimisations et rollout mondial

Les patterns qui ont sauvé le projet

Feature Flags everywhere

if (featureFlags.isEnabled('headless_checkout', { country: user.country })) {
  return <HeadlessCheckout />;
}
return <LegacyCheckout />;

Canary deployments par pays

Monaco d’abord, puis la Belgique, puis la France. Chaque pays était un test grandeur nature.

Dual-write pour la data

Pendant 6 mois, chaque écriture allait dans l’ancien ET le nouveau système. Ceinture et bretelles.

Les chiffres post-migration

MétriqueAvantAprèsDelta
TTFB847ms89ms-89%
LCP4.2s1.1s-74%
Conversion2.1%2.8%+33%
Déploiements/semaine215+650%

Ce qu’on referait différemment

  1. Investir plus tôt dans l’observabilité — On a volé à l’aveugle trop longtemps
  2. Automatiser les tests E2E dès le jour 1 — La dette s’accumule vite
  3. Impliquer le métier plus tôt — Certaines fonctionnalités legacy étaient critiques sans qu’on le sache

Conclusion

18 mois, c’est long. Mais aujourd’hui, nous déployons 15 fois par semaine sans stress, notre site charge en moins d’une seconde, et nos développeurs sont (presque) heureux.

La migration headless n’est pas une fin en soi — c’est le début d’une nouvelle vélocité.