Vol. 4 · № 03 · Un atelier d'architectureAn architecture workshop

Choreography vs Orchestration, ou le fil que personne ne tientChoreography vs Orchestration, or the thread no one holds

Une transaction en plusieurs étapes — payer, réserver, expédier, notifier — peut s'enchaîner par événements (chorégraphie) ou être tenue par un coordinateur (orchestration). La chorégraphie séduit par son découplage, mais dès que l'ordre est imposé et qu'il faut se défaire à l'échec, elle disperse une transaction sans propriétaire : invisible, figée, irréversible. Le vrai critère n'est pas « découplé vs centralisé » mais « suite de réactions indépendantes, ou transaction qui mérite un propriétaire ? ».A multi-step transaction — pay, reserve, ship, notify — can chain by events (choreography) or be held by a coordinator (orchestration). Choreography seduces with its decoupling, but the moment order is required and it must undo on failure, it scatters an ownerless transaction: invisible, frozen, irreversible. The real criterion isn't 'decoupled vs centralized' but 'a chain of independent reactions, or a transaction that deserves an owner?'.

AudienceAudience
Dev qui coordonne un processus métier à travers plusieurs servicesDev coordinating a business process across several services
Format
Self-paced
ChapitresChapters
5
Date
Juin 2026June 2026
≈ 18 min●●●○CommunicationOrchestrationTradeoff
SommaireContents ·
№ 01CadrageFraming3 min

Quatre étapes qui s'enchaînent par événements. Qui tient le fil ?Four steps chained by events. Who holds the thread?

Au #2, la file a découplé l'émetteur de ses consommateurs. Mais une commande n'est pas une réaction isolée : c'est une transaction métier en plusieurs étapes — payer, réserver, expédier, notifier — avec un ordre et des règles d'échec. En chorégraphie, chaque service réagit à l'événement du précédent et émet le sien. Ça marche, et ça pose une question dérangeante : la séquence existe dans la tête du métier, mais dans le code, elle n'est écrite nulle part. Le réflexe : demande-toi si l'ordre des étapes et leur rattrapage sont eux-mêmes de la logique métier — et donc s'ils doivent appartenir à un endroit nommé.In #2, the queue decoupled the emitter from its consumers. But an order isn't an isolated reaction: it's a multi-step business transaction — pay, reserve, ship, notify — with an order and failure rules. In choreography, each service reacts to the previous one's event and emits its own. It works, and it raises an unsettling question: the sequence exists in the business's head, but in the code it's written nowhere. The reflex: ask whether the order of steps and their recovery are themselves business logic — and so whether they should belong to a named place.

Le code naïf — la séquence émerge, sans propriétaireThe naive code — the sequence emerges, with no owner
# Chorégraphie : chaque service réagit à l'événement du précédent
@subscribe("OrderPaid")        # Paiement a publié ceci
def on_paid(evt): warehouse.reserve(evt); publish("StockReserved", evt)

@subscribe("StockReserved")    # … Logistique réagit
def on_reserved(evt): shipping.dispatch(evt); publish("Shipped", evt)

@subscribe("Shipped")          # … Notif réagit
def on_shipped(evt): email.send_tracking(evt)
# la séquence payer → réserver → expédier → notifier existe… nulle part.
Personne, ou un chef d'orchestreNobody, or a conductor
chaque service réagiteach service reacts
chorégraphie · le fil émergechoreography · thread emerges
|
vsvs
un coordinateur décidea coordinator decides
orchestration · le fil est tenuorchestration · thread held

En chorégraphie, le fil de la transaction n'appartient à personne : il émerge de la chaîne des réactions. En orchestration, un coordinateur le tient explicitement — il connaît la séquence, l'état, et ce qu'il faut faire quand une étape échoue.In choreography, the transaction's thread belongs to no one: it emerges from the chain of reactions. In orchestration, a coordinator holds it explicitly — it knows the sequence, the state, and what to do when a step fails.

Le réflexe du volumeThe volume's reflex

« Ai-je besoin d'une réponse maintenant, ou seulement que ce soit fait un jour ? » devient ici : « cette séquence est-elle un simple enchaînement de réactions indépendantes, ou une transaction dont l'ordre et l'échec doivent être maîtrisés ? ». Si les étapes sont vraiment indépendantes, la chorégraphie suffit. Si elles forment un tout qu'il faut pouvoir suivre et défaire, le fil doit appartenir à quelqu'un — et ce quelqu'un, c'est l'orchestrateur.'Do I need an answer now, or only that it gets done someday?' becomes here: 'is this sequence a mere chain of independent reactions, or a transaction whose order and failure must be controlled?'. If the steps are truly independent, choreography suffices. If they form a whole that must be tracked and undone, the thread must belong to someone — and that someone is the orchestrator.

