A 12-field god object, a Summary mixing counts with metadata, 5 types.go junk drawers, a 507-line command handler, and duplicated fields across sibling structs — how splitting and embedding produced focused, maintainable types. A struct with 12 fields is doing too many things. You cannot change one concern without risking another. Our security engine had a Runner with 12 fields. Three of them ( StaveVersion , InputHashes , identitiesByTime ) were per-evaluation state on a struct that was supposed to be reusable configuration. When two evaluations ran sequentially, the second evaluation's identitiesByTime was polluted by the first. The struct was too fat to reason about. Here are five fat structs we split, with the exact before/after code and the principle behind each decomposition. 1. The God Object — Runner with 12 Fields Before: Configuration and session state in one struct type Runner struct { // Configuration (long-lived) Controls [] policy . ControlDefinition Hasher ports .…