diagramming-processes
riekelt/technical-writer
Diagram business processes, workflows, and system interactions as maintainable source code.
What is diagramming-processes?
Use this skill when a business process, workflow, lifecycle, or interaction between systems needs a diagram—flows that prose serializes badly, state machines, message sequences, or enterprise process maps. It encodes diagrams-as-source using a notation ladder (ArchiMate for business layer, PlantUML for system layer), ensures diagrams stay in version control and are treated as derived artifacts, and establishes maintenance rules to keep them accurate as code evolves.
- Match diagram notation to altitude: ArchiMate for cross-organizational processes, PlantUML for system-level flows and state machines
- Store diagram source as committed text in version control, never as pictures or exports
- Pick diagram kind (activity, state machine, sequence, concept) by the reader's question, one question per diagram
- Draw behavior using domain language (events, conditions, roles, systems) rather than implementation details (classes, methods, callbacks)
- Maintain diagrams alongside code changes using the same-change rule: prose, diagram source, index, and render update together
- Generate and commit renders via repository tooling, deleting stale renders when source changes
How to install diagramming-processes
npx skills add https://github.com/riekelt/technical-writer --skill diagramming-processes- The technical-writing skill (hard rules, truth rules, style)
- A diagram tool already established in the repository (PlantUML recommended as default) or agreement to adopt one
- A build step, script, or make target to render diagrams from source
How to use diagramming-processes
- 1.Identify the reader's question: what does the diagram need to show (process flow, state machine, sequence, concept)?
- 2.Choose the notation layer: ArchiMate for business/organizational scope, PlantUML for system/code scope
- 3.Write diagram source as text in the repository's chosen tool, stored in a diagrams directory alongside documents
- 4.Name the source file after the process it shows; add one diagram per source file
- 5.Verify every box, arrow, and guard against the actual behavior before committing
- 6.Render the diagram using the repository's tooling and commit the render (unless the host renders the source format)
- 7.Update diagram source in the same change as code or process changes; delete stale renders when source changes
- 8.For five or more diagrams, create an index document listing coverage, source files, renders, and status
Use cases
- Document a multi-department business process spanning organizations or systems using ArchiMate notation
- Show state transitions and decision branches in a workflow that prose cannot clearly serialize
- Illustrate message sequences and timing between microservices or system components
- Map legacy campaign processes and quirks to ground documentation in actual behavior
- Create a diagram index and coverage table for repositories with five or more process diagrams
- Technical writers documenting business processes and system interactions
- Software engineers documenting workflows and state machines in code repositories
- Enterprise architects creating TOGAF-style capability and process views
- Teams maintaining legacy systems where process behavior must be captured and tracked
diagramming-processes FAQ
Draw a diagram when the flow has branching, concurrency, state transitions, or interactions that prose serializes badly. A linear three- or four-step process is a numbered list; a diagram restating it is furniture and should not be drawn.
Match the notation to the altitude: use ArchiMate for business processes spanning departments or organizations; use PlantUML for system-level flows, state machines, and sequences. Never diagram code-level structure (classes, methods); that belongs in the code itself.
Commit the source text in version control. Commit the rendered output unless your hosting platform already renders your chosen source format. When source changes, delete the stale render in the same change and record the pending render in the index.
Split it into two diagrams. A diagram answering two questions answers neither well. Each diagram should answer one reader question clearly.
Update the diagram source in the same change as code or process changes. Treat diagram updates as part of done, just like documentation. Use the repository's render tooling to catch syntax errors before shipping. If a diagram becomes too large to maintain, split it along the seams that change independently.
Full instructions (SKILL.md)
Source of truth, from riekelt/technical-writer.
name: diagramming-processes description: Use when a business process, workflow, lifecycle, or interaction between systems needs a diagram - a flow that prose serializes badly, a state machine, a message sequence, an enterprise process map - or when drawing the process documentation of a legacy campaign. Encodes diagrams-as-source, the notation ladder from ArchiMate to PlantUML, the kind-per-question table, behavior-level participants, the diagram index, and the same-change maintenance rule. Use whenever a document needs a graph rather than more paragraphs, even if nobody says "PlantUML".
Diagramming processes
REQUIRED BACKGROUND: the technical-writing skill (hard rules, truth rules, style).
Overview
A diagram is a set of claims drawn instead of written; every box and arrow is bound by the same truth rules as a sentence. Core principle: diagram the behavior (processes, lifecycles, interactions), keep the source in version control, and treat every render as derived. The prose owns the reasoning; the diagram carries what prose serializes badly: branching, concurrency, and state.
When to invoke, and not
Invoke when a flow, lifecycle, or interaction needs showing: a business process spanning components or organizations, a state machine, a message exchange, the processes.md of a legacy campaign (documenting-legacy-codebases). Do NOT invoke to decorate: a linear flow of three or four steps is a numbered list, and a diagram restating one is furniture. Out of scope: charts generated from data (metrics, trends), and implementation structure, which the behavior rule below forbids.
The notation ladder
Name the altitude before drawing, and match the notation to it:
- Business layer: ArchiMate. Processes spanning departments, organizations, or multiple systems, capability maps, and the TOGAF-style views enterprise stakeholders expect. The audience reads roles, services, and processes, never components.
- System layer: PlantUML behavior diagrams. Flows, state machines, and sequences within and between systems: code documentation, one level above the code.
- Code layer: no diagrams. Class and package structure is the code's own to show; an IDE generates a fresher picture on demand than any committed one.
The ladder sets the notation and the vocabulary, never the tool: one toolchain can serve both rungs, because PlantUML carries the ArchiMate notation in its standard library. The tool a repository uses is settled once, under "Source, not pictures".
Source, not pictures
- The source is committed text, in the diagram tool the repository already uses. Where none is established, PlantUML is the default (rich standard library, ArchiMate included); where the choice is genuinely open, ask the owner, recommending PlantUML. The core skill's
references/truth.mdowns the ground rule: rendered output is derived, and stale renders are deleted rather than left to mislead. - One diagram per source file, named for the process it shows, grouped in one diagrams directory beside the documents.
- Rendering requires tooling the repository owns (a script, a make target, or a build step), set up by the owner, not by the diagram's author. Tell the owner when it is missing; never route around the gap by picking whatever notation the hosting platform happens to render inline.
- One repo command renders everything; renders are committed unless the host already renders the repository's chosen source format. When a source changes, its outdated render is deleted in the same change, and the missing render is recorded in the index until regenerated.
- A screenshot, an exported picture, or a whiteboard photo with no source is a finding against the document that contains it: nobody can diff it, so nobody will maintain it.
The kind answers the reader's question
Pick the kind from the question the reader brings, one question per diagram:
| The reader asks | Draw |
|---|---|
| How does this process run across the organization | ArchiMate business process view |
| What happens, in what order, with which decisions | Activity diagram |
| Which states can this thing be in, and what moves it | State machine |
| Who talks to whom, in what order, with what messages | Sequence diagram |
| What exists in this domain and how it relates | Concept diagram, at business-object level |
A diagram answering two questions answers neither; split it. A diagram that needs a legend of its own invented symbols is answering too many at once.
Behavior, never implementation
The refactor test from documenting-legacy-codebases governs diagrams too, and a diagram hides its drift better than a paragraph does:
- Participants are systems, roles, modules, and business objects. Classes, methods, and functions stay in the code (see the ladder).
- Edges carry the event or condition, in the domain's language: "payment confirmed", never a callback name. A guard may name a config key, because config keys are contract surface; it never names a method.
- Titles name the process, never a spec, phase, or plan: the no-delivery-narrative hard rule applies inside diagram source too, including comments.
- Error and exception paths are drawn where behavior differs, and drawn distinguishably; a happy-path-only diagram of a process with real failure branches is an overstated claim.
- Quirks are drawn, and are content. The state nothing can leave, the flow that skips a step for one input: the surprising branch is why the diagram earns its place (
documenting-legacy-codebases, quirks).
The diagram index
More than five diagrams get one index document beside them, a derived artifact rebuilt from the files (core truth rules):
- A coverage table: what each diagram shows, its source file, its render if committed, and its status.
- Per diagram, the module it describes, as the drift anchor: the one place a diagram points at code.
- The render command, so the index is also the build instruction.
- Pending renders, named per source, so a missing render is a tracked state rather than a silent gap.
Maintenance
A change that alters a flow updates the matching diagram source in the same change: a diagram is documentation, and documentation is part of done (core truth rules). Rendering is the diagram's compile step: source edits break syntax invisibly, and the break surfaces only when the render runs. The author renders before shipping the edit; where the repository's pipeline is still missing, a local one-off run of the tool satisfies this check. When a feature is removed, one change covers the prose, the diagram source, the index row, and the committed render. A diagram nobody can bring themselves to update is answering too big a question; split it along the seams that change independently.
Verification
Everything legible in a diagram is a claim (core truth rules), so a diagram is grounded and reviewed like prose:
- The author verifies every box, arrow, and guard against the code before drawing it. A flow inferred rather than confirmed is labeled as inference beside the diagram in the embedding document, never silently drawn as fact.
- The reviewer reads the diagram against the behavior, and reviews the source text rather than the picture: the source is what the next editor changes.
- Diagram sources drift like prose and join every legacy campaign: the campaign (
documenting-legacy-codebases) grounds the diagram sources with the documents that embed them. - A diagram and its surrounding prose share one home per fact: the prose says why the process exists and what to look out for, the diagram shows the flow, and neither restates the other step by step.
Related skills
More from riekelt/technical-writer and the wider catalog.

documenting-contracts
Document HTTP APIs, message contracts, and file formats with exhaustive wire-level detail at the right abstraction level.

documenting-legacy-codebases
Reconstruct documentation for legacy codebases by grounding it in code, not memory or stale docs.

recording-decisions
Record architectural decisions and choice rationale in durable ADR and decision-log formats.

reviewing-technical-prose
Systematic technical prose review with severity mapping, findings format, and delivery checklist.

technical-writing
House style and structural rules for technical documents: clear, sourced, single-source-of-truth prose.

writing-changelogs
Write clear, honest changelog entries and release notes following structured conventions.