Part 2 of the Heist Build Log. In part one I explained why I built this at all: I was the bottleneck in my own content. This is the part where my first attempt to fix it failed — and what I did about it.
Version one was good enough to fool me
The first version of Heist demoed beautifully. Type a topic, get posts. Friends said "wow." I said "wow." For about a week I thought I was nearly done.
Then I tried to actually live in it. And the cracks showed up exactly where demos never look: the second week, the tenth campaign, the edge cases. A post would save — except the platform field quietly didn't. The calendar showed something different from the library. An error would happen and the app would just... shrug. No message. No trace. Just a thing that didn't work and no way to know why.
A demo only has to work once. A tool you rely on every day has to work the thousandth time, when you're tired and not paying attention. Version one couldn't do that.
The hardest decision: start over
I could have kept patching it. I'm a little embarrassed by how long I considered that — sunk cost is a powerful drug. But every fix landed on a foundation that wasn't built to hold the thing I actually wanted. I was bolting reliability onto something designed as a tech demo.
So I deleted it and started again. The new version even got a new name internally — "v3" — partly as a private promise to myself that I wasn't going to ship another beautiful demo. This time the foundation came first.
The one rule everything else bent around
Before writing a line of the rebuild, I wrote down a single engineering principle and taped it to everything: no silent failures.
It sounds boring. It's the most important decision in the whole product. It means:
- Every error is visible and traceable. If a post fails to publish, you see exactly why — not a spinner that never resolves.
- The app never hard-crashes on you. A missing field renders an empty state, not a white screen.
- What you see is what's true. The calendar, the library, and the actual scheduled post are always the same thing. No more "which screen do I believe?"
- Every change can be undone. Reversible by default, because a tool you trust with your brand can't be a tool that surprises you.
I built it in disciplined phases with checkpoints and rollback steps, so each piece was solid before the next one stacked on top. Less glamorous than shipping features. Far more important.
The unglamorous weeks nobody tells you about
Here's the part founders rarely admit: a huge amount of building a "simple" product is invisible. I spent days — genuinely, days — fighting layout bugs so subtle they have no name. The calendar would leak its styles into another page. A drawer wouldn't scroll on a laptop but would on a monitor. I started calling it the "scroll wars."
None of that is sexy. None of it makes a feature list. But it's the difference between a tool that feels cheap and one that feels like it respects your time. The boring reliability is the feature. You only notice it when it's missing — and by then you've already left.
Why this matters to you, not just me
When you hand a tool your brand and your publishing calendar, you're trusting it to run while you're not watching. That trust is the entire product. A content tool that flakes out is worse than no tool, because now you're not even sure what went out.
The reason Heist can confidently say "let it draft, schedule, and publish for you" is that I burned an entire first version learning what "confidently" has to mean. The boring foundation is why the impressive part is safe to use.
The takeaway
Starting over cost me time I didn't feel I had. It was still the right call. The version you can use today exists because the first one doesn't.
If you've been burned by tools that demo great and fall apart in week two, I get it — I built one. Heist is the answer to that exact frustration. Start a free trial, push it past the demo, and see what a foundation that was built to be trusted actually feels like.
Next: the hardest technical problem in the whole product — teaching a machine to sound like a real brand instead of a confident stranger.