Quick answer: A wave spawner controls enemy waves as data—what spawns, when, where, and how much—so designers can author and tune encounters without code. Build it data-driven and event-aware so waves can escalate, vary, and respond to the game state.
Wave spawners—systems that send waves of enemies at the player—are core to many genres, from tower defense to arena shooters, and a good one represents waves as data so designers can author and tune them freely. Built data-driven and aware of game events, a wave spawner enables the escalating, varied encounters that drive these games.
Waves as tunable data
A wave spawner controls what enemies spawn, when, where, and in what quantities, and representing this as data—waves defined by designers rather than hardcoded—is what makes encounters authorable and tunable. A wave definition might specify the enemy types and counts, the timing and spacing of spawns, the spawn locations, and the conditions for the wave, all as data the spawner reads and executes. This data-driven approach means designers can author and balance waves—adjusting compositions, timing, and difficulty—without touching code, which matters enormously because wave design is an iterative tuning process: getting the escalation, variety, and pacing right takes many adjustments. With waves as tunable data, designers can craft and refine encounters freely, while the spawner handles the execution generically, reading the wave data and spawning accordingly. This separation is what makes a wave spawner support the rich, well-tuned encounters these games need, rather than a rigid hardcoded sequence that's painful to adjust.
Escalation, variety, and event-awareness are what make wave-based encounters engaging. The data-driven foundation enables the qualities that make waves engaging. Escalation: waves should build in difficulty, with later waves more challenging—more enemies, tougher types, faster spawns—so the encounter mounts toward a climax, and data-defined waves make tuning this escalation curve straightforward. Variety: waves should vary their composition and approach—different enemy types, different patterns, different challenges—to keep encounters fresh and force players to adapt, which data-driven waves enable by letting designers compose varied wave definitions. Event-awareness: a good wave spawner often needs to respond to game events—starting the next wave when the current one is cleared, triggering waves based on player actions or state, adapting to the situation—so building the spawner to be aware of and responsive to game events (like the previous wave being defeated) lets waves flow naturally and respond to the game, rather than firing on a rigid timer regardless of what's happening. Combining the data-driven foundation (tunable, authorable waves) with escalation (building difficulty), variety (fresh, adaptive challenges), and event-awareness (waves that respond to the game state) gives you a wave spawner that supports the engaging, escalating, varied encounters these genres depend on, all authorable and tunable by designers as data. This is what turns wave-based gameplay from a monotonous stream of identical enemies into the mounting, varied, responsive encounters that make tower defense, arena shooters, and similar games engaging.
Trust behaviour over opinions
People are unreliable narrators of their own experience — they're polite, they rationalise, they suggest fixes that miss the real problem. What they do tells the truth that what they say obscures: where they hesitate, where they get stuck, what they ignore, where they quit. The most valuable feedback is usually the behaviour you observe, not the opinion you're offered.
This is why watching beats asking, and why real data about what players actually do beats any amount of speculation. When several people stumble at the same spot, that's a problem worth fixing, regardless of whether any of them mentioned it.
Ship it, then learn from it
No amount of internal deliberation substitutes for the information you get the moment real players touch your game. The assumptions that felt certain turn out wrong, the feature you doubted becomes the favourite, and the problem you never imagined is the one everyone hits. That feedback only exists on the other side of shipping.
So bias toward getting something real in front of real people sooner rather than later. A rough thing that's out in the world teaches you more in a week than another month of private refinement, and every release makes the next decision better informed.
Cut the feature, keep the focus
The instinct to add is far stronger than the instinct to remove, which is exactly why most games drift toward bloat rather than clarity. Every system you add has to be built, balanced, debugged, and maintained, and it competes for the player's attention with everything else. A focused game that does a few things excellently almost always beats a sprawling one that does many things adequately.
When you're tempted by one more feature, ask what it costs and what it competes with, not just what it adds. The discipline to keep a game focused is what lets the parts that matter shine, and it's usually the difference between a memorable game and a forgettable one.
The player doesn't see what you see
You know where to click, which path works, and what every system is supposed to do, because you built it — and that knowledge makes you the worst possible judge of how your game reads to someone encountering it fresh. The confusion you can't feel is exactly the confusion that costs you players.
This is why fresh eyes are so valuable and so uncomfortable: they reveal the gap between the game in your head and the game on the screen. Put your work in front of people who've never seen it, watch where they stumble, and treat that stumble as information rather than as their mistake.
Default to the boring, robust choice
It's tempting to reach for the clever, novel, or technically impressive solution, but in production the boring choice — the well-understood approach, the proven pattern, the simple implementation — is usually the one that ships and keeps working. Cleverness has a way of becoming the bug you're debugging at 2am six months later.
Save your novelty budget for the things that actually make your game distinctive, and be conservative everywhere else. A game built on robust, unremarkable foundations is one you can keep building on, while one built on clever fragility is one that fights you the whole way.
A wave spawner controls enemy waves as tunable data, so designers author encounters without code. Build it data-driven and event-aware to enable escalating, varied, responsive waves.