Tuesday, February 12, 2008

The Line Between Good And Great

Staffing a project can be a unique sort of puzzle. It can be very similar to the exercise many start-up companies go through trying to find talent. The problem is that it can be really hard to recognize talent on paper. And when it comes to building solutions or delivering real business value you often need engineers who can do more than just cut code. Consider what Paul Graham wrote:
But when I think about what killed most of the startups in the e-commerce business back in the 90s, it was bad programmers. A lot of those companies were started by business guys who thought the way startups worked was that you had some clever idea and then hired programmers to implement it. That's actually much harder than it sounds—almost impossibly hard in fact—because business guys can't tell which are the good programmers. They don't even get a shot at the best ones, because no one really good wants a job implementing the vision of a business guy.
-- excerpt from The 18 Mistakes That Kill Startups by Paul Graham

This is a spot on concern as it relates to start-ups, and is a pretty good summation that the world at large has with separating real technical talent from mediocre technical resources. To help with this, I've written down what I consider to be the key points that separate the great engineers from the herd.

First and foremost it has to be the Love of the Game. Some people call this Passionate or Enthusiastic. Regardless of how you refer to it, you know it when you see it. When an engineer truly likes being an engineer, they exercise that passion whether they are getting paid for it or not. These are the people who light up when they have a chance to explain some nuance of a solution or problem they are working on. Even when polite company would have recognized that a topic was becoming to specific or technical and gracefully glossed over the details, an engineer of passion may just not care about the social graces and bore full steam ahead unconcerned.

The inverse of this is the engineer who has a job. The get enough tech talk at work and go to "training" when they are told they need to learn something new. Engineering pays their bills, if they could make as much money doing something else, they would. When you see someone who has had the same job for years and years, has worked with the same technology, on the same application or platform and doesn't see the need to change, recognize that they may be competent but they lack the potential for greatness.

An enthusiastic engineer naturally leads to a Self-Reliant engineer. When you love something you want to know all about it. You genuinely like that there is always something new to learn. With engineering, there is the added benefit that technology is always evolving. When their heart is in it, nobody has to tell an engineer how to keep up. They do it naturally, on their own. They know that the best way to learn is just to leap in and embrace it. They don't wait for someone to send them to training, they experiment and create of their own accord. When they come upon a new technology they don't wait for the explanation, they don't need to be taught, they just jump right in and learn.

The inverse of this is the engineer who constantly needs help. They need the complete manuals, they need training materials, and samples. If they are always talking about how difficult something is to understand because of the lack materials at their disposal, if they want to get trained before they embark with a new technology, they may be competent, but they lack the potential for greatness.

Engineers who are or can be great, seek to be Wise. Anyone who has learned to be self-reliant understands (even if only subconsciously) the difference between Wisdom and Knowledge. Knowledge is the set of facts, data, or concepts that can be learned, taught, understood. Wisdom is the application of knowledge. For most people, with experience comes wisdom. The more they attempt to apply their knowledge to the world, the more they the learn about which knowledge is meaningful and practical. Knowing what you need to know and how to identify what you don't know in a particular circumstance is the most useful thing to understand when faced with the new and interesting. It is this constant self-refinement and search for the application of knowledge which can easily lead engineers to be considered socially inept. Socializing is often about compensating for differences, and celebrating commonalities and trivialities. This is completely juxtaposed with the engineers pursuit of practicality and usefulness. Engineers who are great will be able to switch their communication style between the practical and the social when appropriate.

The inverse of this is the engineer who knows only for the sake of knowing. When the emphasis is on the tests they've passed or certifications they hold, you might take a closer look. If they can't focus quickly on the criteria for success (or risks of failure), or if they aren't objective about the usefulness of their new widget then they may be competent, but they lack the potential for greatness.

To really leverage these talents an engineer should be Diverse, they should have a wide Breadth. Even early in their career an engineer with great potential will find opportunities to jump from problem space to problem space. They will find that they need more than one toolset on one platform. They'll have experience in applying their knowledge to more than one type of opportunity or industry. Any engineer who is truly experienced, will resemble an onion with layer after layer of different experiences, most of which won't be covered by a resume. They will invariably be able to find parallels with their past experiences, and will constantly be remembering skills and aspects of their work that are applicable now but which weren't significant enough to write into their cover sheet. To a great engineer, the fact that they had to write a multithreaded performance test harness, or an attribute injection lex, or an exception word map isn't really important. It was the sum of the parts they delivered which was interesting. To them it is just an assumption that to get the end result they'll have to do all the other things in between. Many of these in-between problems are significant and meaningful in other contexts all by themselves.

