Skip to main content

Business Journey Mapping

Layer: business observability (the why)

Product and business operations own this layer. Platform teams support emission and storage; they do not define what "success" means for a regulated journey.

Outcome

For each critical journey, you can answer:

  • Is the customer completing the workflow?
  • Is revenue or obligation impact visible in near real time?
  • Which step drives drop-off when outcomes degrade?

Steps

1. Name the journeys

Pick journeys that matter for revenue, risk, or regulation (not every screen).

JourneyBusiness ownerExample outcome
Retail checkoutProduct / paymentsPayment success rate
Claims intakeOperationsFirst-touch resolution rate
KYC onboardingCompliance / productVerification completion

2. Define business KPIs per journey

KPI typeExampleAvoid
Success rate% payments completedRaw page views without outcome
ConversionApplication → approvalInfra CPU as proxy for business health
Drop-offAbandon at step 3 of 5Vanity metrics with no service mapping

3. Emit business events

Business events are first-class signals, not spreadsheet exports.

FieldPurpose
journey_idStable workflow identifier
stepNamed stage in the journey
outcomesuccess / failure / abandon
correlation_idJoin to service traces (required)
principalCustomer or case identity (policy-compliant)

4. Set business-facing SLOs

SLOExample targetConsumer
Payment success99.5% / 24hProduct + SRE
Claims submission completion95% / 7dOperations
Onboarding verification decision90% terminal outcome / 30dCompliance

5. Map KPI → service entry points

Document which API or event starts the journey slice you measure. Correlation playbook wires the rest.

Business KPIService entry
Payment successPOST /checkout/pay
Claims intakePOST /claims/submit
Onboarding verificationPOST /onboarding/applications (onboarding-api)

Worked example: KYC onboarding (banking)

One regulated journey end to end. Use this as the template when you name journeys, emit events, and hand off to the correlation graph.

FieldValue
Process / journey nameRetail KYC onboarding
journey_idonboarding.kyc.retail
Business ownerCompliance + product
Outcome KPIVerification decision rate (application started → final KYC outcome)
Business SLO90% reach a terminal verification outcome within 30 days (exclude customer-abandoned)
Service entryPOST /onboarding/applications on onboarding-api

Journey steps

Stepstep valueWhat happensOwning service (typical)
1application_startedCustomer opens account application; case createdonboarding-api
2identity_capturedID document and biometrics capturedonboarding-api / doc-capture
3identity_checkedDocument authenticity and face match runidv-service
4screening_completeSanctions, PEP, and adverse-media screen completescreening-service
5risk_ratedCustomer risk rating assigned; enhanced due diligence if requiredrisk-engine
6verification_decidedKYC case reaches a terminal verification outcomeonboarding-api / case-service

Terminal outcomes on verification_decided (use outcome):

outcomeMeaningWhen applicable
verified_successIdentity and screening clear; KYC passedIDV passed, sanctions/PEP clear (or cleared after review), risk rating within policy, no outstanding document requests
failedVerification rejected; case closed without passHard fail: forged/mismatched ID, confirmed sanctions hit, policy deny after review, applicant ineligible, or customer withdraws after a final reject
need_more_infoCustomer action required before a pass/fail decisionSoft gap the applicant can fix: expired passport, blurry selfie, missing proof of address, incomplete form fields, or a requested re-upload
holdBank/ops action required; customer cannot unblock aloneManual compliance review, PEP escalation, adverse-media investigation, vendor outage awaiting retry, four-eyes attestation pending, or legal freeze

How to choose: if the next move is the customer's, use need_more_info. If the next move is the bank's or a vendor's, use hold. If the case is closed with a deny, use failed. Only emit verified_success when KYC policy is satisfied end to end.

Account opening is a downstream process. It is not the success signal for this journey.

Correlation ID through the path

Ingress assigns one correlation_id (or accepts a client-supplied ID that passes validation). Every hop forwards it.

HopPropagates asJoins to
API gateway → onboarding-apiHTTP header X-Correlation-Id (or W3C traceparent + baggage)Root service span
onboarding-apiidv-serviceSame header on outbound HTTPChild span
onboarding-apiscreening-serviceMessage attribute on async queue (vendor callbacks)Async consumer span
Business event storeField correlation_id on each journey eventKPI dashboard → trace query

Example ID for one applicant attempt: corr-9b1e4d70-kyc-20260711.

All six step events for that attempt share the same correlation_id and journey_id. Service traces for the same attempt share the same ID (or link via trace_id recorded on the business event).

Sample business events

Emit one event per step transition (not only the final outcome).

WhenExample payload fields
Step 1journey_id=onboarding.kyc.retail, step=application_started, outcome=in_progress, correlation_id=corr-9b1e4d70-kyc-20260711, principal=app-55201 (tokenised case ID)
Step 4 hold pathstep=screening_complete, outcome=in_progress, same correlation_id, reason_code=PEP_MATCH
Step 6 verifiedstep=verification_decided, outcome=verified_success, same correlation_id, channel=mobile
Step 6 more infostep=verification_decided, outcome=need_more_info, same correlation_id, reason_code=DOC_EXPIRED
Step 6 holdstep=verification_decided, outcome=hold, same correlation_id, reason_code=MANUAL_REVIEW

What you can answer in an incident

With this mapping in place:

  1. Business: verified_success rate dropped this week. Filter events where journey_id=onboarding.kyc.retail and step=verification_decided.
  2. Step: Rise in need_more_info and hold after identity_checkedscreening_complete (vendor timeouts or escalations).
  3. Service: Open traces for correlation_id=corr-9b1e4d70-kyc-20260711 (or the cohort of IDs in the window).
  4. Infra: From the slow screening-service span, follow workload labels to queue depth or vendor dependency latency.

That is the business layer's job: name the process, emit step outcomes with a shared correlation_id, and document the service entry. Correlation and infra playbooks complete the graph.

Release gate

  • Each priority journey has a named business owner
  • KPIs are outcome-based, not activity-based
  • Business events include correlation_id
  • Business SLOs are documented and alertable
  • KPI → service entry mapping exists for correlation