Friday, May 12, 2017

Lessons from a Lengthy Career Masquerading as Career Advice

“It is part of the human condition that we are statistically punished for rewarding others and rewarded for punishing them.”
Danny Kahneman. Nobel acceptance speech, 2002.

“In the long run we are all dead. Economists set themselves too easy, too useless a task, if in tempestuous seasons they can only tell us, that when the storm is long past, the ocean is flat again.”
John Maynard Keynes. A Tract on Monetary Reform.

“I feel like a frozen steak thrown on a hot grill. I feel nothing, but suffer anyway.”
Francois Cluzet. The Intouchables.

Hindsight is 20/20. I didn't know any of this as I was going through the experience. You won't either.

It would be fair to say that I'm proud of my thirty five year career in the computer industry. I've had the pleasure of working with thousands of brilliant people and, thankfully, have learned a little bit from each of them.

I was a sophomore in college before I took my first computer science class, at the recommendation of an uncle who thought “this computer stuff is gonna be big.” At the time, I was studying psychology. I have no idea why. It was the best I could think of for a major when I entered college. I was still only fifteen at the time and had no freaking idea what I wanted to do with my life. I was breezing through college and was completely bored with psychology. It seemed like mental masturbation: just putting labels on people and on sets of vague symptoms. The fact that a single mental patient, when visited by five psychologists, will walk away with six diagnoses, is sufficient proof that psychology is more an art than a science.

In the midst of all this, my first computer science class was a revelation. What? You mean there's only one right answer to the problem? You mean the computer will do exactly what I tell it to do? And if the code doesn't work, the problem is likely to be my own damn fault? Fuck, yeah! Here's a world that was much more satisfying than the vague world of psychology. So I did what every decent sixteen year old would do. I declared double major: Psychology and Computer Science. What the hell do those two topics have to do with each other? Nothing really. I just happened to have already taken most of the classes I needed for a bachelor’s degree in Psychology and wasn't about to just give up on that!  In the end, I graduated at seventeen with both degrees and entered the workforce.

Funny enough, having now managed thousands of people and worked with tens of thousands of others, I find myself remembering many lessons from those psychology classes. Now they make sense, now that I've seen dozens of examples of each symptom. Back then, I had no context. I hadn't experienced enough of life to have a frame of reference. As such, the concepts seemed just like a bunch of empty words.

At the time, I was a starving foreign student on an F-1 visa and my only path to permanent residency was to get an employer to apply for a green card for me. But here’s the catch. You can only work for a year after graduation on what is called “Practical Training” in the US. If you do a great job during that year, your employer applies for you, you get an H-1B visa which is then a path to a green card, citizenship, and the rest of the American Dream. If that doesn't happen, you're out of luck and you go back to your country of origin. I was not interested in going back to a country suffering through revolutionary turmoil and a pointless war.

So I desperately needed a job and a sponsor. I ended up taking a job at my local state university as a Computer Science lab manager. What a bizarre job for someone trying to break into the industry as a software developer. Well, that's the best I could do at the time. This is 1982 we’re talking about, after all. Height of the Iran hostage mania, the Iran-Iraq war, the oil crisis, and all that.

I won't bore you with the details. It was not a pretty picture. Here I was, fresh out of classes programming the latest model PDP-11 and Unix, having done Artificial Intelligence classes writing code in LISP and Prolog, having studied heady theoretical automata theory... and you want me to do what? Load these trays of cards into this 1960’s IBM card punch reader and change dishwasher sized disks on aging VAX systems? And this will get me a green card? Okay, I'm game. What the hell.

It's only now, thirty five years later and a million miles away, that I'm actually thankful for having gotten to experience an entire generation of computing. One that was dying, for sure, but also one that allows me to contrast today's world even more starkly with where we were, just a few years ago.

Just think about it. Any kid can pick up a smartphone or tablet today, type in a question, and get an instantaneous answer to any question. Wow. Just fucking wow. Back in my day (can you hear the violin playing in the background?), we still had to go to the public library and use printed index cards to find reference books. Do we even realize how far our world has come in just the past few decades? Fast forward fifty years, at the exponential rate we have been experiencing, and you will see how far we will go. I'm an optimist about the future if only because I've seen how fast this industry can move in the long run.

