Service Catalog Entry Skill

Write a service catalog entry for a microservice or internal platform service — covering service identity, purpose, architecture context, SLAs, API contract summary, data classification, dependencies, operational runbooks, and known limitations.

Service Catalog Entry Skill — The Skill Playground: pick the Executive Update skill, fill in a few notes, hit run, and watch a structured executive… (from the mohitagw15856/pm-claude-skills README)

From the mohitagw15856/pm-claude-skills README — shows the whole collection, not only this skill. · view on GitHub

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/service-catalog-entry.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit mohitagw15856/pm-claude-skills/skills/service-catalog-entry#main ~/.claude/skills/service-catalog-entry

For one project only, change the path to .claude/skills/service-catalog-entry.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Service Catalog Entry Skill

Show the full text301 lines
namedescription
service-catalog-entryWrite a service catalog entry for a microservice or internal platform service — covering service identity, purpose, architecture context, SLAs, API contract summary, data classification, dependencies, operational runbooks, and known limitations. Use when asked to document a service for an internal developer portal, write a service README for a platform catalog, create a service overview page, or onboard a new service to a service registry. Produces a complete service catalog entry suitable for an internal developer portal or wiki.

Service Catalog Entry Skill

Produce a complete service catalog entry for a microservice or internal platform service — giving any engineer at the company the context they need to understand what the service does, how to depend on it, what its reliability characteristics are, and where to go when something goes wrong. A well-written catalog entry eliminates "who owns this?" and "is this safe to use?" questions that slow down teams depending on shared services.

Required Inputs

Ask for these if not already provided:

  • Service name — the canonical identifier used in code, monitoring, and deployments
  • Team and owner — team name, tech lead name, and on-call contact
  • Architecture overview — what the service does, what calls it, and what it calls
  • SLA requirements — availability target, latency SLO, support tier, and maintenance window
  • Key APIs — the most important endpoints other teams use (method, path, brief description)
  • Data handled — what data the service stores or processes, sensitivity classification, retention

Output Format


Service Catalog: [Service Name]

[One sentence — what this service does for consumers, in plain language]

e.g. "The Payments Service processes charge, refund, and subscription billing events for all Acme products."


Identity

