I write about things I've learned the hard way -- architecture decisions, AI integration patterns, team dynamics, and the craft of building software that lasts. These are field notes from forty years of practice.
* most recent firstThe conversation around AI and software development keeps missing the point. AI doesn't make developers obsolete -- it redefines what the job looks like. The developers who thrive will be the ones who learn to think with AI, not the ones who fear it or blindly trust it. This piece breaks down what that actually means in practice: pairing, prompting, reviewing, and knowing when to override the machine.
After years in the .NET ecosystem, I took on a major Spring Boot project. This is a practical field guide for .NET developers making the same transition -- what maps cleanly, what doesn't, and the mental model shifts that matter more than syntax differences. Covers dependency injection patterns, middleware vs. filters, configuration paradigms, and the surprising places where the two ecosystems think identically.
These are the threads I keep pulling on. Some will become articles, some are just questions I'm chewing on.
How do you teach AI judgment vs. just prompting?
Legacy modernization without rewriting everything
The architecture of teams that actually ship
When to build, when to buy, when to walk away