HIVE80lab — Ops notes

Service catalog for small teams: one page that says what you run for customers

Every serious ops artifact a small team owns secretly depends on a document they never wrote: the list of services, who owns each one, and what “working” means for it. Incident severity fights happen without it (is the dashboard being slow a P1 or a P2? says who?), the status page drifts into forty-component theater without it, and capacity effort gets spread evenly across services of wildly different importance. A service catalog fixes the root. It does not need a CMDB tool — for a team under fifty, it needs one page with nine rows and a rule that everyone actually follows.

This note gives the one-page catalog, the three-tier system that does the real work, the written “up means” promises that feed your status page, the five traps that turn catalogs into shelfware, and a one-afternoon rollout.

1. The catalog: one row per customer-facing service

ServiceWhat the customer getsTierOwner“Up” meansCustomers see
Checkout APIcan complete a purchase1Priyaaccepts payments 99.9%/mo, latency p95 < 800msstatus page row
Ingest pipelinetheir data appears in reports1Samqueue drains < 5 min behindstatus page row
Dashboard webcan log in and view reports2Marcoloads < 3s for 99% of sessionsstatus page row
Billing jobscorrect invoices on the 1st2Priyaruns complete by 06:00, zero missed accountsemail if missed
Internal adminstaff tools only3Sambest effortnothing

Each column earns its place:

2. Three tiers, and everything hangs off them

The tier decides behavior before the incident, which is the only moment it can be decided calmly. The catalog is where that decision is stored so nobody has to re-litigate it at 2am — the same pre-agreement logic as standing orders, applied to infrastructure.

3. “Up” means: the promise in one sentence

Tier 1 and 2 services each get a written promise — one measurable sentence, measured where the customer experiences it (the load balancer, the queue lag, the job completion time), not inside the process where everything looks healthy. The sentence does three jobs at once: it is the component description on the status page, the threshold the error budget spends against, and the definition of “recovered” in a post-mortem. Teams that skip this sentence discover during their first bad night that “the service is up” and “customers can check out” were never the same claim.

4. The five traps

CMDB theater. Two hundred rows with owners like “Platform” and last-modified dates from two reorgs ago is not a catalog, it is a museum. If the page does not fit on one screen, it will not be read during an incident, which is the only time it matters. Nine rows that everyone knows beat ninety nobody maintains.

Tier inflation. Everything becomes tier 1 because every owner argues well. Then tier 1 stops meaning anything, paging spreads evenly, and the genuinely critical service waits behind a broken internal dashboard. The test is brutal and simple: can a tier-1 outage page a human at 3am with no discussion? If that is unremarkable, the list is wrong.

“Up” undefined. A catalog row without a measurable promise just relocates the argument from the incident to the post-mortem. One sentence, measured where the customer feels it, written before it is needed.

Teams as owners. “Owned by Data Platform” resolves to whoever is unluckiest in the room. A name and a backup, on the page, next to the row.

The catalog nobody consults. If incident severity is not assigned by looking up the tier, if the status page components are not the catalog rows, if capacity is not tracked per tier-1 service first — then the page is decoration, and it will rot. The catalog has to be the input to at least three processes you already run, or it is one more stale wiki page.

5. Worked example

A seven-person e-commerce enablement SaaS argues about severity during every incident, lists forty microservices on a status page nobody reads, and split its last quarter's reliability budget evenly across everything. They spend one afternoon on the catalog: nine rows, three tiers, named owners, one-sentence promises for the five tier-1/2 services. The forty-component status page collapses to five components — the five rows customers can actually hold.

The next two incidents prove the page. A nightly ingest backlog that would previously have triggered a 2am all-hands is looked up, found to be tier 1 with a “queue drains in 5 minutes” promise, breached for 40 minutes — P2, status note posted at 9am, no page. Two weeks later, checkout 5xx at 14:10 on a Tuesday: tier 1, P1 by default, first status update at 14:22, engineer paged by name. Nobody argued about either severity. The quiet change is in the budget: capacity rows now exist only for tier 1–2 services, which is where the next infrastructure dollar goes. The counter-example is the sister company that bought a CMDB, seeded it with two hundred services, and held a quarterly review to discover the owners listed had all left.

6. Metrics (for the metric itself)

From the HIVE80lab kit

Related: the incident severity matrix is what the tiers feed, the status page template is the public face of the same rows, and the capacity planning template sizes them in the same weekly meeting.