The 2 Types of Engineer

5255265500_87320ae06a_mI’ve noticed two types of engineer:

  • The “get it done” person.
  • The “make it perfect” person.

1) Get it Done

I believe this is what’s described as the 10X engineer. The focus is always on the finished product. This person plows through engineering problems with creative solutions. Anything will work, even if it’s totally off the wall. The focus is always on getting as much done as humanly possible.

This person is probably obsessed with productivity hacks and is good at focusing on the problem at hand. Expect him or her to put in marathon coding sessions, where they accomplish the same amount of work in 36 hours as a typical engineer does in a week or a month.

The disadvantage is that they will usually leave a mountain of technical debt in their wake. Need that new feature in 3 days? Count on this engineer to get it done, but realize that it won’t be pretty. The code will be full of hacks, mis-designs, code loopholes and exceptions. Don’t expect it to be tested well, but it will be done, and it will basically work.

You’ll typically be required to have a “make it perfect” engineer come through to clean up the code, and expect the clean up and redesign to take 3 times as long as the original implementation.

If this person is “good”, he or she will realize how many hacks and mis-designs they’ve left in place. If they’re especially good, they will have left TODOs all over the place, so another engineer can easily pinpoint what needs to be re-done.

If they’re “bad”, then good luck deciphering what they did.

Strengths

  • Getting features implemented and working quickly.
  • Ability to focus for extended periods of time.
  • Energy
  • Seeks novelty

Weaknesses

  • Does not enjoy the “details”
    • Filling out unit tests
    • Making designs perfect
    • Bug fixing.
    • The final 10% that actually makes a product shippable.
  • May leave varying amounts of technical debt and may or may not realize it.
  • Gets Bored easily

2) Make it Perfect

This person cares deeply about using the correct design in any given situation. He or she will agonize for hours over the details and research into doing things “the right way.”

They are very good at finishing the last 10 percent to make a product shippable. They won’t be bored by the “mundane” work necessary to build a working software product.

Unit tests will be filled out and test coverage will be good.

The “good” version of this person will finish their work leaving good designs and tested code in their wake. The design will be extensible, and future engineers will be thankful for the way the code is laid out.

The “bad” version of this person will spend all of that time, only to come up with a substandard design that future engineers will curse them over.

The really good version of this person will be able to fix bugs that most other people can’t tackle. If you have a terrible non-deterministic monster that will take 3 days to figure out, count on this type of engineer.

Strengths

  • If good, this person will produce good, reliable designs that stand for many years.
  • Will not complain about diving into the “details” of seemingly tedious work.
  • Good at getting that last 10% of a product done.

Weaknesses

  • Takes longer to get stuff done.
  • May become too detail oriented. I see these people get hung up on choosing between two designs when they’re basically the same. Both have advantages and drawbacks, and sometimes you just need to choose and get on with things.
  • If this person is “bad”, then he or she will spend an inordinate amount of time producing code that most likely will just need to be undone.

So Which is Better?

I don’t think anyone is purely type 1 or type 2. We all have a mix of both, but most people lean more heavily to one type or the other.

I know that Type 1 is more rare than Type 2. In my current organization, out of 20 engineers we have 2 or 3 who are Type 1, and the rest are Type 2.

I believe this is why the “10X engineer” has achieved mythical status in software engineering, because they are rare.

But the truth is that you need both in an organization. If all you had were Type 1 people, you’d plow through problems like they were nothing, but the organization would fall apart in a few years. You’d be forced to build new features on top of old, hacky code, that would only get hackier with every passing year.

Many startups follow this model, which is why people who join 3 years in have such a mess to deal with. On the other hand, the 10X people are key at the beginning of a new product. You have no idea if the project will succeed, so it makes no sense to invest the time to engineer it properly. You need to find out if what you’re doing is going to work, and if it won’t, then you need to change directions quickly.

On the other hand, if all you had were Type 2 people, your code might be fantastic, but you’d find the company falling behind, missing new waves in the market, and incapable of shipping new products.

The teams I’ve seen that work best are those that have one person who can plow ahead and get stuff working, and then others who enjoy filling in the details. So in other words, one person who is more Type 1 and another person(s) who is more Type 2.

Personally, having done my own company, I’ve always been more Type 1. But I’m well aware that the Type 2 people allow me to do my job. If they weren’t around, I would fall over in boredom, being consumed with work that I hate.

So you need both, and neither type is “better”, but it’s preferable to have the “good” version of either type. 

Photo Credit: Andrew Dallos

blog comments powered by Disqus