Three buttons can carry a whole game
The earliest useful version already had the heart of the final controls. Thrust fought gravity. Left and right shaped the route. Releasing a button mattered as much as pressing one. I kept coming back to that small set because every extra action made the joke harder to read and the flying harder to learn.
Simple controls create a demanding design problem. The player cannot blame a crowded layout when something feels wrong. Every wobble, collision and rough landing points back to the timing, the feedback or the level. That honesty became one of the most valuable parts of the project.
A new device should not create a new game
Keyboard and touch needed to teach the same rhythm. The labels are direct, the actions match, and both allow thrust and steering together. The goal was for someone to understand the helicopter once and carry that understanding to another screen.
Touch exposed problems that desktop testing hides. Fingers leave buttons. Phones rotate. Browsers interrupt the page. A held action can become stuck if one release event goes missing. These cases feel technical during development, but the player experiences them as trust. The helicopter must stop listening when their hand has stopped asking.

The tutorial had to watch, not lecture
The first tutorial explained too much and knew too little. A player could read the words, make one accidental movement and continue without learning the timing. The better version watches for meaningful actions. It waits for a real rise, a turn, a gentle landing, a pickup and a completed delivery.
One surprisingly important decision was refusing to count the starting platform as a landing lesson. The game should never praise an action that did not happen. That small rule made the tutorial feel more attentive and reminded me that good onboarding is a conversation between the design and the player's behaviour.
The phone changed the design conversation
A desktop build can make a mobile problem look like a scaling problem. Caveman Taxi needed a wider rethink. Landscape gives both thumbs a home and leaves the route visible between them. Portrait still works for menus and results because those moments ask for reading and choosing instead of flying.
Rotation became a game-state decision too. When a phone turns during a flight, the world pauses and waits for a deliberate return. That behaviour took more work than a simple rotate message, but it respects the moment when the player is moving their hands and finding a new grip.
Players taught us where the design was quiet
Playtesting repeatedly found moments where the game knew something the player could not see. A landing counted as gentle, but the feedback passed too quickly. A destination existed, but its guidance competed with the controls. An enemy was present in the level data, but too far from the working route to matter.
Those findings changed the way I judge a feature. Existing in code is only the first step. The player has to notice it at the right moment, understand why it matters and have room to respond. Difficulty can then come from the route and the world while the core helicopter remains dependable.

Where SaratogaKit earned its place
Caveman Taxi became one of the projects that shaped SaratogaKit, my private system for directing and checking game development. It keeps the design intent close to the engineering work, records the lessons from playtests, and makes the release build prove that the important journeys still work.
AI agents helped inspect behaviour, propose fixes, build test cases and revisit edge conditions across devices. I still made the calls about feel, humour, pacing and what belonged in the game. SaratogaKit gave those calls a memory. When one fix touched controls, saves, orientation and nine distribution builds, the system helped carry the full consequence instead of treating the change as one isolated line of code.
Simple controls demand careful observation. The best improvements came from watching what players actually did, then using SaratogaKit to preserve those lessons all the way into the release build.