Decomposition without losing the thread
Decomposition splits a large problem into smaller ones with clear interfaces. The classic mistake is creating subproblems that are not independent—solving A changes the rules for B—without tracking those dependencies. A workable method is a simple dependency sketch: nodes are subtasks; edges mean “requires partial result from.”
For logic-heavy tasks, decomposition often aligns with layers of abstraction: first establish ontology (what kinds of objects exist), then local constraints, then global consistency. Jumping to global search before ontology is stable tends to waste time.