My future survival guide for senior software developers, who work in medium to large companies, can be summed up as two advice: move to a technical leadership position and master mobile device (iPhone and/or Android) development. I believe that these advice will keep a senior software developer in demand for the near and distant future.
Be the technical liaison to avoid commoditization
The first advice requires you to modify your career path a little. As a senior developer, you command a high salary and thus, your job will be endangered when your company attempts to reduce expenses or to downsize. Sooner or later, you will be replaced by someone who will cost less, someone more junior, or more likely, someone in a foreign country working for a fraction of your salary. In the end, it will be the latter.
I hate to say it, software development is being commoditized. Along with that, software of average quality is becoming more acceptable to companies that are not willing to pay for the best. With the increasingly higher level languages and tools, the required programmer skill set is reduced. I imagine in the future, one can write a complex program by drawing boxes and linking them. Hey, that’s the way progress and capitalism works. We might not like it, but we should acknowledge reality.
You may be lucky to work in a great company that values your talent, recognizes that you are 10 or 100 times more productive than the average developer, and pays you accordingly. Or you may have some esoteric knowledge (Cobol?) which requires companies to keep you around, until a cheaper option appears (the Cobol application becomes obsolete due to a process change). However, I’m talking about the real world here and the majority of senior developers in the majority of companies are not so lucky.
In the early to mid 2000’s, when every other company was off-shoring development, I only saw one possible career change to secure my employment. That was to move into a higher level position which can be known by various names like technical leader, architect, or program manager. The goal is to become someone who is responsible for coordinating a team of developers, local or remote, to produce results. The more important goal is to learn how to communicate effectively with your non-technical leaders. The idea is that companies in the US will need at least one person locally who can work with remote teams of software developers to deliver something that can be sold or can fulfill a commitment to a customer. Someone who the higher-ups can talk to in-person who will give them that “everything is going good, you are still in control” feeling. Basically, a technical person who can keep the whole house of cards from falling down and the company from well, imploding.
In the above, I did not suggest people manager as a target role. I believe that being a manager will make you unsuitable as a technical liaison for a remote team. Not to mention, once a team is remote, they won’t need a manager locally. About seven years ago, I made the move from technical leader to development manager. (That is an adventure which I may blog about later.) Before you take this path, just understand that being a manager is different from being an individual developer. You don’t write code. If you are a manager and you spend a significant amount of your time writing code, then you are probably not doing a good job as a manager, or very unlikely (in my dreams), you are in a great supportive company with a team of happy, senior developers who are self-driven and great team players. Unfortunately, as a manager, without the practice of coding, you will find yourself getting rusty technically. And the stress of dealing with people and office politics will cause you to develop some nasty habits, such as not caring about high code quality anymore or worse, developing an abrasive personality.
A year and a half ago, I demoted myself back to individual contributor. I don’t regret being a manager. It was a great learning experience but managing people (to a certain extent) and participating in office politics (unfortunately mandatory for a manager) were not pleasant for me. That’s not to say that I sucked at being a manager. I read tons of books, tried out all the techniques (most of which didn’t work), and eventually became an effective manager (at least in my mind). I even pulled off a couple of successful political maneuvers. But though I could become more successful at it, I found it was on the whole, something I just didn’t want to do. Sometimes, managing is like dealing with kids and as my friend’s dad used to say, “I don’t hate kids; I just hate other people’s kids.”
Be mobile or get left in the dust
Recently, with the rise of mobile applications (for Android and iPhone), the need for experienced, senior developers will increase. Eventually, companies will require those mobile applications to do functions which their SDKs don’t easily support. In Android, though one can write in Java, eventually one will need to go down to the low-level C language layer to do more. Similarly with Apple iOS. At that point, companies will need a senior developer who understands all of the low-level complexities (pointers, stacks, heaps, memory management, network communication, etc.) and limitations (CPU and memory) in order to get the application to do what is needed.
The near future is the Indian Summer for senior developers. Just as web applications are conquering desktop applications (except complicated software like video editing and 3D games), mobile applications will conquer web applications. So the second advice is to learn and master either Android or iPhone development (or better yet, both). Join a company doing mobile applications. Work on a mobile app as a side project. Do whatever it takes to build up your expertise so that you can become a technical liaison for mobile development when it too becomes commoditized and off-shored.
An exception to the rule
The above advice only apply if you wish to remain an employee in a medium to large company. I believe that choosing the security and stability of a corporate job is perfectly fine; in fact, I’ve made this choice for most of my working life. If you have the talent and drive to work for yourself, as a contractor/consultant or building your own business, I think you should go for it. It’s probably the most future-proof route. However, if you wish to continue working for a company, I hope that the above advice will help you.
In an effort to simplify, I left a lot of nuance out of the above. I’ve learned that nuance is not necessary until people want it, and people won’t want it until they need it. But then I could be just talking nonsense about everything.