Le pont vers la Saga.The bridge to the Saga.

Une transaction qui traverse plusieurs services ne peut pas s'appuyer sur un COMMIT/ROLLBACK de base de données : chacun a la sienne. Le rattrapage devient applicatif — on défait par des actions compensatoires (rembourser, libérer le stock). C'est la Saga, qu'on installe ici en germe et qu'on déplie au Vol 7 (résilience distribuée), là où « et si ça répond deux fois ? » devient la question centrale.A transaction spanning several services can't rely on a database COMMIT/ROLLBACK: each has its own. Recovery becomes application-level — you undo with compensating actions (refund, release stock). That's the Saga, planted here and unfolded in Vol 7 (distributed resilience), where 'what if it answers twice?' becomes the central question.

№ 02La douleurThe pain4 min

La séquence n'est écrite nulle part — donc impossible à suivre, et à défaire.The sequence is written nowhere — so impossible to follow, or to undo.

La chorégraphie pure séduit : aucun point central, un découplage maximal. Mais quand les étapes forment une vraie transaction, son absence de propriétaire se paie cher. Le processus métier devient émergent — il n'existe que dans la somme des abonnements, dispersée sur N services. Trois douleurs en découlent : on ne peut pas voir où en est une commande, on ne peut pas changer la séquence sans toucher partout, et quand une étape échoue au milieu, personne ne sait défaire les précédentes.Pure choreography seduces: no central point, maximal decoupling. But when the steps form a real transaction, the absence of an owner costs dearly. The business process becomes emergent — it exists only in the sum of subscriptions, scattered across N services. Three pains follow: you can't see where an order stands, you can't change the sequence without touching everywhere, and when a step fails midway, no one knows how to undo the prior ones.

№ 1 · Le processus est invisibleThe process is invisible

« Où en est la commande #4217 ? » n'a pas de réponse : il faut interroger quatre services et reconstituer l'ordre à la main. La séquence métier vit dans la tête de l'équipe, jamais dans un endroit qu'on peut lire.'Where is order #4217?' has no answer: you must query four services and reconstruct the order by hand. The business sequence lives in the team's head, never in a place you can read.

№ 2 · La séquence est figée en durThe sequence is hardwired

Insérer « vérifier l'anti-fraude avant de réserver » oblige à savoir qui écoute quoi, et à recâbler les abonnements de plusieurs services. L'ordre des étapes est un fait métier, mais il est éparpillé en qui-réagit-à-qui.Inserting 'check anti-fraud before reserving' forces you to know who listens to what, and to rewire several services' subscriptions. The step order is a business fact, but it's scattered across who-reacts-to-whom.

№ 3 · L'échec n'a pas de rattrapageFailure has no recovery

La réservation échoue après le paiement encaissé. Qui rembourse ? En chorégraphie, aucun service ne tient le fil, donc personne ne sait quelles étapes annuler ni dans quel ordre. La commande reste coincée, l'argent retenu, en silence.The reservation fails after the payment is charged. Who refunds? In choreography, no service holds the thread, so no one knows which steps to undo, or in what order. The order stays stuck, the money held, silently.

L'étape qui échoue, et personne pour défaireThe step that fails, and no one to undo
@subscribe("OrderPaid")
def on_paid(evt):
    warehouse.reserve(evt)       # 💥 rupture de stock → lève
    # le paiement a réussi, la réservation non. Aucun code ne rembourse :
    # personne ici ne sait qu'un paiement a précédé, ni comment l'annuler.
Le diagnostic.The diagnosis.

Le détecteur : « ces étapes ont-elles un ordre imposé, et faut-il pouvoir défaire les précédentes quand l'une échoue ? ». Si oui, elles forment une transaction — et une transaction a besoin d'un propriétaire. On nomme un orchestrateur : un endroit unique qui connaît la séquence, garde l'état (payé → réservé → expédié), et déclenche les compensations à l'échec. La chorégraphie reste excellente pour des réactions vraiment indépendantes ; elle devient un piège dès qu'elle cache un processus que personne n'assume.The detector: 'do these steps have a required order, and must I be able to undo the prior ones when one fails?'. If yes, they form a transaction — and a transaction needs an owner. Name an orchestrator: a single place that knows the sequence, keeps the state (paid → reserved → shipped), and triggers compensations on failure. Choreography stays excellent for truly independent reactions; it becomes a trap the moment it hides a process no one owns.

