Développement web

Quand Shopify, PrestaShop ou Magento ne suffisent plus au métier

Jérémy Chomel Dawap
  • Publié le : 31 janvier 2026
  • Mis à jour le : 19 août 2026
  • Temps de lecture : 12 minutes
  1. Distinguer limite réelle et mauvais paramétrage
  2. Repérer les contournements coûteux
  3. Cartographier les capacités métier
  4. Exploiter les extensions avant de remplacer
  5. Sortir une capacité sans casser le commerce
  6. Attribuer données et décisions
  7. Préserver panier, commande et paiement
  8. Cas concret : devis B2B et commandes récurrentes
  9. Implémenter une architecture hybride
  10. Migrer sans big bang
  11. Pour qui le sur-mesure devient pertinent
  12. Éviter les erreurs fréquentes
  13. Décision : configurer, étendre ou extraire
  14. Plan d’action sur huit semaines
  15. Approfondir catalogue et run
  16. Conclusion : spécialiser seulement le métier distinctif
Portrait de Jérémy Chomel

Un distributeur B2B vend correctement ses produits sur une plateforme e-commerce. Puis les commerciaux demandent des devis révisables, les clients veulent commander pour plusieurs établissements et la finance impose des plafonds de crédit. Trois applications s’ajoutent, les prix sont corrigés dans un import nocturne et le checkout affiche parfois une remise différente du devis signé. Le catalogue fonctionne encore, mais la décision métier s’est déplacée hors de la plateforme.

Shopify, PrestaShop et Adobe Commerce — historiquement Magento — couvrent de nombreux besoins avec leurs modèles, extensions et écosystèmes. Le problème n’est pas qu’une plateforme serait « trop standard ». Il apparaît lorsque la capacité distinctive exige des invariants, des états ou un run que les points d’extension disponibles ne peuvent porter sans empiler des contournements fragiles.

Le vrai enjeu est de choisir la bonne frontière. Tout réécrire sacrifie des fonctions matures : catalogue, promotion, paiement, taxes ou administration. Tout forcer dans le cœur transforme chaque mise à jour en projet risqué. La cible conserve les commodités dans la plateforme et donne aux décisions spécifiques un service, un modèle et une exploitation explicites.

Dans une démarche de développement web sur mesure, le sur-mesure n’est donc pas un remplacement par principe. Il sert à isoler ce qui donne réellement un avantage ou protège une obligation, tout en conservant les interfaces stables de l’écosystème e-commerce.

Distinguer limite réelle et mauvais paramétrage

Commencez par rejouer des dossiers, pas par comparer des listes de fonctionnalités. Suivez création du produit, éligibilité, calcul du prix, panier, paiement, commande, retour et rapprochement. Pour chaque étape, notez la règle attendue, l’endroit où elle s’exécute, la correction manuelle et la preuve finale. Une fonctionnalité disponible mais mal configurée ne justifie pas une nouvelle architecture.

Classez l’écart : paramétrage incomplet, extension existante, intégration mal conçue, limite du modèle, contrainte de performance ou responsabilité absente. Un checkout trop lent peut venir d’appels synchrones inutiles. Une règle de devis impossible peut révéler qu’une commande négociée n’est pas un simple panier. Le diagnostic évite de résoudre le mauvais problème.

Évaluer la capacité, pas seulement l’écran

Une démo peut afficher le champ demandé sans gérer version, concurrence, droits, reprise ou audit. Demandez ce qui arrive lors d’une modification de prix après acceptation, d’un paiement sans réponse ou d’une mise à jour de module. Si l’équipe ne peut expliquer l’état final, l’écart porte sur la capacité métier, pas sur le rendu.

Repérer les contournements coûteux

Les signaux faibles sont les exports réinjectés, les tables parallèles, les commandes recréées par le support et les règles dupliquées dans le thème. Une application séparée n’est pas en soi un problème ; elle le devient lorsque personne ne sait quelle décision prévaut ou qu’une mise à jour de la plateforme écrase le raccordement.

Mesurez le coût complet : temps de correction, marge perdue, commandes bloquées, incidents après upgrade, dépendance à une personne et délai pour ajouter une règle. Un module de cinquante lignes peut coûter davantage qu’un service si chaque version exige une recette globale. À l’inverse, un service autonome peut être disproportionné pour un simple libellé.

