Skip to content

Articles

Practical engineering articles, newest first. Each article lists its publication date, author, categories, and estimated reading time. You can also browse by tag or subscribe to the RSS feed.

Why I'm Finally Starting This Blog

I've wanted to write for a long time. Not because I wanted to become a blogger, build an audience, or establish myself as a thought leader — quite the opposite, actually.

Over the past twenty-plus years, I've had the privilege of working on some fascinating engineering problems. I've learned from incredible mentors, worked alongside talented developers, made more mistakes than I can count, and slowly developed opinions about software architecture, engineering culture, leadership, DevOps, AI, and what it means to build systems that last.

I've always wanted to share those experiences.

Semantic Versioning for APIs and Libraries: Why CI/CD Should Produce Versioned Releases

Ask most teams what their CI/CD pipeline does and you will hear some variation of "it runs the tests and deploys to production." That answer describes deployment automation, and deployment automation is genuinely valuable — but it is only half of what a pipeline should do. The other half is producing releases: repeatable, traceable, versioned units of software that you can point to, reason about, promote, and roll back. For APIs, libraries, and anything else with downstream consumers, the difference between "we deploy" and "we release" is the difference between a pipeline that moves code and a pipeline that communicates intent.