← Thoughts

the operating system built for big data connectivity

Michaela Isaacs Michaela Isaacs 8 min read
the operating system built for big data connectivity

Filed under: Platform ownership · PM operating systems · Turning tickets into telemetry

growthstack has been about external growth motion so far — customer intelligence, ranked accounts, outreach engines, replies fed back into the product. This post is about the other half of the growth job, the part nobody writes about because it looks like plumbing: the internal operating system a substrate owner has to build when everything else in the platform depends on their surface.

Here's the thing about owning a substrate. If it works, nobody notices. If it breaks, everything above it breaks. And either way, there's no running a growth motion on it the way you'd run one on a headline feature, because the substrate has no headline. The growth motion has to be the health of the surface itself — how fast the team ships, how well the roadmap holds, how coherently the strategic themes land, how visibly the deprecations complete, how quickly the partner program moves. Substrate growth is operational growth.

So the substrate got an operating system.

The surface

The substrate in question sits under every ingestion path in the platform — hundreds of connectors, a partner-authored connector program, a query engine that consumes them, and the customer-facing experiences that pull from all of it. It touches every ingestion story anyone tells about the platform. Huge blast radius when it moves, even huger one when it doesn't.

Running that surface at scale means holding a lot of concurrent streams in your head:

  • Committed features currently in flight and the state of each
  • Customer escalations, aged, per-owner
  • Team open items across a broad backlog with a health lens for staleness
  • Strategic themes and the epics that legitimately belong under each
  • Bug volume and aging
  • PM-ask threads from other product teams that need routing
  • PM-tracked items — the cross-org watch list for dependencies you don't own
  • Deprecation campaigns with their own tempo and stakeholder set
  • Partnership commitments to the connector program

The default state of tracking all of this is a folder of saved queries, most of them slightly out of date, none of them joined, all of them individually opened by a PM on Monday morning who then tries to synthesize the picture in their head. It doesn't scale. It also doesn't produce a shared picture — every PM on the team ends up with a slightly different mental model of "how are we doing," which is the one failure mode a substrate team actually can't afford.

Holding the synthesis in one head got old. So the synthesis became an artifact.

What it is

The dashboard is a single self-contained HTML file, published to an internal short link, that refreshes automatically on a schedule. Every card, every section, every tab is generated from a live pull against the underlying work-tracking systems — no manual spreadsheets, no PM-maintained lists, no one-person-in-the-know.

The tabs are purpose-built for the way the team actually operates:

  • Committed features — the current cycle's committed work, with target dates, ownership, state distribution, and a hygiene view that surfaces items missing state or dates.
  • Customer escalations — active escalations, aging, ownership, last-touch signal.
  • Team open items — the broader backlog with a health lens for stale/idle items.
  • Themes and epics — the strategic groupings the team commits against, validated against the theme→epic whitelist so nothing gets mis-tagged.
  • Bugs — volume, aging, per-owner.
  • PM asks and PM-tracked — the two channels PMs use to route work into and around the team.
  • Deprecation campaigns — the multi-quarter arcs that require their own tempo.
  • Scrum agenda — the tab everyone opens on scrum day.

Every tab is a joined view over the same underlying pull, sliced differently. The dashboard is the join.

The scrum agenda tab — where a substrate team's velocity actually lives

The single feature on this dashboard that has moved the team's velocity the most is the scrum agenda tab.

Before it existed, every weekly scrum began with someone pasting a set of query URLs into chat and asking the team to click through them live. It burned the first ten minutes of every meeting. It made cross-checking painful. It gave the meeting a low-signal opening that never recovered. Worse, whoever ran scrum had to redo their own prep every single week — nothing was standing.

Now the scrum agenda tab is the single artifact the team walks through together, live. It has a fixed section order that mirrors the way the team already thinks: strategic themes first, then customer escalations, then team open items, then deprecations, then partnerships, then live cross-team asks, then PM-tracked items, then stale items. Each section shows a count and expands into the current list. Sections with zero items collapse. Nobody has to remember what to check — the tab already checked it.

A companion AI skill drafts the Teams-chat post that opens each scrum. It reads the tab, pulls carryovers from the inbox (sign-off asks, pending threads with specific colleagues, anything flagged for scrum), and formats a plain-text agenda in-voice. Not markdown. Not emoji. Not AI-scaffolded. Just topic names, in the order they get walked, ready to paste.

