Thinking.
A few principles I've developed over the years. None of these are
original — most are things I learned the hard way by watching the
opposite fail. But they're what I come back to when making decisions.
01 Bring problems, not solutions
The most common dysfunction I see is stakeholders arriving with fully-formed solutions and asking teams to execute. This wastes the team's experience and judgment. The people closest to the system usually know the constraints best. Good collaboration means bringing the problem to the table and figuring out the solution together.
02 Accountability runs both ways
I hold my teams accountable, and I expect them to hold me accountable right back. Leadership isn't a hierarchy of blame — it's a mutual commitment. If the team isn't delivering, that's as much my problem as theirs. If I'm not giving them what they need, I want to hear about it.
03 Architecture is a team sport
The worst architecture happens when it's handed down from a dedicated group that doesn't ship code. Architecture should be a shared practice — every engineer makes architecture decisions whether they realize it or not. My job is to make sure those decisions are informed, not to make them all myself.
Currently
What I'm thinking about and exploring right now.
Reading The Infinite Game by Simon Sinek — thinking about what it means to play long-term games in software and team building.
Exploring How LLMs will reshape what software engineering looks like in practice — not the hype, but the actual changes to how we work.
Working on Approaches to AI-assisted development that minimize waste and unnecessary spend. Making the tooling useful without making the codebase worse.