Get your head out of the boat

I learned to sail as a kid. I remember sitting hunched in a Sabot, head down, clutching a wooden stick and rope, my eyes darting between them as an instructor warned about the buoy ahead.

Thunk.

I kept sailing and with practice came names — tiller and mainsheet — and with names came an appreciation for what they do — steer the boat and adjust the sail — and with appreciation came using the tools to reach a goal. In those days, the goal was sailing to the sandbar with my best bud Wade to build crab fighting arenas. The crabs didn’t fight, so I suppose we built custom crab sandcastles.

Every sailor reaches a point where they’re comfortable enough with what’s happening in the boat that they turn their gaze outward to plot their course, navigating around other boats and hazards, finding the fastest, or most relaxing, path to their destination.

And there’s more to learn. If you start racing, you learn rules and tactics and strategy. You pay more attention to your surroundings, comparing your boat to the boats around you. Should I duck under the starboard boat? Should I tack early and stay in clear wind? Which way is the fleet going? Your mind is out of the boat, watching for puffs and lulls and eyeing the shape of the fleet.

There’s a balance to be had, looking inward and out. You need your head in the boat to make small decisions that keep your speed up, and you need your head out of the boat to make big decisions to stay on course and in clear air. And so it goes. The best sailors have an intuition inside the boat. They don’t have to look at the boat, because they feel her. She speaks to them. They can turn their attention to the sea.

I see the same dichotomy in software engineering. Learning to code is an ordeal — you learn your if statements and for loops, how to accept user input, and how to turn that input into something useful. It takes time to learn the basics, but once you have a foundation, you need to get your head out of the code. Code is a tool. Use it to solve real problems.

Think about the problem. Are we solving it the right way? Is it the right problem to solve? Is this the simplest solution we can build? Will my teammates understand the solution?

You need your head in the code as a baseline, but you need your head out to focus on the big picture and solve big problems. That’s how you weather the seas. That’s how you build good software.