Skip to content
Back to Blog
Software
Updated

Observability starts with the business event that failed

Healthy servers can hide a stuck workflow. Start observability with the accepted business request and the evidence that it reached a terminal outcome.

Branded abstract 5e Labs cover image for Observability starts with the business event that failed

Business event observability starts with a question support can ask: what happened to the request the user submitted? CPU charts and HTTP error rates cannot answer it alone. The product needs a durable identity for the work and evidence of its progress toward a defined outcome.

Start with one important workflow. Instrumenting everything without naming success can produce plenty of telemetry and very little operational clarity.

Define accepted, completed, and no longer progressing

Choose business events that represent actual state transitions. An export request might be accepted, queued, generated, and made available, or end in a terminal failure. “Request returned 200” is a technical observation, not proof the export exists.

Give each operation an ID that survives retries and background processing. Attach tenant context where authorized and useful, but avoid putting sensitive document contents into logs. Record event version, timestamp, outcome, and a reason code that support can interpret.

Keep the operation ledger separate from diagnostic logs. Telemetry may be sampled or expire; it should not be the only record of whether work was accepted. Reconciliation can compare durable business state with expected transitions when an event is missing.

Use traces to explain the path

OpenTelemetry describes traces as the path of a request through an application, built from spans. Use that technical path to investigate the business operation, while retaining the stable operation ID across attempts that may produce different traces.

Propagate context through queue messages and link asynchronous work appropriately. A worker that starts with no connection to the original request makes support reconstruct the story from timestamps. Include external references when safe, without logging credentials or full provider payloads.

Keep high-cardinality identifiers in logs or traces rather than making each operation a separate time-series label. Metrics should summarize rates and age distributions; the detailed record should identify the affected work.

A hypothetical export that looks healthy

Suppose a reporting product accepts 100 hypothetical export requests. All request handlers succeed. A worker generates 98 files, but two operations remain queued after their messages are lost. Server availability still looks fine.

The useful signal is the age of accepted work without a terminal outcome. For this example, the team chooses a ten-minute completion expectation for ordinary exports and a separate class for larger ones. Those numbers are illustrative operating choices, not recommended industry thresholds.

SignalQuestion it answers
Accepted operationsDid the product acknowledge the work?
Terminal outcomes by accepted cohortHow much of that work finished?
Oldest nonterminal operationWhat may be stuck now?
Retry and failure reasonsWhere should investigation begin?

Do not simply subtract today’s completions from today’s submissions when work can cross the reporting boundary. Track cohorts or outstanding state so slow but valid jobs do not resemble missing work.

Make every alert lead to a decision

An alert should name the workflow, affected scope, evidence link, and owner. Its response procedure should distinguish safe retry from reconciliation. Otherwise, an operator may duplicate an action while trying to clear a queue.

Next, choose a recent support question and check whether the team can answer it from an operation ID without querying unrelated systems manually. That is a bounded observability improvement to include in custom software development, with a clear test of whether the new telemetry helps.

Have a project in mind?

Get in Touch