I had an underwater slate with me, so I explained the situation to T. “M is very low on air, and we are way north.” She nodded and with quick gestures confirmed the plan: She would signal and escort the photographers back to the exit point, and I’d do the same with M.

T and I have been diving together for more than 20 years, and I knew that at this point she could not have breathed more than a quarter of the air in her tank. But less-experienced divers expend a lot of energy and therefore burn through their air quickly, so shorter dives are part of the price you pay for more social diving. My conversation with T couldn’t have taken more than 30 seconds. I looked around for M. He was on the surface and swimming directly towards shore, where 6-foot waves were crashing over a shallow reef ledge. Things had gotten quite serious.

Risk, in project management, means a problem that hasn’t happened yet. Inexperienced project managers often focus too much on spectacular (but less likely) problems. Every person who swims in the ocean regularly is used to being asked about sharks. Yes, sharks exist. Yes, there’s some chance you might see one. Yes, there’s even some astronomically slim chance you’ll get bitten. In software, yes, hitherto-unknown defects in infrastructure can appear. Yes, vendors might not fix them. Yes, there’s some chance this will affect the schedule.

But experienced project managers can do the opposite, as T and I had done with this dive. We’d focused on the mundane; the entry and exit to the dive was through a channel in the reef and, although it was generally the case that the high surf spent itself on the reef ledge, we’d warned our companions to check for and wait out the occasional large set that could shotgun down the channel to shore. That was the risk on the dive, to our minds. But while we thought we had accounted for the experience levels of our companions, we had forgotten the mindset of a newcomer. The idea of exiting over a reef ledge simply doesn’t occur to an experienced diver, since even the slightest of surf will push you against rocks and coral.

What M was now about 10 feet from experiencing was infinitely worse: He would be lifted up and forward into the crest of the wave, and then would be borne along with all that energy onto a reef that was about 18 inches below the surface. Once he was in that situation, there would be no way to assist him. I bellowed at him and, thankfully, he stopped and turned towards me, even as I could see the wave he was on begin to stand up.
Most program managers would recognize that it’s risky to put a junior programmer on core code, but many don’t recognize that there’s no such thing as “safe” code in today’s lean projects. Once, tedious human-assisted QA was the training ground for new programmers, and for a while it was accepted that all code had to be peer-reviewed before check-in. But today, testing is deeply integrated into the development life cycle, and a crisis in testing (long builds, fragile test suites, tests that memorialize procedure and not value) can break the entire development and deployment cycle. And while many teams will nod about comprehensive code review, most teams end up with a push-based “Can you check this?” process that relies on developers recognizing their own limitations.

I talked to M until he’d calmed down, and we surface-swam back to the channel, where T and the photographers popped up and exited without problem. I swam with M, timed the sets, and sent him in, hovering a few yards back. As T and the others assisted him on the way to shore, I breathed a sigh of relief: crisis averted. Or so I thought until I heard a rumbling behind me. I turned and saw that, by concentrating on M’s situation, I’d compromised my own. The first wave of a large set was tumbling its way toward me, and all I could do was to align myself to dive into it and avoid being tumbled. In the next few minutes, I burned through hundreds of pounds of air and was pushed more than 50 yards from the exit point.

Amazingly, I wasn’t hurt, but it was the worst safety situation I’ve been in in years. So I’ll stretch the metaphor for a final piece of advice: Take care of yourself. Software management is the place where the lofty ideals and technical buzzwords of the boardroom have to be aligned with human capability, fallibility and values. It’s even more stressful than debugging complex multi-threaded code (yeah, I said it).

Sometimes a manager will face a choice of putting his or her own job performance on the line in order to protect someone who’s struggling. I think that’s an admirable thing to do, but it’s inherently risky. If it works out, it’s just another story, but if it doesn’t, things can get awfully rocky.

Larry O’Brien is a developer evangelist/advocate for Xamarin. Read his blog at www.knowing.net.