BE AWESOME
Settings
Games
📅 March 15, 2026 · ⏱️ 4 min read

WordMix Started Its Life as a Boggle Clone

A weekend word-search prototype, and why it needed a customizable grid before it felt like its own game instead of someone else's.

This post is about WordMix Started Its Life as a Boggle Clone
Play WordMix →

My commit history has two entries in a row, both just called "boggle," because that's exactly what this started as: a fixed-size letter grid you drag across to spell words, same as the board game, no attempt to disguise it. I'm not precious about that. Word-search-on-a-grid is a format, not a piece of intellectual property, and building a straight clone first is usually the fastest way to find out whether a format is actually worth building your own version of before you sink real design time into it.

The grid was the easy part

Detecting a valid word on a drag path sounds like it should be the hard part of this project, and it really isn't — you're just checking that each tile in the path is adjacent to the last one and that the letters spell something in a dictionary list. The actually fiddly part is touch input. A mouse drag has a cursor position you can sample continuously; a finger on a phone screen jumps between tiles, and if your hit-testing is too strict, half of everyone's genuine word attempts register as nothing happening. I spent more time tuning how generous the tile hit-boxes are for touch than I spent on the actual word-validation logic, which is not what I expected going in.

Why a fixed board wasn't good enough

The straight Boggle clone used one board size and one time limit, because that's what the original board game does — you shake the physical dice cube, you get what you get. A browser game doesn't have that constraint, and keeping it anyway felt like inheriting a limitation for no reason other than tradition. So the grid size and round length both became adjustable. That single change is most of what separates this from being "the Boggle clone" in my head and started making it feel like its own thing: a small grid with a short timer plays completely differently from a large one with room to breathe, and neither of those variants existed in the source material I was borrowing the format from.

Scoring stayed simple on purpose — every word found adds to your total, full stop, no length multiplier, no bonus for rare letters. I tried a length-weighted score for about an afternoon and killed it, because it changed the optimal strategy from "scan the whole grid efficiently" to "hunt specifically for one long word and ignore the short ones," which is a worse, more frustrating way to play a timed word game. Flat scoring rewards exactly the behavior I actually want: keep moving, keep finding words, don't get stuck fixating on one part of the board.

The name change was overdue before it happened

Once the grid size became configurable, calling it Boggle stopped making sense — that's a specific product with a specific fixed board, and I'd already drifted away from it mechanically. WordMix is a more honest name for what's actually here: you mix a grid, you find words in it, the size and difficulty are yours to set. It's a small rename, but it's the kind of thing I'd rather do early, while the game has basically no players yet, than five months from now when a rename means breaking bookmarks and confusing anyone who already knows it by the old name.

I don't think there's a grand lesson in this one beyond: cloning a known format is a completely legitimate way to start, as long as you're actually willing to notice the moment your version has drifted far enough from the original that it deserves its own name. If I'd kept calling it Boggle purely out of inertia, every future write-up about it would've had to start with an asterisk explaining what it actually is now. Renaming it in week one instead of month six was the cheapest this decision was ever going to get.

The dictionary problem nobody warns you about

Validating that a dragged path spells a "real" word sounds like a solved problem — load a word list, check membership, done — until you actually pick a word list and start playing against it. Too small a dictionary and the game rejects perfectly common words, which feels broken to a player who has no way of knowing their word just wasn't in whatever list I happened to import. Too large a dictionary and it starts accepting obscure three-letter fragments and technical terms nobody would reasonably call a real find, which makes high scores feel cheap rather than earned. I ended up hand-trimming the word list more than I expected to, mostly removing entries that are technically valid but that no one finding them would feel good about.

Grid size and difficulty being adjustable also means the dictionary check has to run fast enough not to introduce any lag between finishing a drag and seeing whether it counted — there's no room for a visible pause while a lookup happens, or the whole interaction stops feeling responsive. That pushed me toward a lookup structure that's effectively instant regardless of word length, rather than anything that scans the list linearly. It's not a hard problem to solve, it's just one that's easy to not think about until you notice the drag-to-feedback gap yourself and it bothers you enough to fix.

Adjustable difficulty means someone can break it on you

Letting the grid size be configurable also means letting someone crank it to a size I didn't specifically test against. A tiny 3x3 grid with a short timer plays fine — there just aren't many possible words, so rounds resolve fast and that's expected. A large grid pushed toward its upper bound is the one I actually worried about, since a bigger board means more possible letter adjacencies to validate on every single drag, and if that validation isn't cheap, a large grid could start to feel laggy exactly when a player is trying to move fast to beat the clock. I deliberately stress-tested at the largest size the settings allow before shipping, dragging through dense clusters of letters as fast as I physically could, specifically because "it works at the default size" is not the same claim as "it works at every size I'm letting people choose."

Hello!