The inverse of this the engineer who spends all their time in the parts or focused on one technology, platform, or industry. They know all about how to make NUnit do interesting things, but have never shipped anything. They know how to build data entry applications but have never concerned themselves with how the reporting system does what it does. That database guy who doesn't really know how the front-end works should give you pause. The UI guy who draws brilliant graphic but stays away from "the backend" may be competent, but they lack the potential for greatness.

A caveat with this last one is that we all have specialties. From time to time we all need a real pro at just one thing, and it can take time to truly master some aspects of engineering. The distinction isn't that they don't have a specialty, it is that they have branched out into all the supporting and complementary areas. If you want to truly master something technical you need to understand how it overlaps with, supports, or is supported by other technologies. An amazing looking UI that takes to long to boot up, or doesn't integrate seamlessly with its data providers will ultimately be useless. Likewise the most efficient library design is worthless if consuming engineers find it hard to use.

Being having these other attributes becomes less useful if the engineer isn't Social. To be valuable long-term they need be someone that people can work with and form relationships with. In any environment, Trust is essential to mitigating risks and allowing velocity to increase. Further, independent contributors without a sense of community or social responsibility will leave their biggest value on the table. It is one thing to be able to do a thing well, it is much more valuable to be able to teach others to do it equally well. Sometimes this is referred to as leadership or mentoring but ultimately it is about being able to inspire trust and earn rapport. Often this is a latent talent that can be spotted very early by contributions that person makes to the community at large. A willingness to be trusted, a desire to connect with others about their contributions are often signs of a valuable resource.

The inverse of this is the engineer who only works independently, has trouble establishing rapport or eliciting trust, and isn't interested in the contributors around them. If they don't see the value in community boards, hoard their specialized knowledge and aren't interested in teaching or mentoring, then you have some warning signs. The loner who solves hard problems but doesn't care to explain how and is less effective as part of a team may be competent, but they lack the potential for greatness.

An engineer with a majority of the previous traits will likely be Opinionated. Simply put, the pursuit of greatness requires an ability to recognize when things are not great. An engineer who doesn't have strong preferences and habits is neither going to be decisive nor efficient. Efficiencies are only capable when you can rely on habits, known patterns, and economies of scale. These things require some level of standardization and best practices in place. A key trait of someone with the potential for greatness is that while they may often be wrong, they are rarely in doubt. It is this confidence in their ability, proven by their experiences, backed with their reason and intellect that allows them to make progress where others have stalled, to act quickly while others are paralyzed. It isn't that they are rigid in their preferences and opinions, quite the opposite, they may change their course much more often than seems normal. Being able to have an opinion is important, so is being able to change or let that opinion go when appropriate. The best engineers can assimilate the opinions and preferences of others which allows them be more accurate in their reasoning, even on an unknown landscape.

The inverse of this is the engineer whose opinions are too rigid, who holds to standards and habits long after the need or advantage for change is apparent. If the mind is too closed, reason will inevitably fail. Consider the age of toolset the engineer chooses and the terminology they use. If you arbitrarily alter the assumptions in a problem space and witness a lot of discomfort or inability to change tactics and approach quickly then you should be cautious. An engineer who presents the same tools and approach to every problem may be very competent in that space, but they lack the potential for greatness.

This list is more a guide to potential. The wrong situation, personality fit, or environment can make a great engineer useless. A healthy environment can take someone with mediocre skills but strong potential and give them an avenue to be great. Of course, that's just been my experience, YMMV.

Hopefully this list can help you spot competent engineers if that is what you are looking for; they certainly have their uses. After all, everyone can't meet the standard of great. You don't have to staff your team or project or company with only great people. If you have competent people, and a few people with the capability to become great, then the right environment will allow their potential to be realized. If you can't afford the risk, get at least one great engineer, and let them find the other competent engineers to round out their team.

Wednesday, February 06, 2008

Just Walk 10 Feet

An experience at a hotel in the last couple of days prompted me to resurrect a topic that I find myself addressing over and over at client sites. When your business is service-based (sounds redundant, I know) you need to have someone who does nothing but put themselves in the perspective of the customer.

Let me explain.

