by Will Larson
Notes & Ideas
Work on what matters
Avoid low cost, low impact work.
Give low cost, low impact work to juniors, and use it as a leadership opportunity.
Mostly avoid low impact, high visibility work
You don’t learn much, and is ultimately disappointing to everyone
Go where attention already is.
Rather than trying to get everyone to look at the problem you’re solving, work on a problem everyone knows and cares about.
Align with authority
Know your managers priorities.
Share your thoughts and learnings, provide context on what’s going on.
Never surprise them.
Learn to never be wrong
Abandon trying to be right.
People who HAVE to be right suck energy from the room.
Be clear, you’re always looking for what’s right, not who’s right.
Guide Engineering Strategy
Good Strategy is boring
- Might seem too obvious.
- Nothing radical.
- Guidance on how to make a particular trade-off is the best strategy.
- Always state why, so when facts change, it can change too.
- Should prevent the same debates repeating.
- let thought accumulate
Study your design docs
How different was your implementation to your design? Why was that?
What did you miss?
Curate Technical Quality
- Low quality is fine. It’s expected. It will get better over time.
- If previous decisions look bad, then the quality and expectations have improved. That’s good.
- Do the easy stuff first. Get feedback.
- Quality should be appropriate, to the goals, needs and timeline.
- Align teams/people with quality expectations, give feedback to re-align.
- Quality can’t be measured, but proxies for quality such as PR size, review time, code coverage, etc, can be useful.
Points of leverage for quality
Things that have a disproportionate impact on overall quality.
Give them much more time, document your learnings.
Data Models
Intersection of state & interfaces.
They should prevent the expression of invalid states.
They should expose only what is supported.
They should be tolerant to evolution.
They should never be clever.
Test them with multiple real scenarios.
State
Hardest thing to change.
Test all failure modes.
Test performance.
Interfaces
Test integrate numerous potential clients.
To lead, follow
Build a network of peers
Suggested Further Reading
- Good Strategy, Bad Strategy – Jeff Zych
- A Philosophy of Software Design – John Ousterhout