Go To Statement Considered Harmful
Source: https://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF ↗
One page that changed how software is written.
Dijkstra argued that unstructured jumps make programs impossible to reason about — and that the quality of a programmer's thinking is bounded by the control structures available.
The paper launched structured programming and established the principle that intellectual manageability is the primary constraint on software quality.
For product people: the earliest and most elegant example of the principle that constraints enable rather than limit creative work.
Every time a team adopts a convention that restricts freedom in order to gain clarity, they are applying Dijkstra's insight.
Central argument
Dijkstra argues that the GOTO statement should be abolished from higher-level programming languages because unstructured jumps sever the correspondence between a program's static text and its dynamic execution, making it impossible to reason about program correctness. The deeper claim is not merely aesthetic: he proposes that a programmer's ability to verify and understand their own code is strictly bounded by the control structures they use, and that structured alternatives — sequences, conditionals, loops — preserve a mental model of progress that GOTO destroys. Intellectual manageability, not raw expressive power, is the binding constraint on software quality.
Critique
The paper's argument implicitly assumes that readability and static reasonability are the paramount virtues of code, which was a defensible position in 1968 but glosses over contexts where performance constraints or hardware realities made unstructured control flow not just convenient but necessary — an issue that haunted systems programming for decades. More fundamentally, Dijkstra's framing treats the programmer's cognitive model as the fixed bottleneck, leaving little room for the possibility that tooling, formal verification, or runtime introspection could compensate for structural looseness. The argument is elegant precisely because it is absolute, but that absolutism is also its vulnerability.
Why it matters for product
The paper's core insight — that the structures you permit determine the quality of thinking your team can do — applies directly to how a CPO designs process and tooling constraints: a team given unlimited flexibility in how they define, track, and ship work will produce output that is locally coherent but globally unverifiable, exactly analogous to a GOTO-laden program. Dijkstra's framing also offers a precise language for evaluating when a proposed process simplification is genuinely liberating versus when it removes a constraint that was doing load-bearing cognitive work, such as eliminating definition-of-done criteria or collapsing discovery and delivery into a single undifferentiated stream.