Chapter 4
You Fight the Way You Train
You don't rise to aspirations; you fall to your training. Cut corners now, pay later.
On this page
You don't rise to your aspirations; you fall to the level of your training. You fight the way you train. Cut corners in training and you'll pay it back in battle.
The Uncomfortable Truth
When the production database is on fire at 2 AM, you won't suddenly become a debugging wizard. You won't calmly apply the scientific method. You won't remember that blog post you skimmed about query optimization.
You'll do whatever you've done a hundred times before.
Your habits are your crisis response. Not your knowledge. Not your intentions. Your habits.
This is the uncomfortable truth: there is no rising to the occasion. There is only falling to the level of your training. The question is, what have you been training?
Knowing vs. Doing
Everyone knows you should write tests first. Everyone knows you should read the error message carefully. Everyone knows you should commit small and often.
Knowing doesn't matter. Doing matters.
The gap between knowing and doing is practice. Deliberate, repeated practice until the right thing becomes the automatic thing.
The test:
- When you're tired, do you skip tests?
- When you're rushed, do you skip the commit message?
- When you're frustrated, do you start changing things at random?
That's your training showing. Those shortcuts you take when "it doesn't really matter"? They matter. They're building the habits you'll fall back on when it does matter.
Muscle Memory for Engineers
Athletes train until movements are automatic. Musicians practice until their fingers know the song. Soldiers drill until reactions are instinct.
Engineers need the same.
What muscle memory looks like in code:
- Seeing a bug and immediately knowing what to check first
- Fingers typing the test before the implementation
- Noticing code smells without consciously looking for them
- Reaching for the right tool without thinking about it
How you build it:
- Repetition. Do the right thing enough times that it becomes default.
- Reflection. After each session, what went well? What didn't?
- Correction. When you catch yourself cutting corners, stop and do it right.
It's boring. It's slow. It works.
Practice Under Realistic Conditions
Soldiers don't train in comfortable conditions. They train in mud, in cold, in chaos. Because that's where they'll fight.
I learned this leading a recruiting team in the Kentucky Air National Guard. We hit 100%+ end strength for seven consecutive fiscal years. Not because we got lucky seven times. Because we trained the fundamentals until they were automatic: lead follow-up cadence, application processing, candidate matching. When the fiscal year deadline loomed and we were short on critical AFSCs, we didn't panic and try something new. We executed the same disciplined process we'd practiced all year, just faster.
If you only write clean code on greenfield projects with clear requirements, you haven't trained for the real world. The real world is legacy code, vague specs, and deadline pressure.
Realistic practice means:
- Working in unfamiliar codebases
- Debugging without access to all the information
- Making decisions with incomplete understanding
- Shipping under time pressure and still doing it right
The gym is not the fight. But the gym is where you build what you'll use in the fight.
The Cost of Shortcuts
Every shortcut is a debt. Sometimes debt is appropriate; you know what you're borrowing and you have a plan to pay it back.
But most shortcuts aren't conscious debt. They're just... shortcuts. Skip the test. Skip the review. Ship the hack. Nobody will notice.
Until they do.
The problem isn't that shortcuts fail immediately. The problem is that they work. They work long enough to become habit. And then, when you're in crisis mode and falling back on training, your training is full of shortcuts.
The shortcut you take in practice is the shortcut you'll take in the game.
Deliberate Practice
Not all practice is equal.[1] Playing a song you already know isn't practice; it's performance. Real practice is:
- Focused. You're working on something specific, not just going through the motions.
- At the edge of ability. Comfortable is too easy. Impossible is too hard. The learning zone is uncomfortable but achievable.
- With feedback. You need to know what you did right and wrong. Fast feedback loops.
- Repeated. Once isn't practice. Ten times is getting there. A hundred times is training.
For engineers:
- Do code katas (small exercises, repeated)
- Practice debugging by breaking things intentionally
- Refactor working code to improve it
- Write the same feature multiple ways
- Review your own code after a week
The goal isn't to produce output. The goal is to improve the patterns your brain reaches for automatically.
Building Good Defaults
You can't think your way to good habits. You have to build them deliberately.
The process:
- Identify the habit you want. "I want to write the test first."
- Make it the path of least resistance. Test file open before implementation file.
- Create friction for the wrong behavior. If you catch yourself implementing first, stop. Delete it. Write the test.
- Track it. Did you do it today? This week?
- Forgive lapses, but don't ignore them. Each lapse is data about what triggers the old behavior.
It takes time. Weeks. Months. But once the habit is built, it's automatic. You don't have to decide to do the right thing; you just do it.
The Compound Effect
Good training compounds. Each good habit makes the next one easier. Each correct instinct saves time you can invest in the next problem.
Bad training compounds too. Shortcuts become habits become defaults become "that's just how I work."
You're always training. Every line of code is practice. Every debugging session is reinforcement. Every code review is learning.
The question isn't whether you're training. The question is what you're training for.
Your Training Regimen
Daily:
- Write tests. Every day. Even small ones.
- Read code. Not just write it. Read and understand.
- Commit often. Small, clear commits with real messages.
Weekly:
- Review your own work from last week. What would you change?
- Learn one new thing. Small is fine. Just one.
- Practice something uncomfortable.
Monthly:
- Take on something outside your comfort zone
- Teach something you know
- Read the source code of a tool you use
Always:
- When you catch yourself taking a shortcut, stop and do it right
- When you don't understand, admit it and dig deeper
- When you make a mistake, understand why; don't just fix it
You fight the way you train. There are no exceptions. Build the habits now that you'll need when it matters.
Anders Ericsson and Robert Pool, Peak: Secrets from the New Science of Expertise (2016). Ericsson's research on deliberate practice shows that expert performance comes from structured, focused practice with feedback, not just accumulated hours. ↩︎