Back to Notes
philosophy

What Rock Climbing Taught Me About Software Architecture

Hanging 20 meters up a rock face, scared, unsure if the next move will hold, this is where I learned the most important lessons about building software systems. Here's what the vertical world taught me about engineering.

I've been rock climbing for almost 7 years. (Sport climbing on real rocks outdoor!)
I've also been building software systems for 15 years.
Turns out, they're the same thing.

🧗‍♂️ The Moment Everything Clicked

Location: Outdoor crag, Portugal
Route: 7c (difficulty)
Position: 30 meters up
Problem: The next move looks impossible

I'm gripping the rock, forearms burning, looking up at the next hold. It's far. Maybe too far. My last piece of protection is 3 meters below me. If I fall now, I'm taking a 6-meter drop.

My brain:

"This hold looks bad. What if it breaks?" "My grip is failing. I need to move NOW." "But what if I can't reach it?" "Should I downclimb to the last rest?" "No, I'm too pumped, I might fall on the downclimb." "Okay, commit to the move." "Wait, one more deep breath..."

Then it hit me:

This is exactly like deploying a major architectural change.

The fear. The uncertainty. The point of no return. The need to trust your preparation.

Let me explain.

🎯 Lesson #1: Route Planning = System Design

In Climbing

Before you start climbing, you study the route:

  • Where are the hard sections? (the crux)

  • Where can you rest?

  • What's the commitment point? (point of no return)

  • What's your descent plan?

If you don't plan, you get stuck halfway up.

In Software

Before you code, you design the system:

  • Where are the hard problems? (the technical crux)

  • Where can you pause safely? (checkpoints, rollback points)

  • What's the migration point? (when old system turns off)

  • What's your rollback strategy?

If you don't plan, you get stuck halfway through migration.

The Parallel:

I've started climbs without studying the route. Looked easy from the ground.

Halfway up: "Oh shit, the crux is here and I'm already tired."

I've started architectural changes without planning. Looked easy from my desk.

Halfway through: "Oh shit, the data migration is the hard part and we're already committed."

Lesson: Study the route before you start. Find the crux. Plan your rest points.

😰 Lesson #2: Fear is Data, Not a Blocker

The Fear Factor

20 meters up, gripping a small hold, fear kicks in:

"This is dangerous. I might fall. This was a mistake."

But here's the thing: Fear is information.

Fear tells you:

  • You're at your limit (need to improve or retreat)

  • The consequences matter (take it seriously)

  • You need focus (no room for carelessness)

Fear doesn't mean "stop." It means "pay attention."

In Software

Deploying database migration, anxiety kicks in:

"This could break production. We might lose data. This was a mistake."

But anxiety is information:

  • This change has high impact (test thoroughly)

  • The consequences matter (have rollback ready)

  • You need focus (no cutting corners)

Anxiety doesn't mean "don't ship." It means "ship carefully."

The Parallel:

On the rock, I've learned to use fear:

  • High fear = high consequences = more preparation needed

  • But you still climb. You just climb smarter.

In software, I use anxiety the same way:

  • High anxiety = high impact = more testing needed

  • But you still ship. You just ship smarter.

Lesson: Fear/anxiety is a signal to be more careful, not to give up.

🔄 Lesson #3: Know When to Bail (The Art of Retreat)

The Hardest Climbing Decision

You're halfway up a route. It's not going well.

Options:

  • Push through (commit, might succeed or fall)

  • Retreat (downclimb, give up, try another day)

Ego says: "Don't quit. You'll look weak." Wisdom says: "Live to climb another day."

I've pushed through when I should have bailed. Result: Scary falls, injuries, trauma.

I've bailed when I should have pushed. Result: Regret, but I'm alive.

The key: Knowing which is which.

In Software

You're halfway through a rewrite. It's not going well.

Options:

  • Push through (commit resources, might work or fail spectacularly)

  • Rollback (revert, stick with old system, try different approach)

Ego says: "Don't give up. You'll look like you failed." Wisdom says: "Sunk cost fallacy is real."

