Part 2 of a 3 part series...
What are the hallmarks of a great engineer?
A great engineer is characterized by their intelligence, versatility, creativity, loyalty, passion, experience, vision, dedication, composure, humility, and ability. While most of these are self-explanatory, each bears a bit of explanation in the context of being a great engineer.
Intelligence, for an engineer, is demonstrated in their problem solving and reasoning capabilities. This is intelligence in the rote sense -- the engineer's ability to solve complicated tractable problems, or the ability to determine when a problem is intractable. Given a logic or math problem, it is their capacity to solve it correctly and efficiently. These types of problems appear frequently in day-to-day work in the form of choosing or developing the appropriate algorithms or data structures. Raw intelligence is perhaps the least fungible of all of the characteristics of a great engineer. I've met some great engineers along the way that are not always humble or composed, but never have I met one that is simply not intelligent.
Versatility in an engineer is most clearly evidenced by their desire and willingness to pick up new technologies. Beware the engineer that claims to be an expert in one programming language or operating system but has never even picked up a book on the alternatives. A great engineer is fluent in numerous programming languages and can switch between them when the need arises. A great engineer may have a favorite toolkit or development environment, but can adapt to a new one without losing more than a step. This is a crucial trait, as technology evolves so rapidly that it is inconceivable that a product life-cycle, much less a career, will stay with a single technology. Great engineers will constantly be researching new technologies, even on their personal time.
Great engineers will find a solution to whatever problem they are faced with, even if they didn't know the solution beforehand. If posed a problem they find impossible, they will figure out a way to avoid the problem altogether. They will invent new solutions where none currently exist. They will come up with ideas that surprise and amaze you. Creativity in engineering is commonly called "thinking laterally" or "thinking outside the box" and great engineers just do it intuitively to get the job done, whatever the job.
Loyalty is a sometimes murky, and often under-represented, characteristic of a great engineer. One of the most wonderful things about engineers is that they come from all different walks of life and cover the whole spectrum of social tendencies. Many engineers entered the field because they love the binary relationship with the machine, with working magic, and with avoiding the Caulfield-esque phoniness of mass-market society. And as such, many great engineers have intentionally eschewed the very social traits that others in business depend on. As such, their loyalty and devotion to a company can be overlooked because the engineer is less adept at expressing it at company holiday parties, business lunches, and one-on-one meetings. But a great engineer make daily sacrifices for their company (for many, even coming to an office is a sacrifice, even if you don't see it that way), and this loyalty should not be under-appreciated simply because it is demonstrated in an unfamiliar way.
When an engineer is passionate about a project they will work harder, work longer hours, and write better code. A great engineer will get excited about their work. But not just their work -- a great engineer will be passionate about music, about literature, about outer space, about history, about politics, about life. (I even once had a manager tell me he offered me the job partly because I talked so passionately about John Coltrane's _A Love Supreme_ over a lunch interview.) Boring projects happen from time to time, and having passions can keep a great engineer from getting burned out and apathetic.
In some ways, great engineers are born, not made. Characteristics such as passion, intelligence, and creativity can not really be taught or learned. But everyone starts at the beginning, and sometimes the only thing that separates the senior architect from the student intern is 20 years of practice. With experience comes wisdom, and this wisdom can often mean the difference between making the same mistakes that everyone makes their first time, and selecting the right approach from the outset. A few years in the industry is sometimes the only way an engineer will learn the patience they need to handle office politics and keep their cool under pressure. An engineer in their first year in the workplace will be seeing a number of things for the first time -- often getting their first glimpse of the ugly realities of capitalism. The transition from being a student -- where one is paying to have people be generally nice -- to the workplace -- where you are being paid to perform -- is not always easy. Many of the best engineers I've worked with are much older than me, and the biggest differentiator is that they've seen it all before, know what to expect, and let the small stuff just slide off their backs.
Just how valuable an engineer is to an organization in the end sometimes comes down to not merely their day-to-day performance, but to that one brilliant idea that just changes everything. Considering that the software engineers are often not only among the smartest people in the company, but also those closest to the thorniest problems, it is not surprising that some of the brightest new ideas can come from them. Breakthroughs in all areas can originate in the engineering department -- and a healthy company will foster channels of communication for making those ideas heard. By hiring engineers with not only the ability to write solid code, but also with the innate vision and insight to innovate, a company can get the unexpected gift that alters the business forever. Listen to those engineers -- they are too often an untapped resource.
Sometimes a job just needs to get done. Writing code isn't all fun -- there are always parts that require brute force and numb fingers. A great engineer doesn't get so lazy as to not finish the work -- they will push their way through it themselves. A great engineer won't pass the task along to someone else or pretend it doesn't exist. They will buckle down, do it, and move on. This includes not only code, but also in writing the documentation and the tests that go along with solid code, and in going back and fixing the bugs that crept up along the way. You can tell whether an engineer does this based on the number of projects they've successfully completed on their own in the past, and whether anyone is still using those projects today. This is the dotting the i's and crossing the t's of software engineering, and the best developers know that this is what they are paid to do.
There's no other way to say it -- shit happens. Projects get canceled, good people quit, deadlines change, people get downsized, chairs break, hard drives fail, networks go down, vendors lie, bonuses are slashed, office mates are added, cubicles are subdivided, expense reports are a pain, idiots exist, companies re-org, management waffles, and someone always over-promises something that your butt is on the line for delivering. The great engineer, -- the really, truly great engineer -- just deals. They don't pout, they don't sulk. They don't yell, scream, whine, or explode. They don't storm into their boss's office and have it out. They don't throw things, break things, or jump out of windows. They don't stay home from work the next day, the next week, the next month. They don't threaten to quit. They don't threaten to strike, organize a mutiny, or go work for a competitor. They just somehow find the wherewithal to take a deep breath, go for a walk, have a smoke, have a martini, have a good long session with the therapist, and come back ready for another day. Great engineers stay composed. The rest lose their cool. (And for the record, I've lost my cool in all the ways I mentioned and then some. But I'm learning, I'm still learning...)
The very best engineers are always improving. They know what they know, and they know what they don't know. More than that, they know when to let someone else take over. In any successful company there is too much work to do. But in a well-run organization, where people feel that they are working with other great engineers, they won't mind handing off that work to others. There is an implicit trust between the developers, and moreover, a healthy sense of humility will keep the best engineers from stubbornly pushing their own ideas at the expense of others. (This, for me, has been a particularly difficult characteristic to acquire, but it has gotten significantly better over the past six months.)
And though it hardly bears mentioning, a great engineer will write great code. Numerous books have been written about what constitutes great code, but in general, the best developers can strike the balance between correctness, performance, extensibility, and maintainability. Like intelligence, there is no substitute for programming ability in a great engineer.
My co-worker and friend, Jon, himself a young engineer that shares these characteristics, recently described a great developer as someone who treats it as an art, not a job. This sentiment resonates with me -- an artist lives and breaths their craft. An artist doesn't leave art at the office. An artist never stops thinking about the art in the world, about what makes art art, about what makes art great. And in this way, a great engineer incorporates these practices into his or her life. And never stops learning.
(Continue reading part 3 on how to hire great engineers, or part 1 on why hiring great engineers is important...)