Writing a tutorial that works
This page is for advocates who write step-by-step tutorials. A tutorial fails the moment a reader's screen does not match yours. The method below, borrowed from how the help itself is written (every part "ends in something you can check", as the templates and design guide puts it), makes tutorials that work.
Contents
- The rules of a working tutorial
- Choose the starting point
- The template
- Writing steps
- Test it like a stranger
- Keep it alive
The rules of a working tutorial
- One goal, stated in the first sentence.
- A reproducible start: a fresh installation made in a documented way.
- Every step ends in a checkpoint: something the reader can see.
- Real commands and real button names, copied from the screen, not from memory.
- The version you used, and the date you checked it.
- What to do when it fails, for the two or three likely failures.
- Links to the help pages that go deeper.
Choose the starting point
The simplest reproducible start is a fresh installation on SQLite (Install in one command):
./console exp:install --dry-run
./console exp:install --applyFor tutorials about extensions, start from a Git installation so readers can contribute later (Develop with Git). For editor tutorials, say which role the reader needs (for example Editor or Administrator).
The template
# <Do something specific>
After this tutorial you can <goal>. It takes about <n> minutes.
Tested with Exponential <6.0.x>, PHP <8.x>, <engine>, <database>, admin4 design, on <date>.
## Before you start
- <prerequisite 1, with a link>
- <prerequisite 2>
## Step 1: <verb + object>
<What to do, in one or two sentences.>
<command or click path in bold>
You should now see: <checkpoint>.
## Step 2: ...
## If something goes wrong
| You see | Do |
|---|---|
| <message> | <fix, with a link> |
## Where to go next
- <help page>
- Questions: share.exponential.earth/forums, t.me/exponentialcmsWriting steps
- Start with a verb: "Open", "Press", "Run", "Type".
- Write click paths in bold, as on screen: Setup > Classes, Send for publishing.
- One action per step, or a short numbered list inside the step.
- Show expected output, shortened if long, with
...where you cut. - Explain why in one sentence where it helps; link the concept page for more.
- No secrets in examples: placeholders like
<your-password>, invented names,example.comaddresses. - Code blocks have a language (
bash,php) so the help and blogs highlight them.
| Instead of | Write |
|---|---|
| "Click the button." | "Press Send for publishing." |
| "Configure the settings." | "In settings/site.ini, set ..." (with the exact block and key) |
| "It should work now." | "The page now shows the new title." |
Test it like a stranger
- Make a fresh installation exactly as the tutorial says.
- Follow the tutorial word by word, copying commands from the text, not from your terminal history.
- Note every place you had to guess. Fix the text there.
- Ask one other person to follow it and watch silently. Their questions are your missing sentences.
Keep it alive
- After each release, re-run the tutorial or at least check the changelog for changed screens (changelogs).
- Update the version line when you re-test.
- If a step no longer works, put a visible note at the top until you fix it.
- If your tutorial would help every user, propose it for the help itself (Improving the help).
Related pages
- Writing a blog post
- Recording a screencast
- Publishing on Share and Projects
- Free documentation: this page is free to copy, translate and improve under the GNU FDL 1.3.
Become an Exponential Partner
Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.