I built Decrypt the Narrative for a university hackathon. The idea was pretty simple: take a hidden narrative, smash it into individual words, then make teams call an API to collect the pieces and figure out how to put it all back together. Except there was a catch: the API lies to you, and it does it quite a lot.
Roughly 55% of requests have something wrong with them, spread across twelve different failure modes. You might get a 200 OK with half the response missing, or a perfectly confident 200 OK containing an HTML error page while still claiming to be JSON. Sometimes it's a 418, sometimes a 504, sometimes just an empty {}. Words can arrive backwards, unicode junk can get attached to them, and the response can suddenly change shape and give you an array when you've spent the last hundred requests expecting an object. Sometimes nothing looks particularly wrong at all, except your request quota has quietly dropped by three.
What I like about the challenge is that reconstructing the sentence isn't really the difficult bit. The interesting part is figuring out how to build a client that keeps working when the system it's talking to can't be trusted. You quickly start thinking about validation, retries, backoff and whether a successful HTTP request actually means you received anything useful. Some of the failures are particularly nasty because the response looks completely valid, but the word itself is wrong.
The original version is still running at dcrypt.run if you want to have a go, and I’ve now open sourced the whole thing under the MIT licence at
github.com/webmull/dcrypt.run. So you can run your own version, change the narrative, tweak how much chaos it throws at people, or make it considerably more horrible than I did.