Firstly, not all businesses are truly service businesses. Most are just transactional. You go into a convenience store you aren't exactly looking for service, you want some products at your convenience (hence the name). When you walk into Wal-Mart you know there is no such thing as service, they live almost exclusively in the space of Price. They just dump the DVDs in the bin because you'll dig through them for a low enough price. You rent a car based on price and maybe for a select few some intangibles like the reward program or convenience, etc. Airline tickets are price-sensitive and location specific. From time-to-time, the real travelers will discuss aspects of service (I like the Southwest attitude better!) but in reality we are driven by non-service factors. And the list goes on.

In a service-business, however, it matters How You Are Treated, and what the Experience offers. A good example would be a restaurant or hotel. Not fast-food, I'm talking sit-down, atmosphere, ambiance, etc. If it's too loud, you won't want to socialize there. If the waiter is abrupt or inattentive, you may not return.

The example that prompted today's rant was a hotel. When I checked in, I asked to be given access to the special floor which meant I would get to have free breakfast in the morning and appetizers at night. They also let me print for free, and a few other amenities like free bottled water. The nice lady checking me in, said they didn't have room on the floor, but she didn't bother to ask me if I just wanted into the lounge. Why the hell else would I want to be on a specific floor? Naturally, I want you to hook me up with the special key card! In reality, about half the time they charge me extra for it and I don't care, I want the service. But she didn't even offer. Just nope, you can't stay on that floor. So they miss out on a chance to make me happy (a very regular customer with options) or alternatively a chance to up-sell me to a higher rate. She just wasn't listening.

Once I'm in my room I take the stroll around and can't find the switch for the blackout shades. This is because some genius mounted it directly behind the lamp so that you can't see it until you are standing up against the wall actively looking. This would be the same wiring savant who put the only outlet for the desk directly behind the desk so you can't see it, and getting to it requires gymnastics. Who would think that someone using the desk might actually need to plug something in? What else do you use a desk for in this day and age? Crafting letters on the non-existent stationary?

This solitary desk outlet hidden in the nether regions behind the desk also has the lamp plugged into it. What traveler doesn't need a place to plug in their phone? Everyone has a phone, everyone needs to charge them over night. Except to have both the computer and the phone plugged in requires unplugging the lamp. This room layout is brilliant! Not one to be defeated so easily, I look around for a plug near the bed, but rather than place it near the night-stand, it's practically in the hallway so I have to lay the phone on the floor. Which means in the middle of the night I'm either going to A) trip over the cable and bang my head on the wall, or B) step on it and crack the screen, or C) all of the above. As somewhat of an overachiever, I chose C.

In the bathroom, which is stunning by the way, and huge, they have beautiful bordering on gorgeous marble floors. What they don't tell you is that marble is really flippin' slippery when it gets wet. In here though, someone at least tried to think ahead, they give you a two foot floor mat that you can lay down. You can either A) put it in front of the shower and then hope you are dry enough when you get the sink so you can brush your teeth without breaking your neck, or B) put it in front of the sink and then twist an ankle trying to leap out of the shower across the room onto a two foot square floor mat, or C) start in front of the shower and then shimmy it across the floor to the sink. Having gone to a good university, I naturally chose C again.

Back in the living room, the beautiful flat screen TV caught my eye. I don't really watch TV but it would be an expected ability to hook my computer up to it and watch a DVD later. No chance. Evidently the TV Gestapo is allowing no uncontrolled use of the display device and they've locked it down tighter than an Alabama tick. Why on earth would you disable a perfectly good display? What could possibly be gained by denying me access to something that costs you nothing and would increase my satisfaction? They are just missing the opportunities all over the place. They are making the Experience feel transactional, instead of like a service.

There are hotels that understand this distinction and I patronize and recommend them as much as possible. The inverse is also true.

The point of all this isn't (just) to rail on the short-comings of this particular hotel. What they missed is having someone who would walk into the room as if they were a customer and see what we see. Oh sure, we talk about being customer focused and so forth, and in truth this hotel normally does a great job with personal connection. But they weren't listening. They aren't listening. They haven't walked where I've walked. I don't think my expectations are very far out of line. I simply expect to be catered to and thought about, and I'm willing to pay for the privilege. Even if trade-offs have to made so I don't get what I want, at least make me feel you are listening. Give me insight into the why and options to change my experience. From time-to-time, we all have bad experiences, a big part of your reaction is How You Were Treated, not just what the Experience entailed.

Are you in service business? If so, how do ensure that what you think of as good service is the same thing your customers will think of as good service? Who in your organization is specifically chartered to represent the customer viewpoint? Are you relying on one of your core-values being Customer-Focused to handle this for you? You don't have to walk in my shoes, and you don't have to walk far. Just walk a little from my point of view. Ten feet or so ought to do it.