Working solo on poketto.me — without the built-in “pressure to deliver” that comes with a corporate environment — comes with an interesting challenge: actually shipping stuff.

Here’s an example. When I started building the “Share…” feature, I had something super simple in mind: users should be able to create shareable links to their content, which others could view on poketto.me without logging in. I figured this would create a self-reinforcing loop: existing users share content → new people enjoy the clean, distraction-free reading experience → they sign up → save their own content → share it → and the cycle continues.

The feature itself wasn’t that hard to build. A few security considerations for non-authenticated users, some workflow smoothing (e.g., letting users stop sharing or regenerate links), and that was it. Once I had that in place, I could have shipped it almost immediately.

But then I thought: wouldn’t it be even more compelling if users could share directly to Bluesky / Facebook / LinkedIn / X? So I built that too.

Which led me down the rabbit hole of: How do I get these platforms to generate nice previews of the shared content?

Meanwhile, I also hacked together a working prototype of the “Highlights” feature — letting users color-code text in their saved content. And of course I thought: wouldn’t it be even better if you could share your highlights too? And what about comments, annotations, even discussion threads? Before I knew it, I was staring at a myriad of possible add-ons.

The problem? I hadn’t even shipped the basic “Share…” feature by that point.

Here, I wrote about maximizing vs. satisficing. That’s one helpful model for thinking about getting things done — but not the only one. In this case, I’d drifted into maximizing without realizing it, which led to delayed shipment, delayed feedback, and potentially wasted effort on “something nobody might even need.”

What should I have done?

Before writing a single line of code, I should have sketched a mini roadmap with acceptance criteria for the smallest valuable increments. Ship the MVP first. Then iterate.

Attached is a scribble of how that could have looked — and how I plan to do it in the future.

(And yes: if you rotate that scribble by 90 degrees, it does kinda look like a User Story Map 🚀)