Monday, March 21, 2011

"What qualities make a good startup engineer?"

My answer on Quora.com to the question "What qualities make a good startup engineer?" (originally written on Quora and copied below):

1. The ability to "get s*** done. This is too vague a description for an attribute, so: The ability to recognize a "best fit" solution to a particular (product) problem or requirement and implement it as quickly as possible, also recognizing that the best solution for the product **right now** may mean acquiring some technical dept to be paid later. Another way to say it is the ability to ship as quickly as possible probably without adherence to some engineering dogma. Ship! 

1a. Very important: knowing when to pay off technical debt. It can be more of an art than a science, and at times it's blatantly obvious; I'm not sure whether this is an acquired or a native skill, but it's important. 

1b. Love your own code, and love to rewrite your own code. Don't be precious with it. Your code is not you, you are not your code. Rewriting your own work is a perk of the job, not a chore. 

2. The ability to learn very quickly. I believe this implies some (high) level of intellectual curiosity, as the best learners (in my experience) are also very intellectually curious. This doesn't just mean learning new-to-them engineering knowledge, but also new-to-them people/management/social/etc. knowledge. 

3. The ability to suspend the behavior most commonly associated with jerks, a**h***s and know-it-all software engineers. Also, see #2, as a part of working in groups is learning how to work in groups as a civilized person and not akin to a chimpanzee throwing your poo at people you think are idiots. This is especially important (it seems) for extremely intelligent engineers accustomed to being the smartest person in the room in most other situations. 

4. Related to #3 is learning to trust the other people in your startup, and trusting that they are just as smart (and in some areas of expertise, smarter) than you. Trust that the people around you are fantastic. And learn from as many of them as possible. 

5. Also related to #2 is learning very quickly how to handle stress. I must put the emphasis here on learning what shifts in behavior and habit will get you through it all over purely cognitive solutions. Changing diet, getting enough sleep (where "enough" is relative, but learning when "enough" is enough if you get my meaning), and other changes in lifestyle are what I'm suggesting (among others). It's one thing to convince yourself that you're handling the stress, it's another to actively take action to counteract the effects of stress. Pro-tip: breakfast cereal at every meal and 3 hours of sleep per night only get you so far - probably to MVP. After that, you're in a marathon; learn to run a marathon. I'm not suggesting a "work/life" balance. I'm suggesting a "work/recharge-for-more-work" balance. 

6. Experience. If possible. If not, see #2. 

7. Somewhat related to #6 is knowing what tools to use in your trade. For example, knowing when something is more appropriate to use (I.e., well-established, broad base of support, very active and numerous community) vs. when some new, hot, (probably fashionable) new technology is at least not entirely inappropriate (brand new, not proven to scale, but so very very cool new tech) but probably inappropriate for the immediate task at hand. And vice-versa - when it is OK to use some yet-to-be-annealed-in-the-furnace-of-a-quickly-growing-product-of-a-successful-startup technology.

8. Honesty, personal responsibility. I've seen otherwise honest engineers show their compulsive-liar side when put under extreme pressure (usually after very little sleep), or called-to-task for some error of judgement. Stand up, admit mistakes, and see #2 as usual. Learn from the error