While I have developed software in a variety of languages, I still mostly consider myself a Perl programmer. I've held a number of developer positions in the past 14 years, and my current title is 'Senior Design Engineer III'. As I begin to age, I find that my seat-of-the-pants approach to life may not have been very well-thought-out, and I wonder if some career planning might be beneficial, even at this late date. I have observed several career progression alternatives available to developers; I would welcome comments on the relative merits of these paths (or help in identifying others that I may have missed, since my experience is almost entirely within the context of large organizations).
- The Principal Engineer: If some knowledge is good, then expert knowledge must be better. I've seen a few of my mentors achieve this lofty position; in many organizations this is as high as you can go (in terms of prestige and salary) without being a manager. These people are usually given the really hard problems and are generally expert level in at least two languages. They spend almost all of their time developing and mentoring junior developers. Not a bad gig, if you can get it, but I'm not sure how well it pays. These guys are almost invariably introverts and are kept in back rooms for fear of a competitor luring them away.
- The Software Architect: This person is usually given oversight and responsibility for the larger, sweeping architectural decisions that are made for a department or working group. While they still get to code some, they spend a lot of time in meetings, ordering hardware, and writing design documents.
- The Development Manager: Often a senior developer with good people skills (now there's a rare breed!), this person is usually placed in charge of a small group (3-9) of developers and is responsible for making sure that the other developers actually contribute to the goals of the larger organization. Such positions rarely involve much day-to-day coding, whatever promises are made. This poor guy gets paid a little better than his direct-reports, but he goes to meetings at least half of the day. Some developers become managers of this kind because they are so sick of seeing this job done badly, and they need the money for their kids orthodontia.
- The Senior Staff Developer: Frequently a former Developer Manager, this person works at a high level (sometimes reporting directly to a VP) but usually manages less than 3 people (often because they discovered they didn't enjoy it). Frequently responsible for managing Vendor or third-party software, this job involves minimal coding, but can lead to a Director or VP promotion. I've only seen one or two people actually succeed in this role.
- The Senior Developer: Some people have the ability to be satisfied when they have risen to a certain level. While this role lacks the prestige of a 'Principal' developer, many programmers are very happy to continue coding without taking on additional responsibility, and they make do with small annual salaray increases. Such positions probably offer the highest proportion of actual development time, and avoid a lot of grief in terms of managing or even mentoring others.
- The Project Manager: Often a developer who is organized and can communicate effectively, this person is responsible for herding all the cats involved in a major development effort. Lacking much (or sometimes any) actual coding responsibility, the job requires technical credibility and acumen as well as considerable people skills. The kind of person who takes this job is someone who can enjoy the thrill of organizational accomplishment without actually serving as an individual contributor.
- The Entrepreneur: I've seen several developers launch out on their own (usually in company with someone who either has money or knows how to get it) and serve as CIO and office-boy for a startup firm. Most of those folks are back working for a more established company within a few years, but I keep hoping that someone's ship will come in.
Personally, I don't have much of a taste for the Project Manager or Development Manager options. I hate meetings and I am not sufficiently complex to vicariously enjoy the accomplishments of others whom I have enabled. I tried (and failed) on the Entrepreneur track. I guess I'm shooting for the Principal Developer role since no VPs have asked me to become their hired gun, and the Software Architect role just doesn't seem very cool to me.
Are there some I have missed? What kind of career path have other monks taken, and with what degrees of success?
Update: With a nod to Limiting my career path, I guess I am looking for a path that will still allow me to be a programmer, even if only in stealth mode. And although I've developed in Java, VB, COBOL, SQLWindows/Centura and dabbled in C, C++ and Assembler ... I still prefer Perl.
No good deed goes unpunished. -- (attributed to) Oscar Wilde