Un second signal apparaît lorsque les utilisateurs modifient directement la base ou contournent les droits d’administration. Le problème n’est plus l’ergonomie : le système ne fournit aucune action sûre pour le cas réel. Ces gestes alimentent l’inventaire des capacités à extraire ou à redessiner.

Cartographier les capacités métier

Découpez par décision : publier une offre, calculer un prix, vérifier un crédit, réserver un stock, accepter une commande, planifier une livraison ou autoriser un retour. Les frontières ne suivent pas nécessairement les menus. Le catalogue et la commande peuvent rester dans la plateforme tandis que le configurateur ou le workflow de devis vit ailleurs.

Chaque capacité possède entrées, sorties, propriétaire, données, fréquence, réversibilité et dépendances. Le commerce possède les conditions négociées ; la finance, le crédit ; la logistique, la promesse de livraison. Le connecteur transporte les verdicts. Il ne décide pas qu’un client est éligible uniquement parce qu’un champ technique est renseigné.

Contre-intuitivement, plus le métier est spécifique, moins il faut rendre toute la plateforme spécifique. Isoler la capacité distinctive réduit la surface à maintenir et permet de continuer à bénéficier des fonctions standard. Le sur-mesure devient un domaine borné plutôt qu’un fork général.

Exploiter les extensions avant de remplacer

Les plateformes proposent des mécanismes différents. Shopify documente ses Functions pour personnaliser certaines logiques exécutées dans son environnement. PrestaShop expose une architecture de modules et de hooks dans sa documentation développeur. Adobe Commerce fournit événements, API et extensions. Il faut vérifier la version et le périmètre réellement supportés.

Une extension est adaptée si elle reçoit le contexte nécessaire, produit un verdict déterministe et reste compatible avec le cycle de mise à jour. Elle devient dangereuse lorsqu’elle intercepte une étape non prévue, duplique un calcul central ou dépend d’une structure interne. Le nombre d’extensions compte moins que leur couplage et leur propriétaire.

Faites un prototype sur le cas hostile, pas seulement nominal. Mesurez latence, limitations, observabilité, reprise et expérience d’administration. Testez l’upgrade suivant sur une copie représentative. Une extension qui tient la démo mais empêche toute migration future n’a pas résolu le problème.

Sortir une capacité sans casser le commerce

Une capacité extraite publie un contrat stable. Le configurateur reçoit produit, contexte client et version ; il retourne une configuration validée et un identifiant. Le panier transporte cet identifiant plutôt que cent options libres. Le moteur de prix retourne composants, devise, date et version. La plateforme conserve la commande acceptée et les références utiles à l’explication.

Le service ne lit pas directement toutes les tables de la plateforme. Il utilise API ou événements, possède son stockage lorsque nécessaire et expose ses décisions. Les dépendances sont orientées : la plateforme ne doit pas attendre cinq services pour afficher chaque page de catalogue. Une projection locale sert les lectures répétées avec une fraîcheur explicite.

La panne est conçue. Si le configurateur est indisponible, les configurations existantes peuvent rester lisibles tandis que les nouvelles sont suspendues. Si le prix ne peut être confirmé, le panier reste un brouillon. Un mode dégradé honnête protège davantage qu’un montant historique présenté comme actuel.

Attribuer données et décisions

La plateforme peut posséder publication, panier et commande. Le PIM possède des attributs enrichis. L’ERP possède coût, facturation ou crédit. Le service spécifique possède devis, configuration ou contrat. La matrice descend au niveau de la donnée ; « l’ERP est maître » reste trop vague pour une fiche dont quatre équipes modifient des champs différents.

Chaque copie porte identifiant source, version et fraîcheur. Les corrections reviennent au propriétaire par un cas d’usage, pas par une synchronisation complète qui écrase tout l’objet. Les fusions et remplacements gardent des alias afin que les commandes historiques et messages tardifs restent résolvables.

Une commande conserve le snapshot opposable : lignes, prix, taxes, devise, configuration et règles acceptées. Recalculer l’historique avec le moteur actuel ne prouve pas ce qui a été vendu. Les références vers les sources servent à l’explication, sans rendre la commande dépendante de leur état futur.

