FIELD NOTE · July 7, 2026 · 5 min
Fuzzing cave locations
Designing privacy into a map when the honest answer is “I can’t show you that.”
The hardest decision in Karst wasn’t a technical one. It was a map with a pin on it. Publishing the exact mouth of a wild cave invites vandalism and injury, wrecks fragile bat habitat, and — since a lot of Indiana’s caves sit on private land — can burn a landowner relationship the local grotto spent years building. But a caving field guide that won’t tell you where anything is isn’t a field guide.
So the design question became: how do you build trust into a map that deliberately withholds its most precise data?
Refuse, or design around it?
The lazy answer is to hide sensitive caves entirely, or gate the whole map behind a login. Both punish the newcomer the app is supposed to welcome. Instead I treated location precision as a spectrum, not a switch.
- Show caves and publicly accessible entrances get exact coordinates — that info is already public and the whole point is to send people there.
- Sensitive and private-property caves are fuzzed to an approximate area — enough to orient you in the karst region, never enough to walk up to the entrance.
- Exact coordinates for gated caves unlock only through a grotto — the same trust network that governs access in real life.
The map mirrors how cavers already share information: freely about the tourist caves, carefully about everything else, and precisely only with people who’ve earned it.
Trails held the same line
Recorded trails were the sharp edge of the same problem. A shared trail is only its relative shape — steps and turns, never coordinates. It can guide anyone in or back out while the entrance itself stays gated. The navigation is genuinely useful and it leaks nothing.
Protect the caves, not just the user. Privacy wasn’t a compliance checkbox bolted on at the end — it was the constraint the whole product was designed around.
The lesson I keep: “no” is rarely the best design. The interesting work is finding the version of “yes” that respects the constraint instead of ignoring it.