Opinion

The spring runs out

Every brief I’ve been handed in fourteen years asks for engagement. The one thing I made for myself couldn’t have any, because its job is to help a child fall asleep. That single constraint decided everything underneath it.

The spring runs out

In short: I spent the past couple of months building a wind-up carousel music box for iPhone, a digital toy built on the way the real ones actually work. A child turns a brass key, lets go, and a lullaby plays on a music-box comb, slowing as the spring runs down. Then it stops, and nothing asks them to come back. Designing something whose success is a person leaving changed every decision after it, and it’s left me thinking about how little of the web is built that way.

The last note

The room is dark. Someone small puts one finger on the brass key and turns it, three turns, and it gets harder near the end the way a real one does. Then they let go. The riders begin to turn under the roof, and a lullaby starts on the comb.

Somewhere past the halfway mark the tune begins to sag. The notes come a little wider apart, then wider still, and the last one rings on by itself in a quiet room.

That ending is the product. Everything else is arrangement around it.

A wooden carousel music box standing in a dark warm room, with a duck, a horse, a rabbit and a bear on brass poles under a pointed roof.
The whole object. A brass key on the base winds it, a small lever stops it, and the knob on the roof resets it.

Every brief asks for the opposite

Time on page. Session length. Return visits. Retention. I’ve been handed those goals for fourteen years, and I’ve written a few of them into briefs myself.

Hele couldn’t have any of them. Success is a child stopping. If a two-year-old is still winding the key at nine at night, I’ve failed the parent who paid for it. The metric, if there were one, would be absence.

Taking engagement off the table sounds like a small edit. It quietly removes the reason behind most of the patterns I’d otherwise reach for without thinking about them.

Building the ending

The easy version was obvious: loop the tune, fade it out on a timer. A day’s work, maybe less.

I modeled the real mechanism instead. A music box is a mainspring driving a cylinder through a gear train, held back by a little fan that keeps it from sprinting. While there’s enough tension the fan caps the speed and the tempo holds dead steady, which is most of the wind. After that the spring can’t keep up and the whole thing slows in a curve. The notes stretch. The last one hangs.

Close-up of the brass winding key on the beech base, with the carousel turning behind it in motion blur.
The key. It clicks at every notch, gets firmer as the spring tightens, and stops dead when it’s full.

Three turns of the key is a full spring, and it gets heavier as it goes, so the child feels the resistance in their own hand and nobody has to explain it. Let go and it snaps back a little against the ratchet.

None of that was necessary. A loop and a fade would have been fine and nobody would have complained. But a fade is a decision the app makes on the child’s behalf, and a spring winding down is something they can hear coming. They know it’s ending before it ends. That’s the difference between being stopped and being finished, and it’s the only reason I did it the hard way.

There’s a second ending on the same idea. Sleep mode plays the box slowly and quietly, and when the timer runs out the screen fades to black and stays dark. No dialog asking whether you’re still there. It just goes. There’s also a setting that runs until you stop it, for parents who want it on the nightstand all night, and that choice is theirs to make.

The same carousel music box shown twice side by side, at full brightness labelled Playing and dimmed labelled Sleep mode.
Playing, and in Sleep mode. When the timer ends, the dim keeps going until the screen is black.

No buttons

The user can’t read. That one fact does more work than any research I could have run: every label is decoration, and so is every tooltip, every bit of onboarding copy, every empty state I’ve ever agonized over.

So the play screen has no interface on it. It has a toy. The key winds. A brass lever stops it. The knob on the roof resets it. They’re parts of an object rather than controls sitting on top of one, and the shape of a key says turn me more reliably than any word I could have put next to it.

Looping clip of the carved wooden riders turning on the carousel beneath a fixed roof.
The riders turn under a fixed roof. There is no interface on this screen, only the object.

There’s one concession, and it took me a while to get it right. If a finger rests on the key for a second or so without producing a click, a dashed brass arc appears showing which way to turn, and it disappears the moment they manage it. Help arrives only after the thing has quietly watched someone be stuck. I’d take that trade on most of what I build, though I hold it loosely.

