Skip to content
Connect an agent

Other diagram kinds

Wardley maps

A Wardley map places the parts of a value chain by two things: how visible each part is to the user, and how evolved it is, from a new idea to a commodity anyone can buy. Links show which part needs which, and arrows show the moves you plan. Use it to decide what to build, what to buy, and what to outsource, to see where a part is about to become a commodity, and to explain a strategy to a team. It is for anyone who sets technical or business strategy, and for an agent that has been asked to map one.

TL;DR

QuestionAnswer
What is it for?A value chain whose parts you want to place by visibility and evolution: a product, a platform, a business.
How do I start one?Write wardley "Title", an anchor for the user or need, one component line for each part, and a link such as cup -> tea for each dependency.
How is a part placed?visibility= runs up, 1 at the top for what the user sees. evolution= runs across, 0 at genesis and 1 at commodity. Both run from 0 to 1. Write 0.8, not 80.
What else can it show?How each part is sourced (source=build, buy, outsource, or market), inertia, planned moves with evolve, pipelines, and notes.
What does Mermaid convert?wardley-beta, which is close to the OnlineWardleyMaps text, so a map from OnlineWardleyMaps converts too. See From Mermaid.
How big can it be?At most 150 parts, 300 links, and 40 notes. Warnings start at 40 components and 60 links.

Ask your agent

text
Use Plotwork to draw a Wardley map of our checkout. The customer is the anchor. Place the checkout page, payments, fraud checks, the order service, and the cloud it runs on by how visible and how evolved each is, and mark what we build and what we buy.
text
Use Plotwork to draw a Wardley map of our platform team. Show the deploy pipeline as built in house with inertia, and plan its move to a bought product. Add a note about why.

Example

The tea shop Simon Wardley uses to teach the method: the business and the public need a cup of tea, which needs tea, a cup, hot water, and staff. The kettle has inertia, and the plan is to move it to an electric kettle bought as a product.

Build or buy for a platform team

A platform team's map, with every source mark. The deploy pipeline is built in house and resists change, so the plan moves it to a bought product. Kubernetes has a pipeline: it runs in several forms at once, from a hand-run cluster to a managed one.

An observability stack

How on-call engineers see their systems, with short stage names, icons on the parts they look at, and two planned moves. The SLO reports are in violet, because the team builds them and wants them noticed.

The language

The header

Plotwork
wardley "Title" stages="Genesis, Custom built, Product, Commodity" desc="<text>"

The title and both options are optional. stages= renames the four stages of evolution, from genesis to commodity, in one quoted value with commas between the names. With no stages= the map uses Simon Wardley's own names: Genesis, Custom built, Product (+rental), and Commodity (+utility). desc= is the plain-language description that screen readers announce.

Statements

StatementMeaningExample
anchor <id> "<Label>" visibility= evolution=The user or need the chain serves, drawn as a bold name.anchor business "Business" visibility=0.95 evolution=0.63
component <id> "<Label>" visibility= evolution= source= inertia=on tone= icon=A part of the chain.component kettle "Kettle" visibility=0.43 evolution=0.35 inertia=on
<id> -> <id> : "<label>"A dependency. --> dashed, ..> a flow of value, <-> a flow both ways.cup -> kettle : "boils"
evolve <id> <evolution> "<New label>"A planned move.evolve kettle 0.62 "Electric kettle"
pipeline <id> from= to=A band under a component across a range of evolution.pipeline kettle from=0.35 to=0.62
note "<text>" visibility= evolution=A remark on the map.note "Power is a utility" visibility=0.3 evolution=0.72
desc "<text>"The description, the same as desc= on the header.desc "How tea is made."

Anchors and components

Every part has an id, which links use, and a label in quotes, which the picture shows. Leave the label out and the id is the label. Both values run from 0 to 1:

ValueRuns0 is1 is
visibility=up the mapthe bottom: parts the user never sees, such as powerthe top: what the user sees and asks for
evolution=across the mapthe left: genesis, something newthe right: commodity, a utility anyone can buy

A value outside 0 to 1 is an error, and the hint says what it most likely meant: visibility=80 is read as a percentage, so the hint says to write visibility=0.8. Anchors usually sit near the top, at a visibility of 0.9 or more.

A component can say how it is sourced, which the map draws with the standard marks, and whether it resists change:

OptionMeansDrawn as
source=buildBuilt in house.A dark disc behind the ring.
source=buyBought as a product.A light disc with an outline.
source=outsourceRun by someone else.A middle disc.
source=marketTaken from a market of many suppliers.Three small dots round the ring.
inertia=onResists moving towards commodity, from habit, contracts, or past investment.A thick bar on the right of the ring.
icon=A glyph for the part.A larger ring that holds the glyph.
tone=A part to point at.The ring in that tone's colour.