I've pushed through when I should have rolled back. Result: Months wasted, team demoralized.

I've rolled back when I should have pushed. Result: Lost time, but avoided disaster.

The key: Knowing which is which.

How I Decide (Climbing):

Can I still think clearly? 
  → Yes: Keep climbing
  → No: Too scared/pumped → Bail

Is the protection good? → Yes: Push through fear → No: Don't risk it → Bail

Am I improving as I climb? → Yes: Working through it → Continue → No: Getting worse → Bail


How I Decide (Software):

Is the team confident?
  → Yes: Keep going
  → No: Morale tanking → Pause/pivot

Is the data safe? → Yes: Continue migration → No: Risk is too high → Rollback

Are we learning as we go? → Yes: Making progress → Continue → No: Flailing → Stop and rethink


Lesson: Quitting isn't failure. Quitting at the right time is wisdom.

🎸 Lesson #4: Redundancy Saves Lives

Multiple Points of Protection

In climbing, you never trust a single piece of gear:

Climber
  ↓
Rope
  ↓
Carabiner #1 → Protection piece #1
  ↓
Carabiner #2 → Protection piece #2
  ↓
Carabiner #3 → Protection piece #3
  ↓
Belay device
  ↓
Belayer (your safety backup)


If one piece fails, you have backups.

I've had real failures happen on me:

  • Loose rock
    Hold broke

  • Carabiner gate opened accidentally

But I didn't fall far because of redundancy.

In Software

In production systems, you never trust a single component:

User Request
  ↓
Load Balancer #1
  ↓
Load Balancer #2 (backup)
  ↓
App Server #1, #2, #3 (replicas)
  ↓
Database Primary
  ↓
Database Replica (backup)
  ↓
Backup snapshots (disaster recovery)


If one component fails, you have backups.

I've had components fail in production:

  • Server crashed

  • Database connection pool exhausted

  • CDN went down

But users didn't notice because of redundancy.

The Parallel:

Climbing: Never put all your weight on one hold until you test it. Software: Never put all your traffic on one server without testing it.

Climbing: Always have a backup plan for descent. Software: Always have a rollback plan for deploys.

Lesson: Redundancy isn't wasteful. It's survival.

🧠 Lesson #5: Trust Your Gear (But Inspect It)

The Paradox of Trust

In climbing, you must trust your gear:

  • The rope will catch you

  • The carabiner won't break

  • The harness is secure

But you also inspect everything before every climb:

Pre-climb checklist:
☑ Rope: No frays, damage, or wear?
☑ Harness: Buckle doubled back?
☑ Carabiner: Gate locks properly?
☑ Knot: Figure-8 tied correctly?
☑ Belay device: Set up right?

You trust, but you verify.

I've caught problems during inspection:

Harness buckle not secured (would have failed)
Rope had a core shot (inner damage)
Carabiner gate was sticky

Inspection saved my life.

In Software

In production, you must trust your dependencies:

  • React won't crash

  • PostgreSQL won't corrupt data

  • AWS won't go down (lol)

But you also audit everything regularly:

Pre-deploy checklist:
☑ Dependencies: Any security vulnerabilities?
☑ Database: Backups working?
☑ Monitoring: Alerts configured?
☑ Tests: All passing?
☑ Rollback: Plan ready?

You trust, but you verify.

I've caught problems during audits:

  • Dependency with critical security flaw

  • Backup system silently failing for weeks

  • Monitoring alert that was broken

Audits saved production.

The Lesson:

Climbing: Trust your gear, but check it every single time. Software: Trust your dependencies, but audit them regularly.

Complacency kills.

🏔️ Lesson #6: The Crux is Temporary

What is the Crux?

In climbing, the crux is the hardest section of the route.

It might be:

  • One scary move

  • A sequence of difficult holds

  • A section that requires everything you have

But here's the thing: The crux is temporary.

Before the crux: Easier climbing During the crux: Maximum difficulty After the crux: Relief, easier terrain

You just have to get through it.