The two seconds I gave back

The parents’ area sits behind a gate you open by holding a button down. It serves two people who want opposite things: keep a two-year-old out of settings and purchases, and don’t make a tired adult fight for it at seven in the evening.

I had the hold at three seconds. Three seconds is nothing on paper. Standing in a dark room holding a phone still, it’s a long time. I dropped it to two. The other way in, holding the knob on the roof, is still three, because that’s the one a child might find by accident.

And there’s a door beside it: can’t hold? Enter your year of birth instead. Holding a button steady is a motor task, and a gate that only opens for steady hands would have been a strange thing to do to the exact adult most likely to be exhausted.

One number I changed after standing there holding it myself, and one door for the person whose hands won’t cooperate. It’s the part of the app I’d defend longest.

The lullaby I couldn’t use

Sa Ugoy ng Duyan is the Filipino lullaby. Lucio San Pedro wrote the music in 1943, Levi Celerio the words in 1948, and it’s protected here until 2052, so the one song everybody expects isn’t in there. Meme na Bunso is out too, since Jess Santiago is very much alive and writing.

So I traced every melody back to its earliest printed source and kept only what I could stand behind. Ili-Ili Tulog Anay came through, and it’s the Filipino lullaby in the box today. Bahay Kubo and a few others cleared too and are waiting on a later pack. One Japanese lullaby I dropped for reasons that weren’t legal at all, because of the history attached to it.

Rights are a design constraint. They just arrive late and expensive if you only meet them at the end, which is also true of the font on your homepage and the photo in your hero.

I don’t know if any of it works

There are no accounts, no backend and no analytics. Partly that’s the Kids category, and partly I didn’t want them. Nothing leaves the device.

Which means everything above is a belief rather than a result. I can’t tell you whether one person noticed the tempo sag I spent a week on. The App Store tells me it sold, and on the evening of September 19 it was the number one paid download in Kids on the Philippine store and number two in Music, which I screenshotted the way anyone would. That’s the whole of what I get. I chose that and I’d choose it again, but it does mean I’m arguing from conviction and I’d rather say so.

On the how: I designed it and built it with AI assisting on the engineering and working as a sounding board, which pushed some of these ideas further than I’d have taken them alone. The decisions above are mine. The two seconds, the spring curve and the lullaby I let go of are all things someone had to sit with.

What I keep thinking about

Most of the web is built to prevent endings. Infinite scroll, autoplay next, the related grid under the article you just finished. I’ve built those and I’ll build them again when they’re right.

But the question I keep asking on client work now is whether there’s a version where the person finishes. Where the page ends, the task completes, and nothing reaches out to keep them. Sometimes there isn’t one. When there is, it tends to be the version people trust.

Hele is on the App Store, an Android version is on the way, and there’s more about how it’s made at hele.toys. If you’re weighing a version of this question on your own site, that’s a conversation I always enjoy.

Quick questions, quick answers

What is Hele?

A wind-up carousel music box for iPhone, made for children five and under at bedtime. The child turns a brass key, lets go, and a lullaby plays on a modeled eighteen-note comb, slowing as the spring runs down. Nine riders and six tunes come with it, it’s paid once with no subscription, and it collects nothing. “Hele” is the Filipino word for lulling a child to sleep.

Why build it without any analytics?

It’s in the Kids category, where the rules are strict for good reason, and I didn’t want the data anyway. Nothing leaves the device. The trade is real: I can’t verify any design claim I’ve made about it, so I’m honest that these are convictions rather than findings.

Do you have to be making a kids app for this to matter?

No. The useful part transfers: name the moment your product is meant to end, design that moment on purpose, and check whether any of your patterns exist only to prevent it. Most sites have an ending they’ve never designed.

Related reading

Keep reading

Start a project

Let's build something that lasts

Tell me about your project. I read every message myself.

Get in touch

Based in Manila, working with teams across time zones.