A legend under the map explains the marks the map uses, and only those.

Evolution stages

The plate is divided into four stages by dashed lines at 0.17, 0.4, and 0.7 along the evolution axis, the boundaries OnlineWardleyMaps and Mermaid draw. A part on a boundary belongs to the later stage, so a part at 0.4 is a product. The outline says which stage each part is in.

Dependencies and flows

A link goes from the part that needs to the part it needs, which usually sits lower on the map.

LinkMeansDrawn as
a -> ba needs b.A plain line.
a --> bA weaker or planned dependency.A dashed line.
a ..> bValue flows from a to b.A blue line with an arrowhead.
a <-> bValue flows both ways.A blue line with two arrowheads.

Add a label after a colon: cup -> kettle : "boils". It is drawn in a pill on the line, clear of the parts.

Planned moves, pipelines and notes

evolve kettle 0.62 "Electric kettle" plans a move: a red dashed arrow from the kettle to a ghost of it at evolution 0.62, labelled with the new name. Leave the name out to keep the part's own. A part moves once.

pipeline kettle from=0.35 to=0.62 draws a band under the kettle across that range, for a part that exists in several forms at once, such as hand-built and bought kettles.

note "Standard power lets kettles evolve faster" visibility=0.3 evolution=0.72 writes a remark with its top left at that place, moved inside the plate when it would cross an edge.

Limits and warnings

WhatWarning (W200)Refused (E140)
Componentsmore than 40more than 150 parts, anchors included
Linksmore than 60more than 300
Notesnonemore than 40

Lint also warns when:

WarningCodeFix
A component no anchor reaches through the links.W201Link it from the part that needs it, or take it off the map.
A dependency points up the chain: a part needs one more visible than itself.W200Swap the two ids, or move the needed part down.
Two parts sit on top of each other.W200Move them apart by at least 0.04, or merge them.
A label has no free place beside its part, so it is left out of the picture.W200Move the parts apart, shorten the label, or split the map. The label stays in the text description.
A label, a stage name, or a note was cut with an ellipsis.W203Shorten it.

From Mermaid

convert_mermaid reads Mermaid's wardley-beta maps, and wardley for when the type leaves beta. Mermaid's text is close to the OnlineWardleyMaps format, so a map written in OnlineWardleyMaps converts when you put a wardley-beta line above it. Both write a place as [visibility, evolution]; Plotwork names each value, so they cannot be swapped.

MermaidPlotworkCode
wardley-beta, wardley, and titlewardley "<title>"
component Web App [0.8, 0.6]component web_app "Web App" visibility=0.8 evolution=0.6
anchor X [v, e]anchor
(build), (buy), (outsource), (market), and market X [v, e]source=
(inertia)inertia=on
build X, buy X, outsource X linessource= on that part
A -> B, A --> B, and A -> B; textA -> B, with : "text"
A -.-> BA --> B
A +> B, A +< B, A +<> B, A +'text'> B..>, reversed for +<, <-> for +<>, labelled for +'text'>
evolve X 0.85evolve x 0.85
pipeline P { component M [e] }the members at the parent's visibility, and pipeline p from= to= over their range
note "t" [v, e]note "t" visibility= evolution=
evolution A -> B -> C -> Dstages="A, B, C, D"
annotation N,[v, e] "t"note "N. t" at its first placeM204
accelerator, deacceleratora note that says which way it pushesM204
ecosystem, submapcomponentM204
A value outside 0 to 1The nearest end.M204
label [dx, dy], size, annotations [x, y], and @ stage widthsDropped: Plotwork places labels and sizes the map itself.M202
styleDropped: the theme owns every colour.M200
url(<link>)Dropped: a diagram is a static picture.M201
A trend (X -.- (x, y)), or an evolution line that does not name four stagesDropped.M203
A link, move, or pipeline to a part that is not on the mapDropped.M203
A second part of one name, or a second moveDropped.M209
A pipeline that is never closedClosed at the end.M217
A map with no parts, or one past the limitsNothing is converted.M103, M102
A line that cannot be readNothing is converted, or the line is skipped when the conversion is lenient.M110, or M218

After converting, check the value chain in the outline from each anchor down, mark what you build, buy, or outsource with source=, and add a title.

See also

DocWhy
Writing diagramsThe flow, sequence and schema languages, and the rules every kind shares
Quadrant chartsItems on two axes with no links, for priorities
Migrating from MermaidConvert existing Mermaid diagrams, and what is dropped
Language referenceEvery kind, node type, option and diagnostic
Diagram kindsThe kinds Plotwork draws and the header of each