Skip to main content

Testing and Debugging User-Created Systems

Expressions, node graphs, macros and scripts let users build behaviour that the product's designers did not specify in advance. That freedom also gives users responsibility for finding mistakes. Help them inspect the system they have made without requiring them to become professional programmers.

Make Intermediate Results Inspectable​

Show the value entering and leaving a selected node, expression or processing step. Identify its type, unit, range and relevant time or object. A value of 1 is ambiguous if the user cannot tell whether it means one second, one frame or a normalised position.

Provide a route from an unexpected output to the inputs and dependencies that produced it. Highlight the relevant path without rearranging the whole graph. Explain whether a result is current, cached, invalid or still being computed.

Errors should name the failing item and explain the immediate cause. “Input expects an image; this connection supplies a number” gives the user a starting point. Keep the error attached to the affected item and make it reachable from the final output.

Allow Small, Reversible Tests​

Let users run a change on one object, a short frame range or a copy before applying it to the whole project. Preview the affected scope, including shared assets. A script that appears to act on the selection may also modify a referenced material used elsewhere.

Provide ways to bypass a step, isolate a branch, inspect a known input and compare before and after. Keep an explicit route back to the earlier state. State when external file writes or network actions cannot be undone in the project.

For AI-generated scripts, use the same safeguards. A plausible explanation is not evidence that the script is correct; the user still needs to inspect its scope, test its output and recover from failure.

Help Users Establish an Expected Result​

Offer small examples that include an input and an expected output. Where the task permits it, let users save a reference result or a simple assertion: an output should remain within a range, preserve object count or keep a named asset present.

Do not treat every difference as a fault. Creative procedures may deliberately produce variation. Make the chosen check visible and editable so that it tests the user's intention.

Practical check: give someone a graph with a wrong unit, a broken dependency and a stale cached result. Can they locate each cause without reading every node, test a correction on a small scope, and restore the earlier result? Use Testing with Users to distinguish independent diagnosis from success after assistance.

Footnotes​

  1. Ko, A. J., et al. (2011). The state of the art in end-user software engineering. ACM Computing Surveys, 43(3), Article 21. Published paper. ↩