Préserver panier, commande et paiement

Le panier est une proposition mutable ; la commande est un engagement versionné. Le passage de l’un à l’autre revalide les éléments sensibles : prix, disponibilité, droits et conditions. Une réponse de paiement perdue ne transforme pas automatiquement la commande en échec. Le système retrouve le résultat par un identifiant stable avant toute nouvelle tentative.

Les webhooks et événements peuvent être répétés ou arriver hors ordre. Les consommateurs sont idempotents et comparent la version métier. Une boîte d’envoi transactionnelle évite de confirmer localement une commande sans préparer sa publication. La réconciliation compare intentions, paiements et commandes, au lieu de se fier au seul statut de l’interface.

Les retours et remboursements constituent de nouvelles décisions. Ils ne suppriment pas les événements précédents. Si une capacité spécifique calcule l’éligibilité, son verdict et sa version accompagnent le dossier. Le support retrouve la chaîne sans ouvrir trois consoles techniques.

Cas concret : devis B2B et commandes récurrentes

Cas hypothétique : un grossiste utilise une plateforme pour vingt mille références. Trois cents clients négocient des tarifs, des assortiments et des plafonds. Les commerciaux transforment leurs devis en paniers, mais toute modification de quantité recalcule les prix publics. Les commandes récurrentes sont dupliquées à la main et les limites de crédit sont vérifiées après paiement.

La cible conserve catalogue, contenu, panier et paiement dans la plateforme. Un service de contrat possède assortiment, prix négocié et période. Un service de devis versionne les propositions et fige la version acceptée. Au checkout, la plateforme demande un verdict de prix et de crédit, puis enregistre les identifiants avec la commande.

Le pilote porte sur cinquante clients et deux familles. Par exemple, si un prix négocié apparaît sur un autre compte, alors l’ouverture est interrompue et les caches sont purgés par périmètre. Les autres seuils locaux exigent aucune commande créée deux fois, un délai de verdict compatible avec le parcours et un diagnostic sans correction directe en base.

Une panne du service de contrat autorise la consultation des commandes et la préparation d’un brouillon. Elle bloque l’engagement négocié. Le go est suspendu si la file des verdicts inconnus dépasse l’âge décidé ou si le support ne peut rapprocher devis, paiement et commande avec un seul identifiant.

Implémenter une architecture hybride

Le backend Symfony expose des cas d’usage, pas un miroir des tables : calculer un prix, accepter un devis, vérifier une configuration. Doctrine protège identités et versions. Messenger transporte les événements avec clés idempotentes. Le cache sert les projections et conserve la version source. Les appels synchrones restent réservés aux verdicts indispensables au parcours.

L’observabilité relie commande, devis, paiement, dépendance et résultat. Les journaux conservent corrélation, version et motif sans copier secrets ou données de paiement. Les métriques suivent verdicts inconnus, latence haute, divergences de projection, retries et actions manuelles. Chaque seuil déclenche réduction, bascule assistée ou fermeture.

La CI teste contrats, droits, montants, devises et compatibilité des événements. Un environnement représentatif reçoit la prochaine version de la plateforme. Le runbook indique comment isoler une capacité, rapprocher les effets et reprendre sans publier une seconde commande. Le rollback ne détruit jamais les engagements déjà acceptés.

Migrer sans big bang

La séquence commence par instrumenter l’existant. Ensuite, le nouveau service fonctionne en observation : il calcule sans décider. Les écarts sont classés et les règles fermées. Une catégorie passe en lecture, puis en écriture. L’ancien chemin reste disponible pendant une fenêtre bornée avec une seule autorité.

Les données migrent par lots idempotents. Une balance compare objets, versions et montants. Les cas inconnus rejoignent une quarantaine, ils ne reçoivent pas une valeur par défaut. La double écriture, si elle est nécessaire, possède une date de fin et un mécanisme de comparaison ; elle ne devient pas l’architecture permanente.

Le retrait observe les derniers consommateurs, scripts et exports. Un champ ou module n’est supprimé qu’après disparition vérifiée de ses lecteurs et test de restauration. Le support, la documentation et les droits migrent avec le code. Une architecture cible non opérable n’est pas une migration terminée.