№ 03Le fil de la transactionThe transaction's thread5 min

On donne un propriétaire au fil — qui connaît la séquence, et sait la défaire.Give the thread an owner — one that knows the sequence, and how to undo it.

Orchestrer, ce n'est pas recoupler : c'est rendre visible et possédable un processus qui, en chorégraphie, n'existait que dispersé. L'animation suit le fil de la transaction : émergent et sans propriétaire, puis perdu quand une étape échoue, puis tenu par un orchestrateur qui garde l'état — et enfin déroulé à l'envers, par compensations, quand il faut défaire. C'est la Saga, en germe.Orchestrating isn't recoupling: it's making visible and ownable a process that, in choreography, existed only scattered. The animation follows the transaction's thread: emergent and ownerless, then lost when a step fails, then held by an orchestrator that keeps the state — and finally run backwards, by compensations, when it must be undone. That's the Saga, in seed.

Animation — qui tient le fil de la transactionAnimation — who holds the transaction's thread
Chorégraphie — le fil émergeChoreography — the thread emerges · 1/4
Paiement
réagit à l'eventreacts to event
→
Stock
réagit à l'eventreacts to event
→
Expédition
réagit à l'eventreacts to event
→
Notif
réagit à l'eventreacts to event
le fil émerge de la chaîne — aucun propriétairethe thread emerges from the chain — no owner
Chaque étape réagit à l'événement de la précédente. La séquence existe, mais comme une propriété émergente de la chaîne : aucun service ne la détient.Each step reacts to the previous one's event. The sequence exists, but as an emergent property of the chain: no service holds it.

Le même flux, deux propriétés du fil — 4 lignes à retrouverThe same flow, two ownerships of the thread — 4 lines to recall
# Chorégraphie — la séquence est éparpillée en abonnements@subscribe("StockReserved") def _(e): dispatch(e); publish("Shipped", e)

# Orchestration — la séquence ET son rattrapage vivent en un seul endroit
def fulfill(order):    stock = None
    try:    except StepFailed:
4 ligne(s) à retrouver — écris-la de tête avant de cliquer4 line(s) to recall — write it in your head before clicking
Le motif transférable.The transferable pattern.

« Un processus métier en plusieurs étapes mérite un propriétaire. » Selon l'outil, ce propriétaire s'appelle orchestrateur codé à la main, moteur de workflow (les étapes et compensations décrites en données, rejouables), ou machine à états. Tous répondent à la même question : rendre explicite, traçable et réversible une séquence que la chorégraphie laissait implicite. Et tous mènent à la Saga, la version distribuée du défaire (Vol 7).'A multi-step business process deserves an owner.' Depending on the tool, that owner is a hand-coded orchestrator, a workflow engine (steps and compensations described as data, replayable), or a state machine. All answer the same question: make explicit, traceable and reversible a sequence that choreography left implicit. And all lead to the Saga, the distributed version of undoing (Vol 7).

Modèle mentalMental model
L'imageThe image

Une chorégraphie de danseurs : chacun enchaîne son pas en voyant celui du voisin, personne ne tient la partition. Une transaction, elle, ressemble à un vol commercial : une checklist tenue par un commandant qui sait où on en est et comment faire demi-tour.A dance troupe's choreography: each performer takes their step by watching the neighbor's, no one holds the score. A transaction, though, is more like a commercial flight: a checklist held by a captain who knows where you are and how to turn back.

La règleThe rule

Réactions indépendantes → chorégraphie, le fil peut émerger. Ordre imposé et besoin de défaire → orchestration, le fil appartient à un endroit nommé.Independent reactions → choreography, the thread may emerge. Required order and a need to undo → orchestration, the thread belongs to a named place.

Où l'analogie casseWhere the analogy breaks

Le chef d'orchestre suggère « centraliser, c'est tout contrôler ». Faux : le commandant ne pilote pas à la place des moteurs. L'orchestrateur ne possède que le fil — l'ordre, l'état, les compensations —, jamais la logique de chaque étape. Dès qu'il calcule la TVA ou valide les adresses, il redevient le monolithe distribué que le chapitre suivant démonte.The conductor suggests 'centralize means control everything'. False: the captain doesn't fly the engines. The orchestrator owns only the thread — the order, the state, the compensations — never each step's logic. The moment it computes VAT or validates addresses, it becomes again the distributed monolith the next chapter takes apart.

