The three pillars — logs, metrics, and traces — are commodity capability now; every serious vendor has them. A PM's real job is picking the wedge: reduce mean-time-to-detect (MTTD) and mean-time-to-resolve (MTTR) for a specific on-call population, usually by fixing correlation across pillars or taming cardinality-driven cost, not by adding a fourth pillar.

Quick Answer: Don't compete on "we collect logs, metrics, and traces." Compete on how fast a specific engineer goes from alert to root cause, which mostly comes down to cross-pillar correlation, sane cardinality/cost controls, and alerts that don't cry wolf.

Why "we do all three pillars" is not a strategy

Stating that your product ingests logs, metrics, and traces answers a feature checklist, not a customer problem. Every credible competitor — Datadog, Grafana Labs, New Relic, Honeycomb, Splunk — already claims full-pillar coverage, so the claim carries zero differentiation and doesn't tell a buyer why to switch.

The three pillars, as codified by Peter Bourgon and popularized through the CNCF's observability whitepaper, are inputs to a job, not the job itself:

  • Logs — discrete, timestamped events with rich context, expensive to store and search at volume.
  • Metrics — cheap, aggregated numeric time series, great for alerting, poor at explaining "why."
  • Traces — request-scoped causality across services, the only pillar that shows you a call graph.

The actual buyer job is: "When something breaks, tell me fast and tell me where." That's an MTTD/MTTR problem, and it's the frame every roadmap decision should run through. If a feature doesn't measurably shrink detection or resolution time for a defined user, it's decoration.

The JTBD lens: the on-call engineer at 3am

Run every roadmap bet through a single persona: the on-call engineer paged at 3am with a vague alert and a laptop on a nightstand. Their job-to-be-done isn't "view a dashboard" — it's "decide, in under five minutes, whether this is real, whose service it is, and what changed." Applying Clayton Christensen's Jobs to Be Done lens here forces you past feature parity and into the functional, emotional, and social dimensions of that 3am moment.

DimensionWhat the 3am engineer actually needsWhat most tools ship instead
FunctionalOne screen answering "what changed, where, and since when"Separate log, metric, and trace UIs requiring manual pivoting
EmotionalConfidence to go back to sleep or escalate correctlyAlert noise that erodes trust in every signal
SocialEvidence to hand off cleanly to the next engineer or teamScreenshots and Slack threads as the "handoff" system

The cardinality-cost tradeoff is the hidden roadmap constraint

High-cardinality telemetry — unique user IDs, request IDs, or pod names as label values — makes debugging precise but multiplies storage and query cost combinatorially, because most time-series backends index on the full label set. Every observability roadmap decision is, underneath, a cardinality decision, whether the PM names it or not.

Cardinality is the number of unique combinations of a metric's label values. A counter with status_code (a handful of values) is cheap. The same counter with user_id added explodes into millions of unique series. This isn't a niche edge case — it's the single most common cause of observability bill shock, and Prometheus's own documentation flags unbounded label cardinality as its top operational hazard.

Why this becomes a product decision, not just an ops one

  1. Ingest pricing models punish cardinality directly. Most vendors bill on active series or ingested events, so a well-intentioned "add more context" feature request can 10x a customer's bill without anyone noticing until the invoice arrives.
  2. Query performance degrades non-linearly as series count grows, so the same dashboard that loaded in 200ms at low cardinality can time out at high cardinality.
  3. Sampling and rollups are the usual mitigation, but they trade fidelity for cost — and a PM who doesn't expose that tradeoff to the customer is quietly making it for them.
ApproachFidelityCost impactBest fit
Full cardinality, no limitsHighestUnbounded, unpredictableSmall services, early-stage debugging
Label allowlistingMedium-highPredictable, cappedMost production services
Head-based samplingMediumLarge reductionHigh-volume traces where every request doesn't need capture
Tail-based samplingMedium-high (biased toward errors/latency outliers)Moderate reduction, higher compute costServices where rare failures matter most
Pre-aggregated rollupsLow (loses raw events)LowestLong-term trend storage, not incident debugging

