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.