№ 04Le piègeThe trap4 min

Découpler n'est pas gratuit. La chorégraphie qui cache une transaction.Decoupling isn't free. The choreography that hides a transaction.

Le piège n'est pas de choisir la chorégraphie — c'est de la choisir pour un processus qui est en réalité une transaction. On prend la chorégraphie « parce que c'est découplé », mais si les étapes ont un ordre imposé et doivent se défaire à l'échec, on vient de disperser une transaction sans propriétaire : invisible, non réversible, impossible à faire évoluer. Le découplage qu'on croyait gagner se paie en cohérence perdue. Bascule le toggle : cherche la séquence qui a besoin d'un rattrapage.The trap isn't choosing choreography — it's choosing it for a process that's actually a transaction. You pick choreography 'because it's decoupled', but if the steps have a required order and must undo on failure, you've just scattered an ownerless transaction: invisible, irreversible, impossible to evolve. The decoupling you thought you gained is paid in lost consistency. Flip the toggle: hunt the sequence that needs recovery.

# le processus métier — séquence ET rattrapage — vit en UN endroit nommé
class FulfillOrder:               # l'orchestrateur possède le fil
    def run(order):
        pay = payment.charge(order)
        stock = None
        try:
            stock = warehouse.reserve(order)
            shipping.dispatch(order)
            notify.send_tracking(order)
        except StepFailed:
            if stock: warehouse.release(stock)   # compensations explicites, à l'envers :
            payment.refund(pay)                  # libérer d'abord, rembourser ensuite
# « où en est #4217 ? » → on lit l'état ici. Changer l'ordre → un seul fichier.
Pourquoi c'est justeWhy it's right

La séquence et son rattrapage vivent dans un orchestrateur nommé. Il appelle les étapes dans l'ordre, garde l'état, et à l'échec déroule les compensations à l'envers — libérer, puis rembourser. « Où en est #4217 ? » se lit en un endroit ; changer l'ordre, c'est un seul fichier. Le processus métier est redevenu une chose qu'on peut voir, faire évoluer et défaire. C'est le seul cas où orchestrer mérite son couplage : quand la séquence est elle-même de la logique métier.The sequence and its recovery live in a named orchestrator. It calls the steps in order, keeps the state, and on failure runs the compensations in reverse — release, then refund. 'Where is #4217?' reads in one place; changing the order is one file. The business process is again a thing you can see, evolve and undo. It's the only case where orchestrating earns its coupling: when the sequence is itself business logic.

La règle qui tranche.The rule that settles it.

Si la séquence a un ordre imposé et doit se défaire à l'échec, c'est une transaction : son fil doit appartenir à un endroit nommé. Le test : « puis-je répondre à où en est cette instance, et défaire proprement si une étape casse ? ». Si la réponse vit dispersée dans N abonnements, tu as une transaction sans propriétaire. La chorégraphie est pour des réactions indépendantes ; l'orchestration, pour un processus possédé.If the sequence has a required order and must undo on failure, it's a transaction: its thread must belong to a named place. The test: 'can I answer where this instance stands, and cleanly undo if a step breaks?'. If the answer lives scattered across N subscriptions, you have an ownerless transaction. Choreography is for independent reactions; orchestration, for an owned process.

Le piège inverse : l'orchestrateur-dieu.The opposite trap: the god orchestrator.

L'autre excès : un orchestrateur qui ne se contente pas de la séquence mais absorbe la logique de chaque étape — calcule la TVA, décide des remises, valide les adresses. Il redevient le hub que les microservices fuyaient : un monolithe distribué avec un cerveau central. L'orchestrateur ne possède que le fil (l'ordre, l'état, les compensations) ; chaque service garde sa propre logique. Orchestrer le processus, pas le métier des autres.The other excess: an orchestrator that doesn't stop at the sequence but absorbs each step's logic — computes VAT, decides discounts, validates addresses. It becomes again the hub microservices fled: a distributed monolith with a central brain. The orchestrator owns only the thread (the order, the state, the compensations); each service keeps its own logic. Orchestrate the process, not other people's domain.

№ 05Bilan & éditoWrap-up & editorial2 min

Le fil qui émerge de la chaîne, ou le fil tenu par un propriétaire.The thread that emerges from the chain, or the thread held by an owner.