The takeaway for a PM: don't let engineering silently pick a row in that table. Make cardinality and sampling policy a visible, documented product decision with a clear cost-versus-debuggability tradeoff the customer can see.

The correlation problem is where MTTR actually lives

Correlation — automatically linking a spike in a metric to the relevant logs and the specific trace that explains it — is the single highest-leverage feature category in observability, because manual pivoting between three separate UIs is the actual time sink in most incidents, not the absence of any one pillar.

Ask any senior SRE what eats their MTTR and it's rarely "we didn't have a log line." It's "I had the log line, the metric, and the trace, but they lived in three tools and I spent twenty minutes stitching them together by timestamp and eyeballing." Correlation is the connective tissue, and it's genuinely hard because the three pillars have different native identifiers — a trace ID, a container ID, a request ID — that don't always propagate cleanly through every hop.

Practical correlation mechanisms worth roadmapping

  • Exemplars — attaching a trace ID to a metric data point at scrape time, so a dashboard spike links directly to a representative trace, an approach OpenTelemetry has standardized into its metrics spec.
  • Structured logging with trace context injection — every log line carries trace_id and span_id, so a log search can pivot straight into the trace waterfall.
  • Unified query language across pillars — letting a user write one query that joins a metric threshold breach against logs and traces in the same time window, rather than three separate query surfaces.
  • Service-graph-anchored navigation — using the trace-derived dependency graph as the default navigation frame, so "which service" is answered before "which log line."

None of this is exotic; OpenTelemetry's own positioning is explicitly that a single instrumentation standard across all three signal types is what makes correlation tractable, instead of stitching together disparate vendor SDKs.

Alerting fatigue is a product failure, not a tuning failure

Alert fatigue happens when alert volume or noise exceeds an on-call engineer's ability to trust and act on each one, and it is fundamentally a design failure in the alerting product — thresholds, deduplication, and routing — not a training or discipline problem to solve with better runbooks.

Google's Site Reliability Engineering book is blunt about this: every alert that pages a human should be actionable, and alerts that aren't actionable should not page. That principle is under-implemented in most observability tooling, which defaults to static thresholds that generate noise proportional to traffic variance, not proportional to actual risk.

The failure mode, concretely

  1. A static threshold alert (e.g., "CPU > 80%") fires during expected traffic spikes, training the on-call engineer to snooze first and investigate later — or not at all.
  2. Duplicate alerts fire across multiple pillars for the same underlying incident — a metric threshold breach, a log error-rate spike, and a trace latency alert all pages separately — multiplying noise for one root cause.
  3. Alerts route to the wrong team because ownership metadata wasn't attached at instrumentation time, adding hand-off latency before anyone even looks at the problem.

The fix set is well established and worth roadmapping explicitly: anomaly-based thresholds instead of static ones, alert deduplication and grouping at the incident level rather than the metric level, and ownership-aware routing baked into the telemetry schema itself, not bolted on in the alerting layer afterward. This is also where SLO-based alerting earns its keep — alerting on error-budget burn rate rather than raw thresholds cuts noise dramatically because it only pages when the rate of budget consumption threatens a customer-facing commitment, not every time a metric wiggles.

Differentiation map: single pillar versus unified platform

Observability vendors cluster into two credible strategic postures — deep, best-in-class depth on one pillar, or breadth across a unified platform — and a PM's positioning choice should be explicit about which one they're building toward, because trying to be both usually means being mediocre at both.

