A readable graph communicates its intent before it runs. Apply these practices to keep graphs clear as they grow.
Arrange nodes so data flows from left to right. Place source nodes (constants, inputs) on the left, transformation nodes in the middle, and output or action nodes on the right. System Modeler does not enforce a direction, but consistent left-to-right flow makes the run sequence obvious at a glance.
Organize the graph in columns, where each column is one stage of the work. Line up the nodes that feed the same downstream node vertically. A reader can then work through the graph right to left, one column at a time. For an example, see the Machine, Avoid, Gouge, Fixture sample graph in the Manufacture package. For the reading steps, see Read a graph.
Rename nodes to reflect what they do rather than what type they are. A node named Get Pocket Faces is easier to follow than GetBRepFaces_1. To rename a node, select it, open the Node tab in the Details panel, and click the title box at the top. Apply the same principle to subgraph port names.
When a section of a graph becomes dense, convert it to a subgraph. A well-named subgraph node acts as a label for that group of operations. The parent graph stays readable; the detail is one double-click away. With well-named subgraphs, the top-level graph reads like a short list of steps. For an example, see the Basic Milling & Drilling Workflow sample graph in the Manufacture package. See Create a subgraph.
Flow wires (dashed lines) enforce ordering but carry no data. When a graph uses both wire types, route flow wires along a separate path where possible. Keeping data flow and ordering constraints visually distinct makes each easier to trace independently.
When naming a node or a subgraph port, write the name from the perspective of someone reading the graph later, not someone who just built it. Ask: does this name describe what the node produces, or only what function it calls?
A node named Filtered Pocket Faces is more useful than ListFilter_3 because it describes the result, not the mechanism. An input port named Target Component is immediately clear; input0 isn't.
Apply this principle to subgraph names too. A subgraph called Color Pockets by Depth is self-explanatory in the parent graph. A subgraph called Subgraph_2 forces the reader to enter it to understand what it does.
Run the graph after adding each significant section, not only when it's complete. A type mismatch caught at two nodes is faster to fix than one discovered ten nodes downstream.
If a node shows a diagnostic badge, trace upstream node by node: the root cause is always the first node that produces unexpected output. See Debugging System Modeler graphs for how to use the diagnostics panel to navigate directly to the problem node.
A reusable subgraph can run as a standalone graph, independent of any parent that uses it. Guard inputs using Is Input Valid nodes and provide fallback constants so the graph produces meaningful output when no parent supplies values. See Design reusable subgraphs for patterns and examples.