The saved minutes are real but not the point. The point is that the shared operating picture is now external to any one PM's head. Anyone can open the dashboard and know exactly what the team is working on, what's stuck, what's aging, and what needs a decision this week. That changes what the team is capable of, especially at substrate scale where the surface area is bigger than any one person can hold.

The invariants — trust as a template contract

The biggest failure mode in a PM operating tool is silent regression. Somebody makes a change, a section disappears, nobody notices for two weeks, and by then trust is gone.

So the dashboard has a formal list of invariants — cards, sections, and tabs it must render every refresh, whether or not the underlying query returns data. If an invariant section renders empty, that's information. If an invariant section is missing entirely, that's a bug. The refresh pipeline has a HALT check that fails loudly if any invariant is missing after a build, and doesn't publish. That single mechanism has caught more than one silent break before it landed in front of the team.

Same discipline as the provenance timestamps on the customer intelligence dashboards. Predictability is the trust surface. A dashboard the team can predict is a dashboard the team will rely on. A dashboard the team can rely on quietly stops being "the PM's tool" and starts being "how we run."

The cross-org join — where the substrate story really lives

The hardest technical piece of this dashboard is the cross-org join. The substrate's work doesn't live in a single work-tracking org — some of it sits in one, some sits in a completely separate org belonging to another platform team whose surface consumes this one. The PM-tracked tag exists specifically to let PMs watch cross-boundary work they don't own but do depend on.

The refresh pipeline runs queries against both orgs, joins by tag and area path, and produces a single unified list. This is the join nobody on the team was building because the friction of doing it manually was too high — and the moment it was automated, it became the most-checked view on the dashboard.

The joins that don't get built are almost never technical problems. They're org-chart problems. That's a recurring growthstack theme, and it applies just as hard to internal ops as it does to customer intelligence. Substrate ownership means owning the joins across every team whose work bleeds into yours.

The theme→epic validation — small, cheap, huge

One more piece worth mentioning. The dashboard renders items grouped by strategic theme, and each theme has a whitelist of epics that legitimately belong under it. Every item's tags get validated against that whitelist at render time. If an item is tagged with an epic that doesn't belong under its theme, the dashboard shows the item under its theme but withholds the invalid epic label until it's corrected. The validation is visible on the dashboard itself, so bad tags get noticed and fixed the day they're applied.

Tiny feature. Costs almost nothing. Killed a class of "why is this showing up under this theme?" confusion that used to eat time in every planning meeting. Small guardrails, huge compounding on a substrate team.

Why this is a growth post, not an ops post

growthstack isn't an internal-tooling blog, so this needs tying back to the thesis.

The connectivity substrate is a growth surface in a different shape than a headline product. Its growth is its health. Every stalled feature is a customer request that lands late. Every unnoticed regression is a partner integration that misses a window. Every mis-tagged theme is a leadership review that lands with the wrong story. The team's ability to ship — cleanly, on time, with a legible strategic narrative — is the growth motion for a substrate. The operating layer and the growth layer aren't separable, because on a substrate they're literally the same thing.

Which is why the operating dashboard is a growth asset. Every hour it saves in synthesis is an hour that goes back into shipping. Every silent regression it catches is a customer commitment that lands. Every cross-org join it maintains is a partner dependency that doesn't slip. The operating dashboard is the growth engine for the surface it runs under.

Where this goes next

Two things are queued. Both push in the same direction: turn the operating layer into an active signal, not just a visible one.

The first is turning aging thresholds into automated nudges — items past their target date generate a low-key comment on the item, PM-tracked items surface in the owning PM's weekly rollup, stale escalations flag the CSA channel automatically. The dashboard already knows what's wrong. The next iteration is the dashboard doing something quiet about it.

The second, and the more interesting one: every internal signal on this dashboard should be joining into external customer signal, and vice versa. A customer escalation on the internal dashboard should render on that customer's card in the DI Insights journey view. A PM-tracked cross-org item blocking a partner-relationship win should surface on the mirroring outreach queue. The internal operating layer and the external growth layer are two views of the same stack.

That's the whole point of a growth stack. Inside and outside aren't different systems. They're the same system, seen from different angles.

— growthstack

Worth your inbox?

More deep dives like this one, straight to your inbox.

Comments