PostureExample categoryStrengthReal cost
Best-in-class single pillarDeep tracing (e.g., Honeycomb-style event-based tracing)Superior depth, faster power-user workflows, purpose-built UXCustomer must integrate and pay for at least one more tool for full coverage
Unified platformFull-stack suites (e.g., Datadog, Grafana, New Relic)One vendor, one bill, native cross-pillar correlationIndividual pillars often shallower than a specialist competitor
Correlation-layer overlayTools that ingest from existing pillar tools and add correlation on topDoesn't force a migration, lower switching costDepends entirely on upstream tool quality and API stability

A PM entering this market with a new entrant needs to be honest about which lane they're actually in. The wedge for a single-pillar specialist is depth and workflow speed for a specific user (often the engineer who lives in traces all day). The wedge for a unified platform is reducing the pivot cost across pillars — which only pays off if correlation is genuinely good, not just "we have all three tabs."

Positioning your roadmap against this map

  • If competing on single-pillar depth, the roadmap should protect and extend that depth relentlessly — don't dilute it chasing platform breadth too early.
  • If competing on unified platform, correlation quality (previous section) is the make-or-break metric, not pillar count.
  • If entering via migration or consolidation — replacing three point tools with one — treat the transition itself as a product, the way migrations-as-products thinking frames any consolidation effort: with its own success criteria, rollback plan, and adoption curve, not as a one-time data-export checkbox.

Where Prodinja fits into this workflow

Key Takeaways

  • "We do logs, metrics, and traces" is table stakes, not a strategy — every credible competitor already claims full-pillar coverage.
  • Anchor the roadmap to MTTD and MTTR for a specific persona (the 3am on-call engineer), using a JTBD and opportunity-scoring lens to find the highest-importance, lowest-satisfaction gaps.
  • Cardinality is a hidden cost lever — every "add more context" request is implicitly a cost decision, and mature products surface that tradeoff before ingest, not after the bill.
  • Correlation across pillars, not pillar count, is where MTTR actually improves — exemplars, trace-context-in-logs, and unified query are the mechanisms that matter.
  • Alert fatigue is a design failure in thresholds, dedup, and routing — fix it with anomaly detection, incident-level grouping, and error-budget-based alerting, not more runbooks.
  • Pick a differentiation lane deliberately — best-in-class single pillar, unified platform, or correlation overlay — and don't try to be all three at once.
  • Schema-first thinking (spans, labels, cardinality limits) turns cost tradeoffs into visible product decisions instead of accidental engineering defaults.

Frequently Asked Questions

What makes an observability product actually differentiated in 2026?

Differentiation comes from cross-pillar correlation quality and measurable MTTD/MTTR reduction for a defined user, not from claiming coverage of logs, metrics, and traces. Pick a clear lane — deep single-pillar specialization or genuinely unified correlation — and invest there rather than chasing feature parity everywhere.

How should a PM think about cardinality when scoping a telemetry feature?

Treat cardinality as a cost decision made at schema design time, not an ops surprise discovered in a bill. Any feature request that adds high-cardinality labels (user IDs, request IDs) should carry an explicit sampling, allowlisting, or rollup policy before it ships.

Why does alert fatigue happen even with well-tuned thresholds?

Alert fatigue typically comes from static thresholds that don't account for traffic variance, duplicate alerts across pillars for one root cause, and routing that ignores ownership metadata — not from thresholds simply being "wrong." Anomaly-based alerting and error-budget burn-rate alerts address the root causes directly.

Is it better to build a single-pillar specialist product or a unified observability platform?

Neither is inherently better — it depends on whether you can sustain depth (specialist) or genuinely excellent correlation (platform), since a shallow attempt at both loses to a focused competitor in either lane. Map your roadmap explicitly against one posture rather than drifting between them.

How does the customer journey of an on-call engineer differ from a typical SaaS user journey?

The on-call engineer's journey compresses into minutes under high stress, with success measured by detection and resolution speed rather than feature discovery or satisfaction over weeks. Mapping that compressed, high-stakes journey — similar to how a customer journey emotion curve captures spikes in frustration and relief — surfaces where correlation gaps cost the most time.