I nearly died Saturday.

I was meeting some friends at a local park for some rock climbing. I've been there plenty of times before, so I showed up early to set some anchors and claim a route.

Sixty feet above the ground, I clipped in my double quick-draws and loaded the rope through a figure-8 device.  My plan was to set the top rope and rappel back to the ground. Pretty routine.

My anchor was about two feed below the top of the rock, so I would swing about four feet before it caught my weight.  No big deal, I've lived through 20-foot zippers before.

I leaned back to put some tension on the rope and let myself fall back over the edge like I've done hundreds of times before.

Only this time, my anchor failed.

One of my quick-draws fell off completely. The other opened and nearly came clean off the bolt.

I hastily grabbed the nearest crack I could find and hugged the wall.  Leaned precariously on a tiny toe-hold I managed to reach up and reset both anchors.  Then, heart pounding, I rappelled the remaining 55 feet without any issue.

Well, except for the rush of adrenaline, panic, and sudden realization that I'd nearly bought the farm.

When my friends arrived, they offered to let me climb first as a thank you for waiting.  I took my sweet time tying back in to the rope. After my earlier accident, I didn't trust myself at all near the rope, safeties, or belay devices.  I was shaking -- between you and me, I was ready to call the whole trip off right there.

But I put on a calm face and climbed anyway.  All three of us had a blast, and when we were done I scrambled back to the top with my friend C so she could rappel down after we cleaned up the anchors.

I drew up the rope, ran it through the chains rather than my quick-draws, and set her up to rappel on an ATC.  Then I double-checked my work.  Then I triple-checked. Then I called down to our climbing partner to do a fireman belay (pull down on the rope and force the ATC to lock if needed).

Then I quadruple-checked my work. C noticed I was a bit nervous and reiterated that she trusted I knew what I was doing.  After checking everything so many times, I knew for certain that everything was set up right.

She leaned over the ledge and made it uneventfully to the ground.  I set up my figure-8 and followed shortly thereafter.

The panic-ridden event reminded me something very important -- mistakes are natural.

Knowing Your Stuff

As a developer, I question daily whether or not I actually know what I'm doing.

It's common for developers to question their skills and qualifications.  I doubt the competence of any developer who doesn't struggle with self-confidence.

Once you know what you know, it's easy to find the holes in your skillset.  You immediately detect where you fall short when measuring your abilities against peers.  Questioning whether or not you're a fraud comes naturally.

I don't consider myself particularly skilled with PHP, JavaScript, C#, or any other language that I use day-to-day to code.  I know what it is that I don't know with each of these skills - and seeing the swiss cheese that is list of abilities is truly frightening.

It would be like swinging off a cliff with a Munter hitch[ref]In an emergency, fast-action-required situation I will gladly use a Munter hitch to belay a rescuer if no other equipment is available. But I consider this kind of belay to be a last-resort, only if absolutely necessary tool. There are better, safer methods available in almost all circumstances.[/ref] while knowing full well I should be using an ATC, figure-8, or Grigri.

At the same time, there is still quite a bit that I do know.

I can occasionally answer questions on Twitter without Googling the topic beforehand.  I can write intricate code, test it, and deploy it without needing to seek advice.  I can actually read prototype chains in JavaScript.  I can follow multiple inheritance trees in C#.

I might doubt myself on occasion -- OK, frequently -- but at the end of the day, I consider this kind of mental check more an exercise in knowing my own limits than admitting defeat.

I can and will make mistakes writing code.  I can and will come up short when investigating bugs.  I can and will introduce bugs in what I thought was bug-free code. Mistakes can and will happen as a natural part of development -- so long as no one dies as a result, this is a fact something I can live with.