Sunday, May 25, 2008

Career path for programmers?

I just read an interesting post from one of the Java user groups I subscribe to (PinoyJUG to be exact). The question was "what is the career path from a software developer to CTO (Chief Technology Officer)?" Now that I've actually had some more time to reflect on the matter after sending in my reply, I'm going to repost it here with a few minor improvements.

Obviously, not everyone is destined to become a CTO (or even a CIO for that matter). From my experience, very few developers would even consider doing project management work since it detaches them from doing actual software development. In reality, career paths for software development personnel vary from company to company. Big companies normally have a pretty clear career path set, SME's usually just have it simpler, you're either a developer / systems analyst or a PM / CIO / CTO. From what I've seen so far though, this is what a typical career path from developer to CIO/CTO would look like:



From the diagram, the yellow rectangles represent roles that entail actual development work, while the blue rectangles represent management-oriented work.

Ok. Let's put things in perspective first. Why would someone want to work as a developer in the first place? Typically, it's because that person wants to do software development (obviously), experiment with the latest technologies, loves to solve programming problems, etc. So now the question becomes, after spending so much time being a developer / team leader, what's the next step for me? Where do I go from here? You have to bear in mind that this becomes the point in your career when you have to decide where you feel you will be more productive and happier. Do I want to take on a management role (i.e. become a PM) or do I want to stay where I can keep my hands dirty with actual software development work (remain a developer or advance to being an architect)? Happiness can mean different things to people. This is when HR has to listen carefully to the person being considered for a promotion to a management position. HR has to carefully determine whether or not a person is ready to manage people. Why? Because a management role will either make you or break you, and if it breaks you, it will have adverse consequences on a project as well as the company. That is why most big companies have new PM's go through management training and seminars/workshops first before they even get assigned to actual projects. Some companies have new PM's do apprenticeship work under Senior PM's in order to assess their capabilities and potential. Unfortunately, not all companies have the luxury of doing this.

Let's take a simple scenario: Joe developer has been recommended by his boss for promotion to a PM because of his consistently good performance. But does being a good programmer directly translate into being a good project manager? Remember that just because you have great programming kung-fu doesn't mean you can resolve squabbles between programmers bickering over non-programming issues. As a PM, people skills come into play when you are put in a management role. You will also find yourself becoming more and more detached from doing actual programming. You will become more preoccupied working out project schedules, coordinating with clients, coordinating with the development team, trying to manage the expectations of the project stakeholders. Making sure deadlines are met, planning for contingencies, trying to reduce and mitigate risks to the project, trying to control scope creep, trying to keep everybody informed in a timely fashion, etc. There's a lot more but I think you get the general idea. Now you have to ask yourself: Do you honestly think you will find this the challenge you are looking for in your career? Do you find yourself wanting to overcome the challenges mentioned above? Do you want to know what the bigger picture really is and how you can be part of its inner workings? Are you prepared to take on the responsibility of a project's success or failure? If the answer is yes, then you probably should take the plunge into management. Otherwise, either stick to being a programmer or consider advancing to the role of architect which is another challenging and exciting path. But remember, the role of architect is not just a fancy role with more pay. It share the same weight of responsibility with that of a PM. PM's and architects work hand-in-hand. The architect decides what technologies to use and how the system should be designed. So if the system architecture fails, the project fails. Also, becoming an architect is not a career dead-end because there are different fields of specialization as well. The certification path offered by Sun Microsystems offers a good idea of just what your options are as a Java developer.

If you're curious about what a program manager and portfolio manager is, there's a good primer from Techrepublic on the subject.

Also, if you're thinking that a CTO position still has something to do with actual programming, think again. It's a management position where one decides what technologies the company / enterprise should implement in order to meet its business goals.

So there you have it. Hope this helps explain why few developers ever become part of management.

2 comments:

reks said...

very informative...thanks,but what is the career path for a .NET developer?

Unknown said...

Hi reks,

.NET developers actually have a lot of options open for them despite what other people say. .NET is a really wide field that can give you many career paths to follow. It will also depend on what flavor of .NET you decide to focus on (language), what industry/programming field you want to become proficient in (banking, telecommunications, retail, gaming, mobile, web, etc.). Depending on where you work, you can also progress from developer to other roles such as team lead, analyst, architect, PM, etc... One of the downsides here is that you are most likely going to be confined to the Windows platform. But on the other hand, you can also use that to your advantage by becoming proficient in XML and EDI which can basically gives you access/exposure to different platforms (mainframes, blade systems, etc.)... In a nutshell, moving forward and progressing with your career all depends on just how much you want to learn new stuff and how hard you are willing to work to achieve your goals.