Archive for February 15th, 2009

Programming 4 Life

Sunday, February 15th, 2009

Three months into my current job, I had my performance review by my supervisor.  He gave me a glowing review and asked me what my career aspirations are, and where I see myself in 5 years.  He also alluded to the idea of developing more experience in a management role, and that taking baby steps would help transition my career into a “management” position later.

I told him then that for now, I’m focused on increasing my technical skills and that in 5 years I hope to be still be programming (although as a much better programmer than today). I wondered whether that was a good answer, or if that’s what I really wanted.

After all, being a manager means that you have people under you, working for you.  It’s a more prestigious title than being a developer, and usually comes with a nice pay bump.  Traditionally, moving into management equates to moving up the ladder.  Saying that you’re a “director”, “supervisor”, or “manager” totally garners more respect than to say that you’re just a developer.

Speaking purely from my love of programming and as a developer, I think I gave the right answer, and here’s why:

  1.  I don’t have any inclination to manage other people.  I would rather spend time writing code and getting better at programming than to learn how to juggle individuals’ personalities and idiosyncrasies.   I don’t want to create time-lines, charts, reports, and sit in hours upon hours of meetings.
  2. Titles are purely arbitrary and it’s easy to get caught up in them.  For $200 I can register a corporation and call myself a CEO.  Does that equate me to the CEO of Google?  Obviously not.  Will calling myself a CEO inflate my ego?  Maybe.
  3. Pay usually does follow the traditional structure of Boss > Supervisor > Grunt, but in some companies it doesn’t.  Look at some of the large and successful software companies that pays heavily for strong technical developers.  There are some places that offer career tracks for technical people that match or pay more than management positions.
  4. Management is not always a necessity.  A group of independent working developers  can manage themselves.
  5. The learning curve for management skills are not as steep as technical abilities.  Don’t get me wrong, being a good manager requires good “people sense”, but it seems like there is a point in skill where it is just “good enough”.  A bad manager may squeeze 25% productivity out of a team, a good enough manager 80%, and a great manager 90%.  But the difference between a poor developer and a great one may be 1000% worth of productivity.
  6. Extending the point above, managers are easier to replace than good developers.  A company may get by with a “good enough” manager, but some technological challenges cannot be overcome by mediocre developers.
  7. The demand for managers is much less than for developers, since the ratio of developers to managers should be greater than 1 (one would hope).
  8. A developer can fill in the role of management, but a manager cannot fill in the role of a developer.  The number of CEOs on the Fortune 100 list with a technical degree (engineering/computer science/etc) outnumber those with MBAs or some other business degree.  Bill Gates was a really good businessman, but he was also extremely technical.  Having the ability to detect technical BS is really important.
  9. Programming can be really fun.  Supervising people to make sure deadlines are met, that they are doing their jobs…etc… is not fun.  I’ve never met a manager hobbyist, but I know tons of programmer hobbyists.
  10. With technical skills, it’s much easier to develop and produce a product which you can sell and own.  Sure, some MBA in a suit can hire a team of developers to produce his vision… but that requires that you already have a lot of capital.  It’s hard to bootstrap a start-up without some technical skill.  Also, most of the failed dot-com companies were composed of MBA suits that paid to develop some product.

Having said all that, I really believe that it takes a lot of time and effort to become a really great programmer.  Peter Norvig gives a pretty compelling argument that it takes 10 years to become a good programmer, and that it’s worthwhile.  I would rather spend my time developing my technical skills than to distract myself with “people skills”.  I’m not trying to downplay managerial skills at all, as I think they are definitely valuable in themselves too.  But between deciding which direction I want my career to take, definitely keep me on the technical track.