See it as a diagram
Everything below, as a diagram you can edit. Describe yours and see it in seconds.
No account needed · Editable canvas, not a picture
Docs live with each service or they die
The unit of change in a microservices estate is the service repo, so the unit of documentation has to be the service repo too. A README that lives next to the code gets updated in the same pull request that changes the behavior, reviewed by the same people, and versioned with the release. A central wiki page about the same service has none of those properties: it depends on someone remembering to leave the repo and edit a page nobody reviews.
The per-service README earns its keep with four sections: what the service does, who owns it, how to run it locally, and what it depends on. Everything else, API reference, dashboards, runbooks, should be linked, not duplicated, because every duplicated fact is a future contradiction.
The catalog gives every service a machine-readable card
Prose READMEs are for humans; the estate also needs a record that tools can read. Backstage standardized the pattern with catalog-info.yaml: a small file in each repo declaring the component's name, type, lifecycle, owner, the system it belongs to, the APIs it provides and the components it depends on. The catalog ingests these files and answers the questions that otherwise require archaeology: who owns this, what depends on it, what does it depend on.
The fields that pay rent are owner and dependsOn. Owner turns every incident and deprecation into a directed message instead of a broadcast. DependsOn turns "can we retire this service" from a guess into a query.
# catalog-info.yaml, lives in the service repo, reviewed with the code
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: payments-service
description: Charges cards and records ledger entries
annotations:
github.com/project-slug: acme/payments-service
spec:
type: service
lifecycle: production
owner: team-payments
system: checkout
providesApis: [payments-api]
dependsOn: [component:default/ledger-service]The system view is assembled, never hand-drawn
The aggregate diagram, the one on the architecture page that shows the gateway, the services, the queues and the databases, should be a projection of the service list, not an independent artwork. When it is hand-drawn it competes with the catalog as a second source of truth and loses quietly: a new service ships, the catalog knows, the drawing does not.
The working loop: generate the first version from your service list, catalog export or a plain description with the microservices architecture diagram generator, then regenerate when the catalog changes. An agent connected to the Datadef MCP server, registry name io.datadef/mcp, can read the catalog-info files or the service list after a merge and update the diagram to match. Datadef does not watch your repos, so wire the call into the event that already fires when a service is added: the catalog registration PR. An API key, part of the paid plans, authorizes the agent.
What breaks when a service renames
A rename is the drill that reveals every unmanaged copy of your architecture. The catalog refs break loudly: any component still declaring dependsOn component:default/old-name points at nothing, and Backstage shows the dangling relation. The quiet breakage is everything outside the catalog: dashboards keyed on the old service label, alert routes, wiki links, and above all the hand-drawn diagram, which keeps the old box because no process exists to tell it otherwise.
The rename checklist that works is short because the architecture is federated: update catalog-info.yaml, let the catalog surface dangling refs from dependents, regenerate the system diagram from the updated list. What cannot be checklisted is hunting down every pasted screenshot of the old diagram, which is the argument for embedding a live view instead of pasting exports: a diagram embedded from a live URL follows the source within minutes of the edit, while every pasted copy keeps the old name forever.
Rename test
Boundaries and ownership
Two scope notes keep this honest. Datadef draws and keeps current the system view, the boxes-and-arrows level; it does not sync prose documentation or API references, which belong in the service repos and, if you run Backstage, in TechDocs, where embedding diagrams in Backstage TechDocs shows how the generated diagram and the prose meet on one page. The live embed also requires the Datadef project to be shared public; internal-only estates keep the project private and export instead.
And someone must own the assembled view. Federated docs fail at the seams: every service documented, nobody responsible for the whole. Give the system diagram an owning team, typically platform, and treat catalog changes as its update trigger. The patterns for that split are covered in documentation ownership models, and the wider code-to-docs loop in keep architecture docs in sync with code.
FAQ
How do I keep microservices documentation up to date?
What should a service catalog entry contain?
Who should own the aggregate system diagram?
What breaks in documentation when a service is renamed?
Does the system diagram update itself when we add a service?