The Problem We Were Actually Solving

The real pain wasnt disk size; it was cognitive load on level designers. Every hunt lived in a separate fork of the same monorepo, diffing 14 kB YAMLs was misery, and once the file exceeded 100 kB we started getting partial-checkout timeouts in CI because Git would spend 4 seconds compressing a blob larger than our entire Rust crate. We told ourselves YAML was human-readable, but by Hunt #62 even the most senior designer was copy-pasting reward GUIDs because grep wasnt fast enough to keep up with change velocity.

We dismissed JSON as an option because three years earlier a prototype using JSON had leaked a massive object graph that GC couldnt collect, causing the JVM heap to balloon to 2 GB during hunt spawning. We blamed Jackson, but the deeper truth was that we had optimized for flexibility and paid the price in GC pauses.

What We Tried First (And Why It Failed)

We started by splitting the YAML into chunks: one file per hunt, one file per loot table, one file per zone. That bought us two weeks before the first designer wrote a shell script to merge them at build time, and suddenly our Git history became a merge-hell of spawner rebalancings and last-minute event overrides.