Pour qui le sur-mesure devient pertinent

La méthode concerne e-commerce B2B, catalogues configurables, places de commande, réseaux multi-entités et parcours où prix, crédit, stock ou livraison obéissent à des règles distinctives. Produit, commerce, finance, logistique, sécurité et exploitation participent. Le sponsor arbitre la valeur de la capacité, pas seulement le budget technique.

Une boutique avec un catalogue simple et quelques adaptations doit rester sur les mécanismes standard. Un développement spécifique y créerait plus de maintenance que de valeur. Le sur-mesure devient pertinent lorsque le contournement touche une décision fréquente, risquée ou réellement différenciante et que son propriétaire accepte le run.

Le chiffre d’affaires ou le nombre de références ne suffit pas. Une petite activité avec des configurations juridiquement engageantes peut nécessiter une capacité dédiée. Une grande boutique au parcours standard peut rester proche du cœur. La décision suit la complexité des règles et des responsabilités.

Éviter les erreurs fréquentes

Réécrire le socle complet

Catalogue, commandes, paiements, sécurité et administration demandent des années de maturité. Conservez les fonctions solides et extrayez la capacité prouvée. Une réécriture générale multiplie les risques sans garantir un meilleur métier.

Empiler les plugins sans ownership

Chaque extension modifie une frontière, une performance et une procédure d’upgrade. Tenez un registre fonctionnel, un responsable, des tests et une condition de retrait. Le nombre n’est pas la seule métrique ; le couplage est décisif.

Coupler le thème aux règles

Une interface peut collecter et présenter, mais la décision appartient à l’API métier. Dupliquer une remise ou une éligibilité dans JavaScript produit des écarts, contourne les droits et rend les canaux incohérents.

Décision : configurer, étendre ou extraire

Bloc de décision. Configurez lorsque le modèle standard exprime le besoin. Étendez lorsque le point d’extension porte le bon contexte et reste supporté. Extrayez une capacité lorsque ses données, décisions et cycle de vie sont distincts. Si le cœur du commerce lui-même est incompatible, alors envisagez le remplacement seulement avec un run financé.

Priorisez les écarts qui touchent argent, engagement, droits ou opérations répétées. En revanche, différez une extraction si le propriétaire métier ou la preuve finale manque. Refusez un fork sans stratégie d’upgrade. Pour un cas rare, conservez plutôt un canal manuel borné que de généraliser une capacité opaque.

  • Conserver les commodités éprouvées dans la plateforme.
  • Nommer puis isoler les décisions distinctives derrière un contrat stable.
  • Tester panne, reprise et upgrade avant le go.
  • Ouvrir puis étendre par capacité et par population, jamais par effet de mode.

Plan d’action sur huit semaines

Semaines 1 et 2 : diagnostiquer

Rejouez vingt commandes nominales et hostiles. Cartographiez règles, propriétaires, données, corrections et preuves. Classez chaque écart entre configuration, extension, intégration et modèle. Mesurez coûts manuels, incidents, upgrades et impact client. Fermez la décision que le système doit réellement rendre.

Semaines 3 à 5 : prototyper la frontière

Choisissez une capacité distinctive. Testez d’abord le point d’extension officiel avec le cas hostile. Si l’extraction est justifiée, définissez API, événements, identité, version et mode dégradé. Faites calculer le nouveau service en observation et comparez ses verdicts à des dossiers réels.

Provoquez timeout après effet, message répété, version de prix concurrente et panne de dépendance. Le support exécute diagnostic et rapprochement. La CI teste l’upgrade de plateforme. Chaque divergence reçoit un propriétaire et une action, pas une correction silencieuse.

Semaines 6 à 8 : migrer une tranche

Ouvrez une famille et une population. Surveillez erreurs, latence, marge, actions manuelles et verdicts inconnus. Jouez le rollback et le retour nominal. Étendez lorsque la capacité prouve valeur, compatibilité et reprise pendant un cycle représentatif.

