20 years of IT operations, and why my side projects have no build step

I’m Felipe. I’ve spent more than twenty years managing IT departments, the last seventeen of them at the same organization on the Pacific coast of Costa Rica. The work is infrastructure and operations: fiber networks, directory services, monitoring, and the business systems that have to keep running whether or not anything else does.

Twenty years of that teaches you something specific. You are the person who gets called when it breaks, and you will be maintaining your own decisions for a very long time. It changes your taste. You stop being impressed by cleverness and start being impressed by still working in year six with nobody touching it.

On nights and weekends I build web applications, alone. Everything runs on a VPS I administer myself — Git hosting, Postgres, email, the lot. I like composable pieces I can reason about more than managed services I have to trust.

The current project is a bookmark manager. Not a novel category, I know. It started because my own bookmarks had become a folder tree I never opened, full of links that had quietly died. The part that turned out to be genuinely interesting to build was the link checker: naive URL checking produces false positives constantly, because a surprising share of the web answers 403 to anything that looks like a bot. What ships now only flags a link after repeated failures over time, and distinguishes “gone” from “needs a login” from “moved.”

The part that gets me strange looks

The frontend is vanilla JavaScript. No build step, no bundler, no framework. The backend is PostgREST sitting directly in front of Postgres, with row-level security handling multi-tenancy and most of the business logic living in SQL functions. Background work runs as Python scripts on cron.

There is no application server of my own anywhere in that description.

That’s deliberate, and it comes straight from the day job. Every layer I add is a layer I’ll be debugging at 11pm in three years, alone. So the question I ask about a dependency isn’t “is this good?” but “what happens when this breaks and I’m the only one here?”

It isn’t free. There are things a framework would have handed me in an afternoon that cost me a week. Drag and drop is the clearest example: reordering cards across topic columns is a solved problem in every framework ecosystem, and writing it by hand cost me several evenings I would rather have spent elsewhere.

The platform kept getting better

I have been programming since before the web. By the time the internet took off in the mid-nineties I was already working in ColdFusion, now almost forgotten, and in PHP, which had just been released. Since then I have watched a long procession of application servers and frameworks arrive, dominate, and quietly disappear.

In parallel I have watched the core stack — HTML, CSS, JavaScript — get faster and more capable every year. The standards absorbed a great deal of what used to require an external library: fetch for HTTP, querySelectorAll for selection, grid and flexbox for layout, custom properties for theming. A surprising amount of what I once reached for a library to do is now simply the platform, and it will still be there when today’s frameworks are the next ColdFusion.

What I plan to write about

  • What PostgREST plus row-level security is actually like as an application backend, including where it stops being a good idea.
  • Building a link checker that doesn’t cry wolf.
  • Whatever I learn turning private side projects into something public — the current experiment, and going about as slowly as everyone warns you it will.

If you build things solo, run infrastructure you’re personally responsible for, or have opinions about how much machinery a small web app really needs, I’d like to hear from you. Especially the disagreements.

Thanks for reading.

Leave a Reply