Have you ever watched a Roomba work its way around a room? They work in a random and chaotic manner – first they go a bit this way, then a bit that way. They bounce off of walls, chew up cords, and generally make a nuisance of themselves. Sometimes, they sit for a few seconds and just slowly spin.
Actually, watch this:
See what I’m talking about? Now, I’ll grant you, a Roomba will eventually get the entire floor clean, but the device itself is rather dumb. If you spilled something on the floor, the Roomba would get to it eventually, but it almost certainly would be faster to just vacuum that spill yourself.
Now ask yourself: do you act that way at times? How often do you find yourself doing things that are tangential to your actual purpose, or in some cases directly opposite the intended goal? For most of us, if we’re honest, that’s the case most of the time.
Engineers are people, too. And a lot of engineers are the industry equivalent of Roombas.
What makes them act that way?
Roombas lack the ability to see the big picture. A Roomba’s sensors are only able to sense things it’s in direct contact with, or in some cases things which are mere inches away. Because a Roomba doesn’t know the size of a room, or where the dirt is heaviest, or even how to navigate beyond the paths it’s already marked, it wanders about. It tries going one way, then sees how that goes. If it doesn’t run into an obstacle, it will eventually turn and go a different way, just to ensure that it checks off all its boxes.
Most people lack the ability to see the big picture. They cannot necessarily map out the paths to the successes they seek, and many don’t even know which direction to start in. Most sit and scan the familiar area, the only sections of reality and paths of action which they have ever used. Some bolder individuals seek to branch out and explore different directions which others before them have gone. A rare few have the guts and willpower required to embark on a path which no one has ever traversed.
Engineers are no different.
Many engineers spend their entire lives working on the same basic projects, encounter the same basic errors, and never quite grasp how to form patterns that prevent those same issues. They’re the Roombas that don’t quite move randomly – they sit and spin, creating a very clean little circle in the carpet. They don’t bounce off walls or hit cords, because they never move beyond the safe zone they’ve marked for themselves. These engineers rarely if ever produce new or innovative solutions.
Other engineers, uncertain how to make a path from where they are to the objectives they’ve been given, figuratively wander about, gathering a bit of wisdom here and a bit of wisdom there. They meander through uncharted territory, searching for a path to the goal. They bump off walls all the time, and often hit the same wall again and again, because they haven’t quite mastered the art of pattern matching. But, like the Roomba, they eventually (usually) get where they’re going, and map out a very circuitous route. These engineers do stumble onto new and innovative solutions, given enough time and resources.
Then, the rarest of the rare engineers has a big picture view. He sees patterns everywhere, and builds up a sort of mental map of all the solutions and issues he’s encountered over time. The map he constructs optimizes for the fastest and most reliable paths while avoiding the slower or error-filled paths. He constructs libraries of fast, generic solutions to common problems – shortest distance paths to particular goals. His search patterns get tighter and tighter as he begins to recognize different types of terrain, and he quickly learns where the walls are and how far they stretch. As with everyone, he chews a fair number of cords and bumps off obstacles, but he develops a skill for recognizing them as they approach. These engineers routinely generate new and innovative solutions, and do so quickly and promptly.
Which of these matches you?
I like to believe I’m one of the rare engineers, but that remains to be seen. I’m still somewhat untested – I’ve only been programming for about a decade, and much of that time was wasted on non-programming tasks. However, I pride myself on my meticulous documentation, my record keeping, and my pattern generating abilities. I work hard to plan out each phase of my work, then fit coded solutions to that plan. I believe that I’m developing that big picture view, which allows me to write more code faster, more reliably, and with better maintenance possibilities down the line.
However, if I’m being honest, I face a decent amount of uncertainty. I’m still young, and know only so much. I lean heavily on those who I know have that big-picture view, because they have patterns and approaches that I would not discover without years of bouncing around. I question, I listen, and I learn through curiosity.
I’ve seen a great many programmers, though, who honestly fit in one of the other two categories. Some of my favorite people are the uncertain types – they have taken on a great many tasks, only to fail because they couldn’t muster the energy or the time to bounce their way to the solution. They lean very heavily on “magic” utilities that they’ve never tried to understand, just because to do so requires more effort than they’re willing to exert. When they are bound to a task, however, they will approach from any number of angles and pursue them tenaciously, even if the result is a mess of ultimately meaningless code.
I believe that, given greater curiosity and better resources, anyone can move closer to the big-picture approach. It requires access to better patterns, the willingness and ingenuity to apply them in strange places, and the humility to accept and learn from the cases where the approach has failed.