top of page

Puzzmo Remix - Design Postmortem

At the start of the year, Brooke had already written a super fun Cross|word for April 1st. The team got excited trying to think of fun twists on the other games - and even though everyone's ideas were great, we decided it was too much work for just one day. Later that week, I had an idea while scrolling the site.  I’d always felt the bonus games might be a missed opportunity for something playful - the effort of making new versions of Puzzmo's games might be worth it if these new versions replaced the bonus puzzles going forward.  I jotted down a few ideas for each game, pitched it to Zach, and the idea for Remixes was born.

I gave myself two rules - the first rule was that each Remix had to be limited to changes in puzzle generation, not the game itself.  I think I only bent this rule for ███art - there used to be a Flipart bug (that I had caused!) which had made some pieces invisible - so I asked Saman to add that as a feature.  This limitation was for a few reasons, but mainly I wanted a tight loop while iterating on Remix designs.  Since I make the puzzle generators, I could try out and tweak ideas as fast as I could implement them. I also knew the engineering team had a lot of work with some really exciting things coming up for Puzzmo.  And honestly - I think this kind of limitation breeds creativity.  It can be really difficult to sit down and try to generate fruitful design concepts when you allow yourself to make any change you can imagine. But by constraining myself to the existing implementation of each game, I had some structure and direction as I explored what the rules of each game allowed.

The other rule I gave myself was that Remixes needed to be deep - meaning the puzzles needed to support a wide range of skill levels, and allow for multiple approaches when solving.  A lot of ideas I loved led to puzzles that were just too shallow to want to play more than once or twice.  But with iteration, some of those ideas became the most playful Remixes.  Really Checkers Chess was originally “Really Deep Chess”, with three rows of pieces on each side instead of two.  But every Really Deep Chess puzzle played the same - a repetitive back and forth exchange that removed the pieces from the extra row until the game actually started.  So I tried a bunch of other shapes, but the Checkers version had the best puzzles and was the funniest idea.  Of the 16 Remixes we’re rolling out, 14 originated from the original ideas I pitched to Zach - but more than half took me a few iterations to make the best puzzles.

There were Remix ideas that seemed really good, but were really tough to generate.  My approach to puzzle generation usually involves making a solver that mimics the techniques a human would use to solve the puzzle, "playing" the puzzles a generator churns out.  The solver scores the puzzles not just on “difficulty”, but “interesting-ness”.  How many techniques does the puzzle need to solve? How tough is it to see those techniques in the puzzle?  How many unique approaches to the puzzle can the solver take? What’s the highest score with only easy techniques? The lowest score with every technique?  But some of the most fun Remix ideas took too long to generate puzzles, or all the puzzles they generated didn't meet our bar for “interesting” puzzles.

I could sometimes speed up generation by rethinking how I approached the problem - usually by exchanging time complexity for space complexity.  Basically, there are some problems take a lot of work to solve, but how you approach that work can make an enormous difference.  Imagine you wanted to figure out my phone number - you could try calling every number from 000-000-0000 to 999-999-9999 until I answered the phone, or you can put all the phone numbers in the phone book, alphabetize them, and look me up.  Creating the “phone book” the first time is more work, but it’s work you only have to do once.  This kind of pre-calculation is a big part of how I got some of my favorite Remixes to work - Trioshifts were slow to generate using the normal Typeshift generator, but the idea was too interesting to not try to figure it out, and it really paid off!  I was able to save that variant by combining that kind of pre-calculation approach with reducing iterative computation wherever possible and implementing and re-ordering incremental checks so the fastest and most likely to fail ran as early as possible.

It was much easier to fix Remixes where the puzzles didn't meet our rules for “interesting-ness” - just start bending the rules! What makes an interesting Spelltower maybe didn’t apply to Smiletower, so I could just tweak parameters and play the results until the puzzles were consistently fun.  Once I found something fun, I'd go back and review the changes (in case there was a good reason a certain rule was in place), but if the end result is fun, that’s usually a good sign.

Finally - my goal was to avoid making work for anyone else, but there is simply no way Remixes could have happened without a ton of help from the entire Puzzmo team.  Some Remixes required Saman to address edge cases we hadn’t anticipated, and Orta and Gary created a whole new system to schedule and run Remixes going forward. Molly and Kevin on the business side did a lot to spread the word, leading to the most traffic Puzzmo had seen to date.  And as always, Zach helped me filter out the best ideas from a sea of “pretty good” ideas.  But when all was said and done, the rollout of a completely brand-new site feature went smoothly thanks to all the hard work of everyone at Puzzmo!

179 views0 comments

Recent Posts

See All


Commenting has been turned off.
bottom of page