I always knew nailing down the difficulty of the puzzles would be the trickiest part of building Fill-In Crosswords. Turns out I was right.
As with any mobile game, it only works if players keep coming back to it. If the puzzles are too easy, it becomes mindless and there’s no reason to return. If they’re too hard, players get stuck, give up and don’t come back either. Finding that balance was the hardest thing so far.
On paper, the experience itself adds difficulty. In the magazine, it’s just a white page, a black grid and a list of words. With several word sizes, counting the letters in each word and the cells in the grid is part of the challenge.
That plain experience obviously isn’t good for an app. So when the player picks a word, the spaces of the same size get highlighted, and when they pick a space, the words of that size do. It looks great and it’s a must in the game experience, but it automatically removes some of the difficulty. So that needs to come from somewhere else.
The first hint came early, before the game could even make its own puzzles. I was shaping the screens with a few dummy puzzles Claude had put together directly, without the game engine or its validator, and I solved the first Hard one in 53 seconds. But those were just placeholders, never really graded for difficulty, so I didn’t think much of it.
The real sign came with the first set of puzzles the game generated itself. The first Hard ones were just longer Easy puzzles: the letters already placed on the grid unlocked the whole thing. The more I played, the more the whole game felt like the same level, every puzzle easily done with a Perfect just by filling it in word by word.
I could have put that down to me being a bit addicted to these puzzles. But I’d also told Daniel (my 10-year-old son) I was building the game, and he wanted to play. I told him his English wasn’t good enough yet, but he insisted. So I let him try, and he went through the dummy puzzles like it was nothing, some in a minute or two. Then he played the first generated build and still completed the Hard puzzles. With some errors of course, and it took him longer, but he did it.
So it wasn’t just me π this needed more work.
If he could do that without English being his first language, an average player with English as their first language would get Perfect on nearly every puzzle and never need help. That would be a problem for two reasons:
My first reaction to Hard puzzles that played like Easy ones was to push in the wrong direction: maybe Hard should need a few guesses, even if that meant leaving behind the “no clues, just logic” rule. If a Hard puzzle is just a longer Easy one, the game won’t work.
The problem, though, was the difference between what I thought a guess was and what the engine defined as one. Turns out its solver, which tries to think like a person, labelled anything beyond an obvious placement as “needs a guess” and threw the puzzle away.
But trying a word mentally, following it through and seeing it clash isn’t guessing, it’s logic. Sudoku draws the line in the same place. We were throwing away exactly the puzzles that would make players think.
Fixing it needed some new vocabulary. These terms came up a lot while working with Claude, and I had to ask for some of them to be explained more than once to make sure we were aligned on everything.
Me testing, my son testing, or even my wife testing was a start, but I needed more people, and proper metrics on all those terms above, for each puzzle and for how different people played it. And just handing someone the game and asking how it felt wasn’t going to tell me much. I wanted something a bit more reliable.
The game already tracks every solve in its database: how long it took, how many letters were revealed, how many errors were made, and whether it was Perfect. So the plan was simple:
Then I shared the build with a few friends who volunteered, and waited for the files to come in.
For this first round, each track had a minimum number of walls: Easy at least 1, Medium 2 and Hard 3, with no starting letters on Hard.
The first results were clear. Players were solving puzzles about four times faster than I had planned for. Almost every Easy solve was Perfect, and not a single letter was revealed. The Quills had nothing to buy, and I was sitting on a pile of them just from testing.
The CSV also showed two mistakes in the test itself.
The question after each puzzle was “too easy, about right or too hard?”. It measured mood more than difficulty. I caught myself picking “about right” based on the size of the puzzle, not on how much I had to think, and the data showed the same from other testers.
Puzzles in each chapter are ordered from easiest to hardest, and players need to solve them in order to unlock the next one. So testers who didn’t spend a lot of time on it only ever played the easiest puzzles of each track, and the harder ones were never seen.
There was one exception, and it ended up shaping what came next. A single Easy puzzle had testers properly stuck. Its words crossed on an O at nearly every crossing (GROUPS and TROOPS, ROOM and WOOD), so a wrong word didnβt clash for several moves. One tester gave up on it, and I fell into a trap myself. I almost finished the puzzle before the wrong word finally clashed and I had to start over.
By the numbers it was an Easy puzzle, with a single wall. But it showed what real difficulty could feel like. A tempting wrong word that takes the player a long way before it breaks. Thatβs when traps went from something we measured to something we aimed for.
So, three changes came out of this round:
Round 2 was better on paper. Hard puzzles took much longer, and “Did you have to think ahead?” got “Often” almost every time on Hard.
“NΓ£o estΓ‘ muito mais difΓcil π ” (It’s not that much harder)
But one piece of feedback after this round summed it up (thanks for the candid feedback Ivo π). This friend started with the longest words, eliminated as they went, and rarely had to go deep to rule anything out. I felt the same. Everything felt the same, just with more words.
The numbers agreed. Every wall in every puzzle had a depth of 1. Somewhere, there was always a word that clashed with a crossing the moment it was tried. Traps caught players who committed to a word too early, but not players who eliminated first. Would that be enough to support the game economy, and make the game exciting enough for players to keep coming back?
I didn’t think it was. So before another round, I needed a way to make things even harder. Just adding more walls wasn’t it. Round 2 already had more of them, and with every one at depth 1, more walls only made puzzles longer, not harder. The walls needed depth, so I spent some time exploring.
I first tried building grids designed for depth from the start, but it was impossible to fit more than about 12 words in them, far fewer than Hard needed. So I dropped that idea and went for something simpler. Three things changed ahead of round 3:
The new rules still let me finish most puzzles with a Perfect, but they definitely made me think ahead and make more suppositions. Every one of the 20 Hard puzzles I played took over 2 minutes, and some took me over 4.
I’m stubborn though and wanted my Perfects, so I only revealed one letter, partly to test the feature and partly because I was tired of looking. The hope is that the average player will spend some Quills to get a bit of help and be less stubborn π
The friend who called round 2 just longer felt the same, and worked his way through. Other testers couldn’t be bothered. They revealed letters, or took a bet on a word that seemed to work and had to come back and redo parts a few times.
Either way, round 3 did what it needed to. The puzzles made players think, and the ones who didn’t want to spend that long on it had to pay for help or back out of a wrong word.
With Hard finally in a good place, instead of pushing even further, I went back one step and shifted all the difficulty to the right:
Word counts and grid sizes stayed the same per track. Only how much thinking a puzzle needs moved up.
With the original rules, generating 100 Hard puzzles took just 15 seconds. With the new rules, it wasn’t that straightforward. Without 3-letter words to fill the gaps, a 12 Γ 12 grid rarely takes 18 words, and Claude kept giving up on making more puzzles.
Creating round 3 puzzles had already taken way longer than before, but it showed it was possible. So I pushed Claude to keep going, and a few tweaks made the difference:
To put it in perspective, it went through around a million failed grids, and took 89 minutes to produce just the 200 Hard puzzles for launch. I felt my laptop was ready to take off into space, given how hot it got and how much noise it was making π
I knew this was going to be the trickiest bit, but I didn’t think it would need this much back and forth. It was by far the most complex part of the game until now, but it’s the actual game engine, so I guess that’s understandable.
The game is now live in closed testing on Android, and on TestFlight on iOS. If you want to help me test the rest of the experience, reach out with your email address and I’ll add you.
Now it’s time to start playing around with animations and sounds, and polishing the game ahead of the official public release π