← Back to Blog

Dev Blog · June 17, 2026

Building Neon Dodge: Why Starting Simple Was the Right Call

Neon Dodge

Neon Dodge started as a two-hour experiment to see if I could get something playable in a single canvas element before lunch. I had no grand design doc, no feature list — just a rectangle falling from the top of the screen and a player block at the bottom. What surprised me was how hard it was to make that one mechanic feel right, and how much I learned from that constraint before I ever thought about adding more.

The First Version Was Unplayable

My initial implementation spawned blocks at a constant speed from a random x position every 800 milliseconds. It was immediately boring. The gaps between spawns felt like dead time, and because the speed never changed, there was no sense of escalating pressure. I'd dodge three blocks and then just sit there waiting. I tried cutting the interval in half — suddenly it was unplayably frantic within ten seconds. The core problem was that I was thinking in terms of spawn rate as a single dial, when what I actually needed was a system that scaled speed and density together over time. I rewrote the spawner to increase fall velocity gradually, capping at a maximum that felt challenging but not random. That one change transformed the session length from fifteen seconds of chaos to something you could actually sit with for a minute or more.

Deciding What Not to Add

Once the core loop worked, I had a list of "obvious" features: power-ups, different block sizes, a shield mechanic, combo multipliers. I prototyped the shield first. You could press Space to become invincible for two seconds on a ten-second cooldown. It felt good for about three plays, then players — me included — started just holding the strategy of burning the shield on every dense cluster. It removed all the interesting decision-making. I pulled it. Power-ups with randomized drop locations introduced a collision-versus-pickup dilemma that cluttered the screen. I pulled those too. What remained was purely spatial: move left, move right, don't get hit. Removing features felt like failure in the moment, but each cut made the moment-to-moment movement sharper. Less really was more.

What the Neon Aesthetic Actually Cost Me

The name suggests glowing neon visuals, and I did implement glow effects early on using canvas shadow blur. The problem is that canvas shadowBlur is expensive. On lower-end devices the frame rate dropped noticeably, and falling blocks with heavy blur looked smeared rather than glowing. I ended up faking the neon effect: bright, saturated fill colors with a thin lighter inner rectangle drawn on top to simulate a highlight edge. Visually it reads as "neon" without the GPU hit. I also learned that high-contrast colors on a near-black background do a lot of perceptual work that blur would have done for free — you don't actually need the glow if the colors are vivid enough. It was a useful lesson about visual shortcuts and when to fake an effect rather than implement it properly.

Browse All Games