Now / Writing

Hello, world (and all the other ones I didn't finish)

I’ve started a lot of things.

A shell that I rewrote three times before giving up. A note-taking app that made it as far as a logo. A game engine whose main.cpp still compiles — and nothing else. The graveyard is bigger than the portfolio, and I suspect that’s true for a lot of people who work in software long enough.

This blog is for that. It’s not a “building in public” thing, exactly. It’s more of a log of attempts — what I tried, what I learned, what made me lose interest in month four, and occasionally, what I actually finished.

Why bother writing it down

Because projects that don’t ship still teach you things, and those lessons tend to evaporate the moment you close the editor for the last time.

A few examples of things I keep re-learning because I never bothered to write them down:

  • Don’t start with the data model. Start with one screen a user would see.
  • Scope is the only real feature.
  • If I can’t explain the project in one sentence by week two, it’s already dead.
  • “I’ll come back to this next weekend” is a decision to delete the project.

What to expect here

Probably:

  1. Postmortems of shelved projects.
  2. Small notes on things that worked unexpectedly well.
  3. The occasional deep-dive on a tool, a pattern, or an idea I keep reaching for.

Here’s a code sample, because every first post is contractually obligated to have one:

type Project =
  | { status: "abandoned"; reason: string }
  | { status: "shipped"; url: string }
  | { status: "in-progress"; since: Date };

function honestStatus(p: Project): string {
  if (p.status === "in-progress") {
    const months = monthsSince(p.since);
    if (months > 6) return "abandoned";
  }
  return p.status;
}

Most of my projects would fail honestStatus(). That’s fine.

More soon. Or not. That’s kind of the point.