Don't get me wrong. In the short term, it's nothing but frustration and tedium, bureaucracy and cat fights, bug fixes and meetings. But in the long run, oh my god! Just take a big step back and look at how dramatically we have changed the human experience in just the past ten or twenty years. I am a child of the sixties and seventies raised partly in a third world country. I still remember having to go to the national phone company office downtown in order to make an International phone call. Today, anyone can connect with anyone anywhere on the planet instantly through voice, video, email, and social media. Holy crap. Now that's progress.

Of course, I didn't understand any of this at the time. I was just struggling to keep up with some of the best folks in the industry. It’s only now that I see the consummation of all those things we worked for over many years: the networking and security standards, the operating system platforms and ecosystems, the advances in usability and interoperability, reliability and scalability. I still have trouble getting my iPhone to work with Google Play when I visit a friend’s home but we can choose from thousands of movies, millions of songs, and dozens of shared experiences whether we’re in the same room or halfway across the world. Now that’s progress and we all had a hand in it. It’s only when you take a giant step backwards and see that impact our industry has had, as a whole, on humanity that you can feel happy about your contributions.

It took me three or four tries, at half baked startups and mediocre companies, to finally end up at a company where I could work on something I was passionate about. I spent a few years writing device drivers on Sun workstations, then did a lot of Unix kernel work at a multiprocessor high end server company. I got to work with every architecture from Motorola to MIPS to PowerPC, writing system components, device drivers, low level kernel code, system bring up, even soldering parts on the factory floor when needed.

I eventually made my way to the west coast and spent several years at MIPS and Silicon Graphics working on high end server systems. At its height, I worked on several supercomputer projects at Silicon Graphics. When I tell people that, they immediately say: “Ah, Jurassic Park!” Well, yes. But we also worked on supercomputers that competed directly with Cray Research for supremacy in the (then highly competitive) supercomputing world. Those were the heady days when I learned everything about computer architecture from the processor all the way up to operating systems and system software in general.

I seem to have worked on a lot of dead system architectures. Supercomputers, UNIX workstations, shared memory architectures. All architectures that have mostly fallen by the wayside as the world has embraced personal computing, the cloud, and distributed computing. I used to fret about this. Why was I always working on these herculean projects only to find out a few years later that a competitor had completely rethought the problem space and come up with a new generation of computing to address it? It was only later that I realized: that’s probably true for almost everyone out there. Every architecture dies out sooner or later. That’s just the way this industry works. I’ve worked on many revolutionary projects - revolutionary when I was working on them - and every one of them has sooner or later been retired to the dustbin of history. Thankfully, each generation learns from the mistakes of the past.

In the process, I also got an opportunity to work with some of the brightest minds in the industry and learn from them. The most important lessons took me years to learn. I was the angry young engineer who quit when my PowerPC based project at NeXT was canned. Steve Jobs tried to keep me at the company but I was too hot headed and angry to realize that he had made the right call. He had realized that the battle over processor architectures had ended. It made no sense to compete with Intel by building a PowerPC based system. He completely killed all Hardware projects at NeXT and gave the company a software-only focus. I, of course, stormed out the door. Because he had dared to cancel my project! I was too busy looking at the trees in front of me to see the forest. The processor war was over. The answer was to move up the stack and innovate in software, not to keep fighting the processor war for an ever-shrinking slice of the market. Of course, he then returned to Apple with the NeXT team intact and the rest is history. That's what I mean when I say the hardest lessons take years to internalize. Hindsight is 20/20. I wasn't thinking at that level. I was too emotional about the project I’d just spent so much time and effort on. I couldn’t be bothered to take a step back and look at the bigger picture. What I learned from Steve, later - much later, after I had cooled down - was to fight the right battles. Don't keep fighting the battle if the war has already been lost.

Later, I spent a dozen years at Microsoft working on various versions of Windows. Now that you look back on it, you know that Windows lost the PC operating system war and the mobile phone war to Apple, the server war to Linux, and the cloud war to Amazon. Back then, we were too busy pumping out versions of Windows to realize that. It's so hard to put into words the amount of organizational inertia that goes into an engineering team responsible for a successful platform being used by billions of people. They almost never see the disruption coming at them. Or if the leaders do, the rank and file don't. Most of them are too busy pushing the current rock up the mountain.

This is not a complaint about the leadership of Windows or of Microsoft. By the end, I was one of those “leaders”, responsible for all core development in Windows 7. I’m proud of what we did as a team - even with all the warts it entailed. What I learned from Microsoft was how hard it is to build a successful platform that is used by billions of people, millions of apps, and thousands of companies. The more open you make it, the more programmable you make it, the more people that build stuff around it, the harder it is to innovate on that platform later.

