Software Convictions, Mostly Earned.
Earned through years of building, shipping, and getting it wrong.
- I'll never know it all.
Every new domain reminds you of that. Staying aware of it is what keeps you sharp.
- The hardest part of software is building the right thing.
You can build something perfectly and still be solving the wrong problem.
- The best code is code you never write. The second best is code you don't have to maintain.
Every line is a liability. The fewer you carry forward, the faster you move.
- Software is a means to an end, not the end itself.
If the problem goes away, let the code go with it.
- Stop sharpening the saw. Start cutting.
Learning is valuable right up until it becomes a reason not to ship. See Shipping beats perfect.
- You can't design a good system if you've only seen one corner of what's possible.
Breadth first. You can't pick the right tradeoffs if you don't know what's on the table.
- Every system eventually sucks. Get over it.
The system you're building today will be someone's migration project in five years. That's not failure. That's the job.
- Nobody asks "why" enough.
"Should we" always comes before "how do we." Most wasted work starts with skipping that question.
- Avoiding 0.1x engineers is more important than chasing 10x engineers.
One person who creates confusion or hoards context does more damage than any star can offset.
- Junior engineers have ideas and energy. Senior engineers have opinions and scars.
Ideas are cheap. Opinions forged from experience are what change the direction.
- People don't want innovation. They want things to work better.
Frame improvements as relief, not revolution.
- Your data outlives everything else.
Code gets rewritten. Platforms get replaced. Data persists. That's what makes it the most important part of the system.
- Don't bet against technological sharks.
Momentum, community, and investment beat elegance. Every time.
- Don't mistake humility for ignorance.
The sharpest people I've worked with lead with questions, not certainty.
- Write things down. Regularly.
If you can't explain it in prose, you don't understand it yet.
- Keep your processes lean. Then cut them in half.
Run experiments, share what happens, codify what works. In that order.
- Give engineers ownership or watch things rot.
People care about what they help shape. Take away the stake and they stop caring. See Burnout.
- Interviews measure the wrong things.
They test performance under artificial pressure, not whether someone makes the team better.
- Nobody gets promoted for simplicity, and they should.
Removing complexity is the harder, more valuable work. It just never makes the slides.
- Make the right thing the easy thing.
Don't mandate adoption. Reduce friction until the better path is the obvious one.
- How we work is the product.
Improve it like you'd improve anything else: experiment, measure, iterate.
- Build the system yourself before you let AI build it for you.
Understanding grows from building. If you let AI one-shot the whole thing, you skip the part where you learn the problem. See Steps to AI Engineer.
- Treat AI as a force multiplier, not a magic wand.
Incremental, high-leverage workflows beat over-engineered agents every time. More on this in LLM thoughts.
- Always build the smaller system.
Every part you don't build is one you never have to secure, monitor, debug, or explain.