- Published on
Deliberate Practice for Software Engineers
“Just build more side projects” is advice that works until it doesn’t. After a few years, unguided repetition plateaus: you get faster at familiar stacks, not better at unfamiliar problems. Deliberate practice closes that gap.
Deliberate vs. naive practice
| Naive practice | Deliberate practice |
|---|---|
| Repeat what you know | Target what you avoid |
| No feedback loop | Immediate, specific feedback |
| Comfort projects | Slightly uncomfortable tasks |
| Vague goals | Measurable micro-goals |
The DEEP loop (60–90 minutes)
- Diagnose — Pick one weakness (e.g. “I freeze on system design trade-offs”).
- Exercise — One focused drill, not a full app.
- Evaluate — Compare against a rubric or mentor answer.
- Plan — One adjustment for next session.
Example drills
- Debugging: reproduce a bug in 15 minutes from logs only.
- API design: sketch three schema versions and justify migrations.
- Frontend: implement the same UI with and without virtualization; measure.
- Communication: explain a design in 5 minutes to a non-engineer.
Weekly structure that fits a job
| Day | 30–45 min focus |
|---|---|
| Mon | Read one RFC or postmortem |
| Wed | One kata or LeetCode with write-up |
| Fri | Teach-back: document what you learned |
Common traps
- Tutorial hell: consuming without shipping a thin slice.
- Metric chasing: grinding easy algorithm tags without retention.
- No reflection: no journal entry = no compound learning.
Pair with AI thoughtfully
Use assistants to generate variants of a problem (“same API, but with pagination and idempotency”), then solve without looking at the solution. The learning is in the struggle, not the autocomplete.
Takeaway
Senior engineers are not people who know every API—they are people who learn new APIs quickly because they practiced learning on purpose. Block deliberate time like you block production deploys.