Elhadi.
← All posts
6 min readAI-written · in Suhaib Elhadi's voice

The unlaunched shelf: why 'built and waiting' is its own failure mode

This update was drafted on a schedule by the AI I build with, from real project notes — part of the vibecoding experiment this blog documents.

Let me say the uncomfortable thing out loud, because I've been circling it for two months and circling isn't the same as saying it.

Nine projects. One of them is on the App Store. One of them is live and actually serving. The other seven are finished, deployed, sitting at URLs that work right now — and effectively nobody has been told they exist.

That's not a backlog. A backlog is work you haven't done yet. This is work I have done, that runs, that I could hand you a link to in ten seconds, and that is nevertheless doing nothing at all. I've started calling it the unlaunched shelf. And I've come around to thinking it isn't a neutral waiting room. It's a failure mode with its own shape and its own bill.

Here's what makes it so sneaky: it doesn't feel like failing.

Failing feels like a thing that broke, or a thing nobody wanted. The shelf feels like almost. Every project on it is one small honest-sounding thing away from being ready. This one needs the onboarding tightened. That one needs a real landing page. That one, I want to sit with the pricing a bit longer. None of those are lies. Each one, taken alone, is a reasonable sentence a reasonable builder would say. Stack seven of them next to each other and the pattern stops being reasonable and starts being a tell.

Because the finishing work is infinite by construction. There is no version of a product where you run out of things you could tighten. So "almost ready" is a state you can stay in for as long as you're willing to keep saying it, and nothing external ever arrives to knock you out of it. That's the trap. Building has a natural end — it runs, or it doesn't. Polishing doesn't. You have to choose to stop, and choosing to stop is exactly the thing I've been avoiding.

The shelf isn't free

The part I got wrong for a while was thinking of unlaunched things as inert. Parked. Costing nothing until I get to them.

They rot. Quietly, on a timer, with nobody watching.

CommunityHQ taught me that one properly. Its database sat on a free tier that pauses itself after about a week of no traffic. No traffic is precisely what an unlaunched project has. So one day I opened it and every single auth call was failing — not because I'd broken anything, but because nothing had happened for long enough that the infrastructure underneath assumed the project was abandoned. Which, in the only sense a hosting provider can measure, it was.

ClipForge got a different flavor of the same lesson. Its database provider migrated the pooler hostname, the stored connection string went stale, and every query hung. That one would've surfaced in about four minutes if real users had been on it. Instead it sat there broken for however long it sat there, because a thing nobody uses can't tell you it's down.

So the shelf charges rent. Every project on it needs periodic proof-of-life or it degrades into something that says it's finished and isn't. And the maintenance bill for seven of those is real — I've written before about attention being the resource that actually binds, and this is the pettiest possible version of that: attention spent keeping unlaunched things technically alive is attention that bought me nothing.

What you're actually not-doing

The bigger cost isn't rot. It's that a shelved project never tells you anything.

Everything I know about how these products meet reality, I learned from the two that met it. Putting tab. through App Store review taught me more in one rejection than six months of polishing it in private ever did — and the thing it taught me was not a thing I could have guessed. That's the whole point. If I could've predicted the feedback, the feedback would be worthless.

Seven products on the shelf is seven sources of information I've chosen not to open. And here's the ugly logical consequence: I've been polishing them against my own imagination. Every one of those "it needs a bit more" judgments is me guessing at what a user would want, with no user in the loop, and getting more confident with each pass because confidence is what repetition produces regardless of whether you're right. I've been sanding a shape I've never let anyone hold.

I said in what carries over between nine projects that distribution doesn't transfer, that every product is a cold start into its own market. True, and I meant it as an explanation. I think I was also using it as an excuse. Nine cold starts is a hard problem. Zero starts is not a solution to it.

The honest diagnosis

So why haven't I launched them?

The clean answer is time, and the clean answer is wrong. I found time to build Cadence Studios from nothing while seven finished products sat there. That's not a schedule problem. You don't accidentally do the harder thing.

The real answer is that building can't reject you. The code either works or it doesn't, and when it doesn't, that's information, not a verdict. Launching is different. Launching is the first moment a thing I made can be ignored, and being ignored is worse than being criticized because there's nothing in it to learn from. So I stay in the part of the process that only ever gives me clean feedback, and I call the staying "not quite ready yet."

I don't think I'm unusual in this. I think building got cheap enough that a lot of us discovered we could hide in it. When making the thing took a year, nobody had an unlaunched shelf — the cost of building enforced a discipline that we've now removed without replacing. I've said before that "done" got harder once making got easy. This is the same discovery arriving with a body count.

What changes

I'm not going to announce a plan with dates on it, because a plan with dates is another thing I could polish instead of launching.

What I've changed is the accounting. A built project no longer counts as a project. In my own head the roster is now two, not nine — two things that exist in the world and seven things that exist on my laptop and a URL. That reads as harsh and it's meant to. The nine-count was letting me feel productive about work that hasn't yet been permitted to matter.

And the rule going forward is that nothing new starts until something old ships. Not because starting is bad — starting is the thing I'm good at — but because I've now got direct evidence that my instinct, left unsupervised, picks the new thing every time. The instinct isn't going to change. So the rule has to sit outside it.

Ask me in a month whether the shelf got shorter. That's the only version of this post that would actually prove anything, and I don't get to write it yet.

This one's auto-drafted from my notes on a schedule. If a number isn't in the notes, it doesn't show up here — I'd rather leave a blank than make something up.