In Software

Every project has a technical crux:

  • The data migration

  • The authentication rewrite

  • The payment integration

  • The performance optimization

The crux is temporary.

Before: Planning, easy tasks During: All-hands-on-deck, intense focus After: Relief, back to normal velocity

You just have to get through it.

The Parallel:

On the rock:

I've stood below a crux, thinking: "I can't do this."

Then I break it down:

  • Reach left hand to that hold

  • Bring right foot up

  • Shift weight, reach

  • One move at a time

Suddenly I'm past it.

In code:

I've faced a migration, thinking: "This is impossible."
Then I break it down:

  • Migrate read path first

  • Dual-write for safety

  • Migrate write path

  • One step at a time


Suddenly we're live.

Lesson: The crux looks impossible until you break it into moves.

💪 Lesson #7: Failure is Training

Falling is Part of Climbing

I've fallen hundreds of times:

  • Learning new moves (fell, tried again)

  • Pushing my limit (fell, came back stronger)

  • Misjudging holds (fell, learned caution)

Every fall taught me something.

Climbers who never fall are climbers who never improve.

You have to try moves you might fail. That's how you get better.

In Software

I've shipped bugs hundreds of times:

  • Trying new patterns (broke, learned)

  • Pushing velocity (bugs, improved process)

  • Misjudging complexity (incident, learned humility)

Every bug taught me something.

Engineers who never ship bugs are engineers who never push boundaries.

You have to ship features you might fail at. That's how you get better.

The Mindset Shift:

Old thinking: Falling/bugs = failure = bad

New thinking: Falling/bugs = learning = growth

The key is:

  • Fall/fail safely (good rope, good tests)

  • Learn from every fall/bug

  • Don't repeat the same fall/bug

Lesson: Failure is feedback. Use it.

🎯 The Meta-Lesson: Emotions Are Part of the Process

The Truth About Climbing

Climbing isn't just physical. It's deeply emotional:

  • Fear when you're high up

  • Doubt when the move looks hard

  • Frustration when you can't figure it out

  • Elation when you send the route

You can't eliminate emotions. You learn to work with them.

The Truth About Engineering

Engineering isn't just technical. It's deeply emotional:

  • Anxiety before big deploys

  • Doubt when the architecture feels wrong

  • Frustration when bugs won't fix

  • Pride when the system scales

You can't eliminate emotions. You learn to work with them.

What Climbing Taught Me:

Emotions aren't weaknesses to hide. They're signals to listen to.

  • Fear → Pay attention to consequences

  • Doubt → Double-check your approach

  • Frustration → Take a break, fresh perspective

  • Elation → Celebrate, then prepare for the next challenge

Same in software.

The best engineers aren't emotionless robots. They're humans who've learned to use emotions as data.

🧗‍♂️ The Climb Continues

After 10+ years of climbing, I still get scared on hard routes.

After 15+ years of engineering, I still get anxious before big deploys.

The difference:

I trust my preparation. I know my limits. I respect the consequences. I climb anyway.

And that's exactly how I approach software architecture:

Study the route (plan the system). Prepare redundancy (build safety nets). Trust my gear (audit dependencies). Face the fear (ship carefully). Know when to bail (rollback when needed). Learn from falls (iterate on failures).

Climbing taught me to be a better engineer.

The Invitation

Next time you're facing a scary technical decision:

Ask yourself:

  • Have I studied the route?

  • Do I have redundancy?

  • Is my fear telling me something important?

  • Do I know when to bail?

  • Can I break the crux into smaller moves?

Then take a deep breath.

And climb.

Do you have a hobby that changed how you think about engineering?

What unexpected lessons have you learned from outside tech?

Share your experience in the comments!

This post is dedicated to every engineer who's ever stood at the base of a mountain (technical or literal) and thought "I can't do this", then did it anyway.

🧗‍♂️ Climb on.

Something to add or contest? I'm always open to technical debate.

Start a discussion
What Rock Climbing Taught Me About Software Architecture | Sérgio Oliveira