The flow label is the only documentation most people will ever read, because the Setup list shows labels and hides descriptions. Put the object, the trigger type, and the purpose in the label, in that order, so the list sorts into something navigable. Then use the description field on the flow, on every version, and on every Decision and Assignment, because those are the only notes that travel with the metadata into the next org.
The list view nobody can read
Open Setup, Flows, in an org that has been running for five years. You get a page of labels like “Opportunity Update”, “New Case Flow”, “Copy of Account Process v2”, and “Test”. Filters by type, status and object help a little. They do not help you answer the question you actually have, which is “which of these fires when a Case closes”.
A naming convention that survives
Object first, then when it runs, then what it does:
Case_AfterSave_NotifyAccountTeam
Case_BeforeSave_SetPriorityFromSeverity
Opportunity_Scheduled_FlagStaleDeals
SUB_Account_GetPrimaryContact
SCR_Case_CloseWizard
Sorting alphabetically now groups every flow on an object together, and the second segment tells you the type without opening anything. Prefix screen flows and subflows instead, since they have no triggering object to lead with.
The specifics matter less than the consistency. Pick a scheme, write it down somewhere the team reads, and apply it to new flows. Do not spend a sprint renaming the existing ones: changing a flow’s API name breaks Subflow references, Apex that instantiates it by name, and any URL pointing at it. Rename the label freely, leave the API name alone unless you have checked what references it.
The description field is not optional
The flow’s description is the one place to answer questions the canvas cannot. Four lines is enough:
- Why it exists. The business rule, not the mechanics. “Support requires an owner on every escalated case within an hour.”
- What fires it. Restate the entry criteria in English, because the Start element’s condition builder is not readable at a glance.
- What it assumes. The custom setting it reads, the queue it expects to exist, the permission set the running user needs.
- Who owns it and why it was built. A ticket reference costs nothing and answers most future questions.
Name the outcomes and the resources
A Decision with outcomes called Outcome_1 and Default Outcome is a Decision that has to be opened to be understood. Rename them to the branch they represent, including the default: “Not a renewal” is a real answer and “Default Outcome” is not.
For resources, a type prefix earns its keep because the Manager panel is a flat list. varAccountId, colContactsToUpdate, fmlIsHighValue, txtErrorMessage. Add a direction suffix on anything a subflow exposes, varAccountIdIn and varResultOut, so a reader knows which way the value moves without opening the properties.
Versioning notes
Each flow version carries its own description, and the version list on the flow’s detail page shows it. That list is the closest thing Flow has to a changelog, and it is empty in almost every org.
Use it as one line per version: what changed and why. “Added fault path on the Update element after INC-4471.” When you are looking at a flow that started misbehaving last Tuesday, a dated list of what changed in each version is worth more than any wiki page.
Set Trigger Order on record-triggered flows even when there is only one flow on the object today. It is a runtime setting and it is also documentation: it declares that you thought about ordering, and it gives the next person a place to insert something without rewriting yours.
What not to bother with
A separate documentation site describing your flows will be out of date within two releases. Nobody updates it, because updating it is a separate task from the change, and separate tasks do not happen. Everything in this article is inside the flow metadata, which means it moves with the deployment and shows up in the diff. That is the whole argument for putting it there.
Frequently asked
Can I rename a flow’s API name safely? Only after checking references. Subflow elements, Apex using Flow.Interview, custom buttons, and Lightning page components all bind by API name and none of them update themselves.
Are descriptions included in deployments? Yes. Flow metadata carries the flow description, the version description, and every element description, so they arrive in the target org with the flow.
How long can a description be? Long enough for several sentences, short enough that you should not paste a specification in. Write for someone scanning it at speed.