Le bilan compare coût total, incidents évités et délai de changement. D’abord, il ferme les doubles décisions ; ensuite, il réduit les contournements ; puis il retire l’ancien chemin. Une extraction sans usage observable ou sans run reste différée.

  1. Partir de dossiers et décisions réelles.
  2. Éprouver configuration et extension avant l’extraction.
  3. Contractualiser données, panne, upgrade et support.
  4. Migrer une capacité bornée avec balance et rollback.

Approfondir catalogue et run

Le guide des catalogues complexes et tarifs négociés approfondit produit, offre, configuration et prix. Le test des workflows à exceptions structure les scénarios hostiles.

L’observabilité métier relie enfin plateforme, capacité spécifique et dossier client. Ces guides sont utiles lorsqu’ils sont appliqués à la frontière choisie et à ses responsabilités réelles.

  • Tester le point d’extension officiel sur le cas hostile.
  • Conserver le cœur commercial tant que ses invariants restent adaptés.
  • Extraire uniquement une capacité dont le propriétaire finance le run.

Conclusion : spécialiser seulement le métier distinctif

Une plateforme ne cesse pas d’être utile parce qu’un processus devient complexe. Elle atteint sa limite lorsque la décision distinctive ne peut plus être exprimée, testée et opérée dans ses frontières supportées sans créer plusieurs vérités.

La bonne réponse conserve les fonctions matures, exploite les extensions officielles et extrait seulement les capacités dont les règles, données et responsabilités le justifient. L’architecture hybride reste lisible si chaque verdict possède une autorité.

Le meilleur critère n’est pas le nombre de plugins. Il est la capacité à expliquer une commande après un échec, à mettre à jour la plateforme sans peur et à faire évoluer la règle métier sans réécrire tout le commerce.

Dawap peut accompagner ce diagnostic et cette trajectoire de développement web sur mesure : audit des contournements, prototype de frontière, architecture hybride, migration progressive, tests d’upgrade et préparation du run.

Portrait de Jérémy Chomel

Vous avez un projet de
développement sur mesure ?

Dawap transforme ce besoin en périmètre livrable, architecture maintenable et trajectoire de mise en production adaptée à vos contraintes.

Besoin d’échanger sur votre projet ? Planifier un rendez-vous

Articles recommandés

Catalogue complexe configurateur et tarif négocié en e-commerce B2B Développement web Catalogues complexes, configurateurs et tarifs négociés en e-commerce B2B Lire l'article
  • 30 janvier 2026
  • Lecture ~12 min

Les configurateurs B2B restent maîtrisables lorsque produit, offre, assortiment, configuration et devis demeurent des objets distincts. Identités, compatibilités, unités, règles et versions produisent alors une commande prouvable, afin d’automatiser les combinaisons sûres sans exposer le mauvais prix ni réécrire un devis accepté.

Stratégie de test d’un workflow métier à nombreuses exceptions Développement web Tester un workflow complexe sans explosion combinatoire Lire l'article
  • 17 juillet 2026
  • Lecture ~17 min

Testez les états, transitions, invariants, droits, données et reprises qui portent le risque réel, au lieu de multiplier des scénarios impossibles à maintenir. Cette méthode construit une couverture défendable, injecte les pannes utiles et vérifie aussi les compensations, la concurrence et les preuves attendues par le métier.

Observabilité fonctionnelle d’un workflow métier de bout en bout Développement web Observabilité d’un workflow métier : voir le dossier réel Lire l'article
  • 17 juillet 2026
  • Lecture ~17 min

Logs techniques et disponibilité ne suffisent pas. Instrumentez états, transitions, décisions, délais et reprises pour expliquer où un dossier métier s’est réellement bloqué. Le guide relie événements fonctionnels, traces, métriques, alertes et modes opératoires sans transformer les données personnelles en identifiants de corrélation.

Migration progressive d’une application Symfony sans interruption du run Développement web Migration Symfony : monter de version sans casser le run Lire l'article
  • 16 juillet 2026
  • Lecture ~14 min

Une montée de version Symfony touche PHP, dépendances, configuration, données, sessions, cache, Messenger, crons et contrats API. Ce guide propose une trajectoire progressive, une baseline de tests, des critères de retour arrière et une matrice go ou no-go pour moderniser l’application sans confondre migration du framework et refonte métier.