Field Value
Service name [service-name]
Canonical repository [https://github.com/[org]/[repo]]
Owner team [Team name]
Tech lead [Name] ([Slack: @handle])
On-call rotation [PagerDuty service link]
Slack channel #[team-channel]
Support tier [Tier 1 — 24/7 / Tier 2 — business hours / Tier 3 — best effort]
Status [Active / Deprecated / Sunset date: YYYY-MM-DD]
Language / runtime [e.g. Go 1.22 / Python 3.12 / Node 20]
Deployment platform [Kubernetes / ECS / Lambda / etc.]
Environments [Production: URL]

What It Does

[Two to three paragraphs in plain language — no jargon or acronyms without explanation.]

[Paragraph 1: The business problem this service solves. What would break or be missing if this service did not exist?]

[Paragraph 2: How it works at a high level — the main processing model (e.g. request/response API, event-driven consumer, batch processor), what triggers it, and what it produces.]

[Paragraph 3: What this service is NOT responsible for — the explicit boundaries. This prevents other teams from building incorrect assumptions about scope.]


Architecture Context

System Diagram
[Upstream callers]          [This Service]             [Downstream dependencies]
                                                        
  [Web App]  ──────────→                          ──→  [Primary Database — PostgreSQL]
  [Mobile API]  ────────→  [Service Name]         ──→  [Cache — Redis]
  [Partner API] ────────→  (Port 8080/gRPC)       ──→  [Message Queue — Kafka/SQS]
                                                   ──→  [External Service / API]
                           ↓ emits events to
                        [Event Bus / SNS]
                           ↓ consumed by
                  [Downstream Service A]
                  [Downstream Service B]
Who Depends on This Service
Caller How they use it Contact
[Service / Team A] [e.g. "Calls POST /charges to initiate payments"] [Slack: #team-a]
[Service / Team B] [e.g. "Subscribes to payment.completed events via Kafka topic"] [Slack: #team-b]
[Service / Team C] [e.g. "Calls GET /subscriptions for billing status"] [Slack: #team-c]
What This Service Depends On
Dependency Type Criticality Their on-call
[PostgreSQL instance] Database Critical — all writes fail without it [DBA team: #db-oncall]
[Redis cluster] Cache High — latency degrades without it [Infra team: #infra-oncall]
[Kafka cluster] Message queue High — async events queue [Infra team: #infra-oncall]
[Stripe API] External API Critical — payment processing fails [vendor status: status.stripe.com]
[Auth Service] Internal service Critical — all auth fails [Auth team: #auth-oncall]

Service Level Agreement

Availability and Latency
SLO Target Measurement window Error budget
Availability [99.9%] Rolling 30 days [43 min/month]
p50 latency (key endpoints) < [50] ms Rolling 24 hours —
p99 latency (key endpoints) < [500] ms Rolling 24 hours —
p99.9 latency (key endpoints) < [2000] ms Rolling 24 hours —
Error rate < [0.1]% Rolling 1 hour —

SLO dashboard: [Link to monitoring dashboard] Current error budget remaining: [Link to SLO dashboard or inline value]

Support Tiers
Tier Scope Response time Resolution time
P1 — Service down All authenticated requests failing 15 minutes 1 hour
P2 — Significant degradation Error rate >1% or p99 >2× SLO 30 minutes 4 hours
P3 — Minor issues Non-critical endpoints degraded Next business day 3 business days
Feature requests / bugs Via standard ticket process [Ticket SLA] Per roadmap

To raise an incident: Page via [PagerDuty service link] or post in #incidents. To raise a feature request or bug: File a ticket in [JIRA project / GitHub repo Issues].

Maintenance Windows
  • Planned downtime: [e.g. "Sundays 02:00–04:00 UTC — advance notice posted to #[team-channel] 48h before"]
  • Deployment window: [e.g. "Weekdays 10:00–16:00 UTC — no deploys on Fridays or the day before a public holiday"]
  • Breaking changes notice: [e.g. "Minimum 30 days notice for breaking API changes — see versioning policy below"]

API Contract

Authentication

All API calls require: [e.g. "Bearer token via Authorization header. Tokens are issued by the Auth Service (/api/v1/token)"]

Authorization: Bearer [jwt-token]
Content-Type: application/json
Base URL
Environment Base URL
Production https://[service-name].internal.[company].com
Staging https://[service-name].staging.[company].com
Local development http://localhost:[port]
Key Endpoints
Method Path Description Auth required Rate limit
GET /health Liveness and readiness check No None
GET /api/v1/[resource] [Description — e.g. "List resources for the authenticated user"] Yes [100 req/min]
GET /api/v1/[resource]/:id [Description — e.g. "Get a single resource by ID"] Yes [500 req/min]
POST /api/v1/[resource] [Description — e.g. "Create a new resource"] Yes [50 req/min]
PUT /api/v1/[resource]/:id [Description — e.g. "Update an existing resource"] Yes [50 req/min]
DELETE /api/v1/[resource]/:id [Description] Yes [20 req/min]

Full API documentation: [OpenAPI/Swagger spec URL] | [Postman collection URL]

Versioning Policy
  • API version is in the URL path (/api/v1/, /api/v2/)
  • Minor additions (new optional fields, new endpoints) are non-breaking — no version bump
  • Breaking changes (removed fields, changed types, authentication changes) require a new major version
  • Deprecated versions are supported for [90 days] after the successor reaches GA
  • Deprecation notices are posted to #[team-channel] and emailed to registered consumers
Error Response Format
{
  "error": {
    "code": "[ERROR_CODE]",
    "message": "[Human-readable description]",
    "request_id": "[UUID — include in support tickets]",
    "details": {}
  }
}

Common error codes:

HTTP status Error code Meaning
400 INVALID_REQUEST Request body or parameters fail validation
401 UNAUTHENTICATED Missing or invalid auth token
403 FORBIDDEN Token valid but lacks permission for this resource
404 NOT_FOUND Resource does not exist
409 CONFLICT Duplicate resource or state conflict
422 UNPROCESSABLE_ENTITY Request is valid but violates business rules
429 RATE_LIMITED Too many requests — back off and retry
500 INTERNAL_ERROR Unexpected server error — include request_id in support ticket
503 SERVICE_UNAVAILABLE Downstream dependency unavailable — retry with backoff
Events Published (if event-driven)
Event Topic / Queue Schema Published when
[resource].created [kafka-topic / sns-arn] [Schema URL] [When a new resource is created]
[resource].updated [kafka-topic / sns-arn] [Schema URL] [When a resource is modified]
[resource].deleted [kafka-topic / sns-arn] [Schema URL] [When a resource is deleted]

Data Classification

Data element Sensitivity Stored in Retention Encrypted at rest
[User PII — e.g. email, name] [PII / Restricted] [PostgreSQL users table] [Until account deletion] Yes
[Financial data — e.g. card last 4] [PCI / Highly restricted] [PostgreSQL payment_methods table] [7 years per regulations] Yes — field-level encryption
[Operational logs] [Internal] [CloudWatch / Datadog] [90 days] Yes (at rest, not searched)
[Anonymised analytics] [Public] [Data warehouse] [Indefinite] Yes

Data residency: [e.g. "All data stored in us-east-1. EU customer data stored in eu-west-1 per GDPR requirements."] Compliance scope: [e.g. SOC 2 Type II / PCI DSS Level 2 / HIPAA / GDPR] Data access policy: [e.g. "Production database access requires [approval process]. Access logged and reviewed quarterly."]


Operational Runbooks

Runbook Location Use when
On-call runbook [Wiki / GitHub link] Responding to PagerDuty alerts
Deployment runbook [Wiki / GitHub link] Deploying a new version to production
Database migration runbook [Wiki / GitHub link] Running schema migrations
Rollback runbook [Wiki / GitHub link] Rolling back a bad deploy
Incident response runbook [Wiki / GitHub link] Declaring and managing incidents
Disaster recovery plan [Wiki / GitHub link] Zone/region failure or data loss

Monitoring dashboards:

Dashboard Link Use it for
Service overview [Datadog / Grafana link] Error rate, latency, throughput
Infrastructure [Link] CPU, memory, pod health
Database [Link] Query performance, connection pool
SLO / error budget [Link] Budget burn rate, availability
Dependency health [Link] Upstream dependency status

Known Limitations

Document limitations honestly — this section prevents other teams from building on incorrect assumptions.

Limitation Impact Workaround Planned fix
[e.g. No bulk write API — items must be created one at a time] [Slow for large imports — N HTTP calls required] [Use the batch import CLI tool for >100 items] [Bulk API in Q3 — ticket: [URL]]
[e.g. List endpoints have a maximum page size of 100] [Cannot retrieve more than 100 items in a single call] [Paginate using cursor parameter] [No current plan to increase — by design]
[e.g. Rate limits are per-token, not per-service] [High-traffic consumers may hit limits for other consumers on the same token] [Request dedicated service-account token] [Per-service rate limits in roadmap]
[e.g. Eventual consistency on read-after-write for list endpoints] [Record may not appear in list immediately after creation (<500ms lag)] [Use GET /:id to confirm creation; do not rely on list for immediate consistency] [Read-your-writes consistency available via ?consistent=true — in progress]

Getting Started

To start using this service:

  1. Request access: [Link to access request form or instructions]
  2. Get your service account credentials: [Link to process]
  3. Read the API docs: [OpenAPI spec URL]
  4. Try the sandbox environment: https://[service-name].sandbox.[company].com
  5. Join the consumer Slack channel: #[service-name]-consumers

Client libraries (if available):

Language Package Installation
[Python] [[package-name]] pip install [package-name]
[Go] [github.com/[org]/[package]] go get github.com/[org]/[package]
[TypeScript/JS] [@[org]/[package]] npm install @[org]/[package]

Quality Checks

  • "What It Does" is written without jargon — a new engineer from another team can understand it in under 2 minutes
  • SLO targets are specific numbers agreed with stakeholders — not aspirational or copied from a template
  • All direct upstream consumers are listed in the "Who Depends on This" table — no omissions
  • API error codes are accurate and tested — not aspirational documentation
  • Known limitations are honest — nothing is glossed over to make the service look better than it is
  • All runbook links are live — not broken references or TODO placeholders
  • Data classification includes retention period and encryption status — not just sensitivity level
  • The entry has been reviewed by at least one consumer team to confirm it matches their experience of the service

Anti-Patterns

  • Do not write aspirational SLO targets — targets must be agreed with stakeholders and based on historical data, not copied from a template
  • Do not leave runbook links as TODO placeholders — broken or missing links make the catalog entry worse than useless during an incident
  • Do not omit the "Known Limitations" section to make the service look better — undisclosed limitations cause incorrect integrations and downstream incidents
  • Do not list API error codes without testing them — aspirational error documentation misleads consumers
  • Do not write the "What It Does" section with jargon — a new engineer from another team must understand it in under 2 minutes
1---
2name: service-catalog-entry
3description: "Write a service catalog entry for a microservice or internal platform service — covering service identity, purpose, architecture context, SLAs, API contract summary, data classification, dependencies, operational runbooks, and known limitations. Use when asked to document a service for an internal developer portal, write a service README for a platform catalog, create a service overview page, or onboard a new service to a service registry. Produces a complete service catalog entry suitable for an internal developer portal or wiki."
4---
5 
6# Service Catalog Entry Skill
7 
8Produce a complete service catalog entry for a microservice or internal platform service — giving any engineer at the company the context they need to understand what the service does, how to depend on it, what its reliability characteristics are, and where to go when something goes wrong. A well-written catalog entry eliminates "who owns this?" and "is this safe to use?" questions that slow down teams depending on shared services.
9 
10## Required Inputs
11 
12Ask for these if not already provided:
13- **Service name** — the canonical identifier used in code, monitoring, and deployments
14- **Team and owner** — team name, tech lead name, and on-call contact
15- **Architecture overview** — what the service does, what calls it, and what it calls
16- **SLA requirements** — availability target, latency SLO, support tier, and maintenance window
17- **Key APIs** — the most important endpoints other teams use (method, path, brief description)
18- **Data handled** — what data the service stores or processes, sensitivity classification, retention
19 
20## Output Format
21 
22---
23 
24# Service Catalog: [Service Name]
25 
26> **[One sentence — what this service does for consumers, in plain language]**
27>
28> *e.g. "The Payments Service processes charge, refund, and subscription billing events for all Acme products."*
29 
30---
31 
32## Identity
33 
34| Field | Value |
35|---|---|
36| **Service name** | `[service-name]` |
37| **Canonical repository** | [https://github.com/[org]/[repo]] |
38| **Owner team** | [Team name] |
39| **Tech lead** | [Name] ([Slack: @handle]) |
40| **On-call rotation** | [PagerDuty service link] |
41| **Slack channel** | `#[team-channel]` |
42| **Support tier** | [Tier 1 — 24/7 / Tier 2 — business hours / Tier 3 — best effort] |
43| **Status** | [Active / Deprecated / Sunset date: YYYY-MM-DD] |
44| **Language / runtime** | [e.g. Go 1.22 / Python 3.12 / Node 20] |
45| **Deployment platform** | [Kubernetes / ECS / Lambda / etc.] |
46| **Environments** | [Production: URL] | [Staging: URL] | [Dev: URL] |
47 
48---
49 
50## What It Does
51 
52[Two to three paragraphs in plain language — no jargon or acronyms without explanation.]
53 
54[Paragraph 1: The business problem this service solves. What would break or be missing if this service did not exist?]
55 
56[Paragraph 2: How it works at a high level — the main processing model (e.g. request/response API, event-driven consumer, batch processor), what triggers it, and what it produces.]
57 
58[Paragraph 3: What this service is NOT responsible for — the explicit boundaries. This prevents other teams from building incorrect assumptions about scope.]
59 
60---
61 
62## Architecture Context
63 
64### System Diagram
65 
66```
67[Upstream callers] [This Service] [Downstream dependencies]
68 
69 [Web App] ──────────→ ──→ [Primary Database — PostgreSQL]
70 [Mobile API] ────────→ [Service Name] ──→ [Cache — Redis]
71 [Partner API] ────────→ (Port 8080/gRPC) ──→ [Message Queue — Kafka/SQS]
72 ──→ [External Service / API]
73 ↓ emits events to
74 [Event Bus / SNS]
75 ↓ consumed by
76 [Downstream Service A]
77 [Downstream Service B]
78```
79 
80### Who Depends on This Service
81 
82| Caller | How they use it | Contact |
83|---|---|---|
84| [Service / Team A] | [e.g. "Calls POST /charges to initiate payments"] | [Slack: #team-a] |
85| [Service / Team B] | [e.g. "Subscribes to payment.completed events via Kafka topic"] | [Slack: #team-b] |
86| [Service / Team C] | [e.g. "Calls GET /subscriptions for billing status"] | [Slack: #team-c] |
87 
88### What This Service Depends On
89 
90| Dependency | Type | Criticality | Their on-call |
91|---|---|---|---|
92| [PostgreSQL instance] | Database | Critical — all writes fail without it | [DBA team: #db-oncall] |
93| [Redis cluster] | Cache | High — latency degrades without it | [Infra team: #infra-oncall] |
94| [Kafka cluster] | Message queue | High — async events queue | [Infra team: #infra-oncall] |
95| [Stripe API] | External API | Critical — payment processing fails | [vendor status: status.stripe.com] |
96| [Auth Service] | Internal service | Critical — all auth fails | [Auth team: #auth-oncall] |
97 
98---
99 
100## Service Level Agreement
101 
102### Availability and Latency
103 
104| SLO | Target | Measurement window | Error budget |
105|---|---|---|---|
106| Availability | [99.9%] | Rolling 30 days | [43 min/month] |
107| p50 latency (key endpoints) | < [50] ms | Rolling 24 hours | — |
108| p99 latency (key endpoints) | < [500] ms | Rolling 24 hours | — |
109| p99.9 latency (key endpoints) | < [2000] ms | Rolling 24 hours | — |
110| Error rate | < [0.1]% | Rolling 1 hour | — |
111 
112**SLO dashboard:** [Link to monitoring dashboard]
113**Current error budget remaining:** [Link to SLO dashboard or inline value]
114 
115### Support Tiers
116 
117| Tier | Scope | Response time | Resolution time |
118|---|---|---|---|
119| P1 — Service down | All authenticated requests failing | 15 minutes | 1 hour |
120| P2 — Significant degradation | Error rate >1% or p99 >2× SLO | 30 minutes | 4 hours |
121| P3 — Minor issues | Non-critical endpoints degraded | Next business day | 3 business days |
122| Feature requests / bugs | Via standard ticket process | [Ticket SLA] | Per roadmap |
123 
124**To raise an incident:** Page via [PagerDuty service link] or post in `#incidents`.
125**To raise a feature request or bug:** File a ticket in [JIRA project / GitHub repo Issues].
126 
127### Maintenance Windows
128 
129- **Planned downtime:** [e.g. "Sundays 02:00–04:00 UTC — advance notice posted to #[team-channel] 48h before"]
130- **Deployment window:** [e.g. "Weekdays 10:00–16:00 UTC — no deploys on Fridays or the day before a public holiday"]
131- **Breaking changes notice:** [e.g. "Minimum 30 days notice for breaking API changes — see versioning policy below"]
132 
133---
134 
135## API Contract
136 
137### Authentication
138 
139All API calls require: [e.g. "Bearer token via Authorization header. Tokens are issued by the Auth Service (`/api/v1/token`)"]
140 
141```
142Authorization: Bearer [jwt-token]
143Content-Type: application/json
144```
145 
146### Base URL
147 
148| Environment | Base URL |
149|---|---|
150| Production | `https://[service-name].internal.[company].com` |
151| Staging | `https://[service-name].staging.[company].com` |
152| Local development | `http://localhost:[port]` |
153 
154### Key Endpoints
155 
156| Method | Path | Description | Auth required | Rate limit |
157|---|---|---|---|---|
158| `GET` | `/health` | Liveness and readiness check | No | None |
159| `GET` | `/api/v1/[resource]` | [Description — e.g. "List resources for the authenticated user"] | Yes | [100 req/min] |
160| `GET` | `/api/v1/[resource]/:id` | [Description — e.g. "Get a single resource by ID"] | Yes | [500 req/min] |
161| `POST` | `/api/v1/[resource]` | [Description — e.g. "Create a new resource"] | Yes | [50 req/min] |
162| `PUT` | `/api/v1/[resource]/:id` | [Description — e.g. "Update an existing resource"] | Yes | [50 req/min] |
163| `DELETE` | `/api/v1/[resource]/:id` | [Description] | Yes | [20 req/min] |
164 
165**Full API documentation:** [OpenAPI/Swagger spec URL] | [Postman collection URL]
166 
167### Versioning Policy
168 
169- API version is in the URL path (`/api/v1/`, `/api/v2/`)
170- Minor additions (new optional fields, new endpoints) are non-breaking — no version bump
171- Breaking changes (removed fields, changed types, authentication changes) require a new major version
172- Deprecated versions are supported for [90 days] after the successor reaches GA
173- Deprecation notices are posted to `#[team-channel]` and emailed to registered consumers
174 
175### Error Response Format
176 
177```json
178{
179 "error": {
180 "code": "[ERROR_CODE]",
181 "message": "[Human-readable description]",
182 "request_id": "[UUID — include in support tickets]",
183 "details": {}
184 }
185}
186```
187 
188Common error codes:
189 
190| HTTP status | Error code | Meaning |
191|---|---|---|
192| 400 | `INVALID_REQUEST` | Request body or parameters fail validation |
193| 401 | `UNAUTHENTICATED` | Missing or invalid auth token |
194| 403 | `FORBIDDEN` | Token valid but lacks permission for this resource |
195| 404 | `NOT_FOUND` | Resource does not exist |
196| 409 | `CONFLICT` | Duplicate resource or state conflict |
197| 422 | `UNPROCESSABLE_ENTITY` | Request is valid but violates business rules |
198| 429 | `RATE_LIMITED` | Too many requests — back off and retry |
199| 500 | `INTERNAL_ERROR` | Unexpected server error — include request_id in support ticket |
200| 503 | `SERVICE_UNAVAILABLE` | Downstream dependency unavailable — retry with backoff |
201 
202### Events Published (if event-driven)
203 
204| Event | Topic / Queue | Schema | Published when |
205|---|---|---|---|
206| `[resource].created` | `[kafka-topic / sns-arn]` | [Schema URL] | [When a new resource is created] |
207| `[resource].updated` | `[kafka-topic / sns-arn]` | [Schema URL] | [When a resource is modified] |
208| `[resource].deleted` | `[kafka-topic / sns-arn]` | [Schema URL] | [When a resource is deleted] |
209 
210---
211 
212## Data Classification
213 
214| Data element | Sensitivity | Stored in | Retention | Encrypted at rest |
215|---|---|---|---|---|
216| [User PII — e.g. email, name] | [PII / Restricted] | [PostgreSQL `users` table] | [Until account deletion] | Yes |
217| [Financial data — e.g. card last 4] | [PCI / Highly restricted] | [PostgreSQL `payment_methods` table] | [7 years per regulations] | Yes — field-level encryption |
218| [Operational logs] | [Internal] | [CloudWatch / Datadog] | [90 days] | Yes (at rest, not searched) |
219| [Anonymised analytics] | [Public] | [Data warehouse] | [Indefinite] | Yes |
220 
221**Data residency:** [e.g. "All data stored in us-east-1. EU customer data stored in eu-west-1 per GDPR requirements."]
222**Compliance scope:** [e.g. SOC 2 Type II / PCI DSS Level 2 / HIPAA / GDPR]
223**Data access policy:** [e.g. "Production database access requires [approval process]. Access logged and reviewed quarterly."]
224 
225---
226 
227## Operational Runbooks
228 
229| Runbook | Location | Use when |
230|---|---|---|
231| On-call runbook | [Wiki / GitHub link] | Responding to PagerDuty alerts |
232| Deployment runbook | [Wiki / GitHub link] | Deploying a new version to production |
233| Database migration runbook | [Wiki / GitHub link] | Running schema migrations |
234| Rollback runbook | [Wiki / GitHub link] | Rolling back a bad deploy |
235| Incident response runbook | [Wiki / GitHub link] | Declaring and managing incidents |
236| Disaster recovery plan | [Wiki / GitHub link] | Zone/region failure or data loss |
237 
238**Monitoring dashboards:**
239 
240| Dashboard | Link | Use it for |
241|---|---|---|
242| Service overview | [Datadog / Grafana link] | Error rate, latency, throughput |
243| Infrastructure | [Link] | CPU, memory, pod health |
244| Database | [Link] | Query performance, connection pool |
245| SLO / error budget | [Link] | Budget burn rate, availability |
246| Dependency health | [Link] | Upstream dependency status |
247 
248---
249 
250## Known Limitations
251 
252Document limitations honestly — this section prevents other teams from building on incorrect assumptions.
253 
254| Limitation | Impact | Workaround | Planned fix |
255|---|---|---|---|
256| [e.g. No bulk write API — items must be created one at a time] | [Slow for large imports — N HTTP calls required] | [Use the batch import CLI tool for >100 items] | [Bulk API in Q3 — ticket: [URL]] |
257| [e.g. List endpoints have a maximum page size of 100] | [Cannot retrieve more than 100 items in a single call] | [Paginate using `cursor` parameter] | [No current plan to increase — by design] |
258| [e.g. Rate limits are per-token, not per-service] | [High-traffic consumers may hit limits for other consumers on the same token] | [Request dedicated service-account token] | [Per-service rate limits in roadmap] |
259| [e.g. Eventual consistency on read-after-write for list endpoints] | [Record may not appear in list immediately after creation (<500ms lag)] | [Use GET /:id to confirm creation; do not rely on list for immediate consistency] | [Read-your-writes consistency available via `?consistent=true` — in progress] |
260 
261---
262 
263## Getting Started
264 
265**To start using this service:**
266 
2671. Request access: [Link to access request form or instructions]
2682. Get your service account credentials: [Link to process]
2693. Read the API docs: [OpenAPI spec URL]
2704. Try the sandbox environment: `https://[service-name].sandbox.[company].com`
2715. Join the consumer Slack channel: `#[service-name]-consumers`
272 
273**Client libraries (if available):**
274 
275| Language | Package | Installation |
276|---|---|---|
277| [Python] | [`[package-name]`] | `pip install [package-name]` |
278| [Go] | [`github.com/[org]/[package]`] | `go get github.com/[org]/[package]` |
279| [TypeScript/JS] | [`@[org]/[package]`] | `npm install @[org]/[package]` |
280 
281---
282 
283## Quality Checks
284 
285- [ ] "What It Does" is written without jargon — a new engineer from another team can understand it in under 2 minutes
286- [ ] SLO targets are specific numbers agreed with stakeholders — not aspirational or copied from a template
287- [ ] All direct upstream consumers are listed in the "Who Depends on This" table — no omissions
288- [ ] API error codes are accurate and tested — not aspirational documentation
289- [ ] Known limitations are honest — nothing is glossed over to make the service look better than it is
290- [ ] All runbook links are live — not broken references or TODO placeholders
291- [ ] Data classification includes retention period and encryption status — not just sensitivity level
292- [ ] The entry has been reviewed by at least one consumer team to confirm it matches their experience of the service
293 
294## Anti-Patterns
295 
296- [ ] Do not write aspirational SLO targets — targets must be agreed with stakeholders and based on historical data, not copied from a template
297- [ ] Do not leave runbook links as TODO placeholders — broken or missing links make the catalog entry worse than useless during an incident
298- [ ] Do not omit the "Known Limitations" section to make the service look better — undisclosed limitations cause incorrect integrations and downstream incidents
299- [ ] Do not list API error codes without testing them — aspirational error documentation misleads consumers
300- [ ] Do not write the "What It Does" section with jargon — a new engineer from another team must understand it in under 2 minutes
301 

Discussion

Alternatives

Also in Storefront & listingsSee all 138 in Sales →