A Programmer's Dream

Using AI in Production: Lessons from the Real World

The first time I used GPT to scaffold code, it felt like cheating. Fast-forward a few sprints, and I found myself staring at confident code that silently dropped data in production. AI can be a force multiplier -- or a quiet liability. In this piece, I share where LLMs shine, where they stumble, and why responsibility should always remain human.

From WebForms to Blazor: My Decades in .NET and Why Change Isn't Optional

In 2003, I fell in love with Web Forms. By 2015, I was still writing them—like it was 2006.Somewhere between stability and delivery, I’d stopped learning. The world kept moving. I didn’t. That’s a hard thing to admit as a technologist. I caught up. But not before realizing just how quietly obsolescence creeps in. This is a story about .NET, Blazor, and why change isn’t optional.

Teaching SQL to a New Generation or How to Make Data Click

Teaching SQL to new devs is part art, part cautionary tale. I wrote about that moment when it clicks—when they stop writing loops and start thinking in sets. Includes metaphors, cross join disasters, and a little data poetry.

The Role of the CTO in 2025: Strategy First, Code Second

The CTO role has changed. It’s no longer about being the smartest engineer in the room. It’s about shaping strategy, enabling change, and building trust across every department. In my latest piece, I explore what it means to lead as a CTO in 2025. From architecture diagrams to organizational design, from writing code to writing clarity. Give it a read if you’re navigating this shift, or leading someone who is.