What I learned from Bill Gates was an amazing attention to detail. The man could sit through fourteen hours of non-stop meetings where one team after another would prance through, covering topics as divergent as operating systems, productivity apps, the internet, watches, games, research, email, databases, browsers - you name it. He could drill down into the details with the best of them. Impressive mental capacity. What I learned from Bill later, at a distance, was that he was also a decent human being. He could take that brain and apply it to solving much harder problems - education, poverty, disease.

I can sit here and write yarns about what I learned from each of the smart people I've worked with over the years. That would take far more time than either you or I have and take up more pages than either of us would care to read - or write. More importantly, it won't mean much unless you experience it for yourself. Most lessons are lost on us until it's too late for them to have an impact. What I can tell you as a piece of career advice is to work on things you care about. As long as you’re learning, keep at it. There is so much to learn and this industry moves so quickly that you will fall behind if you stop running even for an instant. As long as you're running in the right general direction, I used to tell people, it's all good. Don't try to plan out your entire road trip from New York to LA before you start out. Just make sure you're moving in a generally westerly direction, keep running. And keep learning. You'll eventually end up in the right place; and you'll have a lot of fun on the way.

Update: I guess I wasn't quite done with this topic. I received several comments on this blog post, all of them positive. Thanks for reading and thanks for commenting. Someone asked why I had neglected to mention "the team" as a motivating factor for sticking around at a job. Isn't that just as important? In fact, isn't it a little self-centered to worry only about whether you're learning on the job?

Yes, of course the team is important. I've enjoyed working with some very strong teams. I've worked on teams with amazingly strong leaders who intellectually challenged their teams, showed them a crisp clear vision to follow, and worked alongside them in the trenches to reach that goal. I've also worked on teams that were ensemble casts, no single member significantly stronger or weaker than the others and yet each an expert in a part of the problem space. When a team really gels, it can do amazing things that no individual team member could have dreamed of accomplishing on their own.

But "the team" is a double edged sword. The same dynamics that make a team strong are also the ones that can tear it apart. Once a team turns negative, either because some team member is unhappy and dragging everyone else down or because the team is demotivated as the company struggles in the marketplace, it's hard to get momentum back and re-energize the team. I've seen very few teams come back from such death spirals.

So, what's the one factor that keeps a team positive, all marching towards the same goal? I've found, for me, that one thing is learning. As long as each team member feels he or she is learning a new skill, there is harmony and progress. As soon as someone feels their time is being wasted and they're not learning on the job, either because there is too much bureaucracy or because the leadership won't listen to their concerns or because they feel others aren't pulling their weight, they start sabotaging the overall team goal. Either they start complaining and gossiping or they quit in disgust and make everyone else's job so much harder. Or worse. They stick around and make matters even worse. Believe me, I've been there - and it ain't pretty.

When I think back to all the companies I've worked for, all the teams I've worked with, and all the projects I've worked on, I ask myself: When was I happy? When I felt I was learning something new. Translation: Leaders should push team members beyond their comfort zones, push them to learn new skills, new technologies, new frameworks, some new part of the business. As long as they are learning something new, they will be happy. As long as they are happy, they will be positive. As long as they are positive, the team is more cohesive and successful. So it's not just about "the team" but about how you motivate that team. It's only if they have to sit in the same boring meetings every week listening to the same boring agenda, reviewing the same five metrics, fixing the same bugs, filling out the same forms that they will turn negative on you. You're not challenging them enough mentally.

The answer may be different for you. Perhaps you're staying in your current job because you need a paycheck every week or can't find another job. I've been there. I know. It's not fun. Here's the only advice I can give you: Don't run away from things. Run towards something. Don’t run away from problems at your current job. Run towards something you’re passionate about. Chances are that the grass is not greener on the other side and that the new company will have many of the same problems you have in your old job. Every time I've changed jobs because I was fed up with a company - for whatever legitimate or imaginary reason - and ended up taking a job for the wrong reasons (more money, bigger title, you name it), I ended up regretting the decision. Every time I took a job because I was damn impressed by the people I talked to, I thought the team was strong, I thought the technology was cool, I thought I could learn something in the process, I ended up happy - both then and later when I’ve looked back on the experience.

1 comment:

  1. Totally concur. The last paragraph above consummately sums it up.