Saturday, May 10, 2008

When Fear Cripples Engineers

Recently, one of my colleagues applied to speak about Flex at a major local conference. Instead of receiving the standard form letter rejecting his submission, he received a polite Email telling him that his speech was declined because most of the conference attendees didn’t like Flash. Although my colleague was disappointed, we were only a little surprised. However, the subject of our conversation afterwards wasn’t the conference organizer. He was making a sound business decision based on what he believed would sell the most tickets. (By the way, after talking with some more of his peers, he changed his mind and the speech is now scheduled.)

Actually, the real subject of our conversation was on why engineers reject some technologies out of hand. It may come as a surprise to those who don’t work in our industry but for all that we’re supposed to be altruistically pursuing technical solutions to fairly abstract problems, the reality is that baser emotions like fear, laziness, and a desire for power play at least as large a role in the everyday life of a developer. Sure, objections to new ideas are wrapped in terms like “technical risk”, “unproven technologies”, and “vendor lock-in,” and sometimes the people using them mean exactly that and no more. However, equally as often, they’re used in place of real truths like, “I don’t know that new technology and I’m afraid to learn it,” or “I like being the only person in the building who knows this other technology.” In fact, the ugly truth is that egos in the engineering field can be every bit as large as they are in Hollywood.

I do not mean to imply that I’m somehow immune to the very same emotions. I’m not. However, feeling a certain way and letting to affect my behavior aren’t the same thing. For that reason, I’m going to post a few suggestions for anyone who is interested. These practices have helped me advance my career without compromising my integrity. Most of these should be obvious and none of them are new. (Somehow, that didn’t stop me or my co-workers from having to re-learn them the hard way.) And hey, if you’re perfect, you can still hang them on the wall as a subtle hint for that annoying other guy in your office.

  1. Know what you’re not willing to do – I wouldn’t exactly advertise these around the office but I do know which tasks I won’t do and why. I also know which tasks I would only do long enough to find another job. Some of them are technologies where I would never be better than mediocre. Some of them are technologies that I don’t believe will have a future regardless of what I read on the Internet. I also know that these are areas where my job could one day be at risk. However, nobody can be all things to all people. The key, in my opinion, is not to hide (or coddle) my weaknesses. Instead, I think it’s better to play to my strengths and work on the areas where I believe improvement will get me where I want to go in the future.

  2. Do not get emotionally attached to your code – I’ve lost count of the number of times I’ve seen people make bad technical decisions in order to protect code that they wrote. Ours is a creative industry. Creating new code is what we do. When we cling to existing code unnecessarily, it sometimes prevents us from trying entirely new and better ways of doing things. Of course, infinite refactoring is a slow road to failure too but don’t preserve code beyond its useful lifetime.

  3. Learn new skills constantly - In a field where change is the only constant, the secret to longevity is to be comfortable learning these new skills. This is easy to say but better way to measure this is to ask yourself a few questions. When was the last time you learned a new computer language? When was the last time you read a technical book? How about the last conference you attended? Life is of course that thing that happens to us all when we’re busy making plans. However, learning new skills helps to alleviate worries about when the next round of layoffs are going to occur.

  4. Being the new kid on the block builds character – Within the programs that I’ve worked on, I’ve nearly always become a local subject matter expert in a few areas. Admittedly, it feels good to have people come ask questions once in a while. However, that recognition vanishes the moment I transfer to a new group. This has generally proven to be a good thing. It helps to force me to stay on top of the facts and not rest on my laurels. Also, it reminds me regularly just how many other people out there are smarter than I am.

  5. Capitalize on uncertainty – Software projects regularly face uncertainty. Sometimes the customer doesn’t quite know what it is that they want. Sometimes funding can be uncertain. Occasionally companies are bought out or layoffs sweep through the office like a plague (with fear and superstition following in its wake I might add). During these times, I’ve noticed that many (perhaps even most) people withdraw. Productivity goes down and they’re afraid to make decisions. The words coming out of their mouth start to be all about their troubles and doubts. Learning to thrive in these instances is one of the big secrets to both personal and corporate success. All of the success books that talk about vision and commitment (and there are tons of them) are really geared toward how to handle these situations. The thing that still amazes me, even after a decade in the industry, is just how many people out there are determined to see failure and impending doom around every corner. Don’t be one of those people. Have I failed occasionally? Of course. In fact, one of the easier measures of success is to count the number of times you’ve failed and kept going. Successful people fail regularly. Unsuccessful people don’t seem to fail all that often. Instead, they quit attempting anything and just wait for someone else to tell them what to do.

  6. Dare to ask questions. The truth can withstand scrutiny. – My entire family seems to be genetically incapable of just sitting down and shutting up. Sometimes, (ok regularly,) this can get us into trouble. However, throughout college and my professional life, I’ve still noticed that there are classes and meetings where it seems like one or two people in the room are doing all of the talking and everyone else is sitting around trying to act like they know what’s going on. The funny thing is that when I’ve dared to show my ignorance by raising my hand and asking if someone could please explain the subject to me in small words, others in the room seemed relieved to have the explanation. I’ve also noticed that big words and lots of acronyms are regularly used as a substitute for actual understanding. In short, don’t be afraid to admit what you don’t know and don’t be put off by someone else asking tons of questions. The truth can stand up to questions, BS cannot.

  7. Teach others how to do your job – It is occasionally tempting to not share what you know with someone else. After all, if they can do your job, then why exactly would a company want to keep you? I’ve even seen people attempt to build a career around that premise. This usually resulted in more fear on the employee’s part instead of less. The fact is that companies cannot and should not live with a single point of failure for any length of time. Hoarding knowledge is a bad idea, no matter how smart it seems. The other fallacy with this idea is that success is a zero-sum game. (If someone else succeeds, it was only because you failed or vice-versa.) Actually, I (and many others) would say that long-term and lasting success is one of those things that you only get by giving away. Make others successful and you can’t help but succeed.

  8. Admit when you’re wrong – Ok, I’ll admit it. I hate doing this. More accurately, I hate making mistakes. Recently I made a bone-headed mistake that cost a couple of hundred dollars. What frustrated me more was the fact that I knew better and I still made the mistake. I suppose in the grand scheme of things it wasn’t too big of a deal. I even had a co-worker who suggested a way to cover it up. However, experience shows that this pretty much always backfires. Instead, I recommend going the other direction. If I’m the first to discover and admit my mistake, it usually eliminates about 90% of the grief that I would have gotten if someone else had announced it first.