Les deux approches, côte à côteThe two approaches, side by side
chorégraphiechoreographyorchestrationorchestration
Le fil de la séquenceThe sequence's threadémergent, sans propriétaireemergent, ownerlesstenu en un endroit nomméheld in a named place
Voir où en est l'instanceSee where an instance standsinterroger N servicesquery N serviceslire l'état du coordinateurread the coordinator's state
Changer la séquenceChange the sequencerecâbler plusieurs abonnementsrewire several subscriptionsun seul fichiera single file
Échec d'une étapeA step failspersonne ne défaitno one undoescompensations (Saga)compensations (Saga)
Le prixThe priceprocessus invisible, non réversibleinvisible, irreversible processun coordinateur à tenira coordinator to maintain

Quand ne pas orchestrerWhen not to orchestrate

L'orchestration a un loyer : un coordinateur qui connaît la séquence, donc un point de couplage et une chose de plus à garder en vie. On reste en chorégraphie — et c'est correct — quand :Orchestration has rent: a coordinator that knows the sequence, hence a coupling point and one more thing to keep alive. Stay in choreography — and that's fine — when:

  • les étapes sont vraiment indépendantes : envoyer un mail, tracer l'analytics, mettre à jour un cache après « commande payée » n'ont ni ordre imposé ni besoin de se défaire mutuellement. Les orchestrer, c'est inventer un fil qui n'existe pas — de la cérémonie (YAGNI, Vol 0 #3).the steps are truly independent: sending an email, tracking analytics, updating a cache after 'order paid' have neither required order nor need to undo one another. Orchestrating them invents a thread that doesn't exist — ceremony (YAGNI, Vol 0 #3).
  • aucune étape n'a besoin d'être compensée : si l'échec d'une réaction n'oblige pas à annuler les autres, il n'y a pas de transaction à protéger — juste des abonnés, et la chorégraphie est exactement Observer à l'échelle du réseau (Vol 4 #2).no step needs compensating: if one reaction's failure doesn't require undoing the others, there's no transaction to protect — just subscribers, and choreography is exactly Observer at network scale (Vol 4 #2).
  • tu veux ajouter des réacteurs sans toucher au cœur : la force de la chorégraphie est l'extension libre. Tant que personne n'a besoin de posséder la séquence, garde ce découplage — ne le sacrifie pas à un orchestrateur dont tu n'as pas l'usage.you want to add reactors without touching the core: choreography's strength is free extension. As long as no one needs to own the sequence, keep that decoupling — don't sacrifice it to an orchestrator you have no use for.

Le réflexe n'est donc pas « orchestre, c'est plus propre » ni « chorégraphie, c'est plus découplé ». C'est : « cette séquence a-t-elle un ordre imposé et un besoin de se défaire ? Si oui, c'est une transaction : donne-lui un propriétaire. Sinon, ce sont des réactions indépendantes : laisse-les libres. »So the reflex isn't 'orchestrate, it's cleaner' nor 'choreograph, it's more decoupled'. It's: 'does this sequence have a required order and a need to undo? If yes, it's a transaction: give it an owner. If not, they're independent reactions: leave them free.'

Mot de l'éditeurFrom the editor

Ce numéro referme le volume de la communication, et il le fait en désamorçant un faux débat. « Chorégraphie vs orchestration » n'est pas un choix de style entre découplé et centralisé : c'est une question sur la nature de ce qu'on coordonne. Des réactions indépendantes ? La chorégraphie est juste. Une transaction — un ordre, un état, un défaire ? Alors le fil est de la logique métier, et toute logique métier mérite un endroit où on peut la lire, la changer et la tester. Orchestrer n'est pas revenir au monolithe ; c'est refuser qu'un processus important n'existe nulle part.This issue closes the communication volume, and it does so by defusing a false debate. 'Choreography vs orchestration' isn't a style choice between decoupled and centralized: it's a question about the nature of what you're coordinating. Independent reactions? Choreography is right. A transaction — an order, a state, an undo? Then the thread is business logic, and all business logic deserves a place where you can read it, change it and test it. Orchestrating isn't returning to the monolith; it's refusing to let an important process exist nowhere.

Le volume entier tenait dans une seule question — « ai-je besoin d'une réponse maintenant, ou seulement que ce soit fait un jour ? ». Le #1 l'a posée à l'échelle d'un appel, le #2 à l'échelle d'un fan-out durable, le #3 à l'échelle d'une transaction qui traverse des services. À chaque fois, le couplage temporel s'est révélé un choix, jamais un défaut. La suite logique attend au Vol 7 : quand on défait par compensation et que les messages arrivent deux fois, comment reste-t-on cohérent ? La Saga, qu'on a vue en germe, y devient le sujet.The whole volume fit in one question — 'do I need an answer now, or only that it gets done someday?'. #1 asked it at the scale of a call, #2 at the scale of a durable fan-out, #3 at the scale of a transaction spanning services. Each time, temporal coupling proved a choice, never a defect. The logical sequel waits in Vol 7: when you undo by compensation and messages arrive twice, how do you stay consistent? The Saga, seen here in seed, becomes the subject there.

Les voisins que ce numéro débloqueThe neighbors this issue unlocks

  • Saga — la transaction distribuée sans verrou global : une suite d'étapes locales, chacune avec son action compensatoire pour défaire à l'échec. C'est l'orchestration de ce numéro, poussée jusqu'à la résilience — le sujet central du Vol 7.the distributed transaction without a global lock: a series of local steps, each with its compensating action to undo on failure. It's this issue's orchestration pushed to resilience — Vol 7's central subject.
  • Workflow engine — l'orchestrateur sorti du code : les étapes, l'état et les compensations décrits en données, persistés et rejouables. Utile quand le processus est long, doit survivre aux redémarrages, et mérite d'être observé et versionné comme un artefact métier.the orchestrator pulled out of code: steps, state and compensations described as data, persisted and replayable. Useful when the process is long, must survive restarts, and deserves to be observed and versioned like a business artifact.
  • Monolithe distribuéDistributed monolith — l'anti-pattern qui guette des deux côtés : une chorégraphie si emmêlée qu'on ne peut plus rien déployer seul, ou un orchestrateur-dieu qui aspire la logique de tous. Le nommer, c'est se rappeler que le but n'est pas « découplé » ni « centralisé », mais « possédé par qui de droit ».the anti-pattern lurking on both sides: a choreography so tangled nothing deploys alone, or a god orchestrator that absorbs everyone's logic. Naming it is a reminder that the goal isn't 'decoupled' nor 'centralized', but 'owned by the right place'.

Le kata de décision — transaction ou réactions ?The decision kata — transaction or reactions?

Rien à implémenter ici : le geste qui ancre, c'est de trancher — et de savoir pourquoi. Trois flux. Pour chacun, parie avant de dérouler : chorégraphie ou orchestration ? Le critère n'est pas « découplé vs centralisé », c'est « suite de réactions indépendantes, ou transaction qui mérite un propriétaire ? ». La dernière question est la sournoise : elle distingue « il y a un ordre » de « il faut pouvoir défaire ».Nothing to implement here: the anchoring gesture is to decide — and to know why. Three flows. For each, bet before you scroll: choreography or orchestration? The criterion isn't 'decoupled vs centralized', it's 'a chain of independent reactions, or a transaction that deserves an owner?'. The last question is the sneaky one: it separates 'there's an order' from 'you must be able to undo'.

# Trois flux métier. Pour CHACUN, une seule question :
# chorégraphie (réactions libres) ou orchestration (un propriétaire tient
# l'ordre, l'état, le défaire) ? Attention : « ordonné » n'est pas « transaction ».

FLUX_A = "commande payée → envoyer le reçu · tracer l'analytics · réchauffer le cache"

FLUX_B = "réserver un voyage → bloquer le vol · bloquer l'hôtel · débiter la carte
          règle métier : si l'hôtel échoue, LIBÉRER le vol et NE PAS débiter"

FLUX_C = "inscription → créer le compte · envoyer l'e-mail de bienvenue · provisionner l'espace
          règle métier : l'e-mail ne part qu'APRÈS la création du compte"
Chez toi, cette semaine.In your codebase, this week.

Prends ton processus métier le plus long — celui qui traverse plusieurs services par événements — et pose-lui la seule question qui tranche : « à l'échec de l'étape 3, qu'est-ce qui défait les étapes 1 et 2 ? ». Un point de départ pour repérer les chorégraphies : grep -rn "@subscribe\|@event_handler\|on_.*_event\|publish(" src/ — suis une chaîne d'un publish à son subscribe. Si la réponse à « qui défait ? » est « personne », et que le métier exige de défaire, tu tiens une transaction sans propriétaire : donne-lui un orchestrateur.Take your longest business process — the one that spans several services by events — and put to it the one question that settles it: 'when step 3 fails, what undoes steps 1 and 2?'. A starting point to spot choreographies: grep -rn "@subscribe\|@event_handler\|on_.*_event\|publish(" src/ — follow a chain from a publish to its subscribe. If the answer to 'who undoes?' is 'no one', and the business requires undoing, you hold an ownerless transaction: give it an orchestrator.