The ugly unfortunate truth that many programmers don't want to face is that many programming careers have a peak and an inevitable decline. Eventually it will get harder to find and keep a job as a programmer. For many, they find out this truth unprepared and flat footed. Today, we are going to cover essential career information you should be thinking about so you can be prepared.
TechCrunch wrote "Silicon Valley's Dark Secret: It's All About Age", which refers to a study that found the effective career timespan for a programmer is limited. The questions this raises are existential and serious.
Everyone kind of knows that eventually programmers can turn into managers or leaders. But many programmers don't understand the expectations and job requirements of being a manager. Sure, we all have managers, but what does it mean to be a manager? What is expected? And what is the difference between a mid-level manager and a senior leader?
In this blog post, I'd like to pull back the curtain and show a potential career path from the beginning of a technical career as a Junior Programmer to the apex as a CTO.
Note: Many great careers stop at different points of the ladder and stay there through retirement. Some careers even skip rungs of the ladder. But management and leadership roles are not a fit for everyone, and you might find that your interest in management changes over the years. In your 20's you might hate the idea of being a manager, but in your 40's you might hate the idea of writing any more code. It is difficult to predict. However, it is always good to know and understand your options and their consequences.
Below is a visual representation of the career opportunities for a programmer with average pay ranges. Note that there are some people making double or triple this much money being a programmer in certain verticals (banking, trading, etc.) so these numbers only represent an average range, not the full spectrum.
When you are starting out in your programming career, it can be daunting and frustrating. Some days you feel out of your depth, unsure of how anyone could possibly write big complex applications. And then on other days, you wonder why you haven't been promoted to Senior Developer yet. You look at other more senior developers and think that you do basically the same work as they do.
But the earmark of a junior developer is lack of experience. Even the smartest and fastest learning junior developers have not been exposed to enough code or edge cases to have the wisdom of a senior developer. In programming terms, one form of wisdom is known as software design patterns. Though you can read books on patterns, you need to write enough bad code in your career that breaks things and fails to truly and deeply understand the value of software patterns.
A senior developer is the typical role for people who get really good at building whole applications at scale. Much of a programmers career can be spent as a senior developer. In fact if you hate doing management and you just love to code, you may be a senior developer for all of your career. I have hired many senior developers of all ages, but this is also the role that gets harder to compete with as you get older.
This role can also be a jumping off point for another rung on the ladder. Once you understand technology well enough to be a senior developer, you likely already have the technical know-how to be a technical founder or CTO of a startup. Being a founder or CTO at a startup involves a lot less coding and a lot more people skills. However a deep technical knowledge goes a long way and is essential to doing a good job in these roles.
If after 7+ years of programming, if you know that management is not your thing, being an architect is the highest rank left on the technical career ladder. Architects sometimes write code, but more often they design complex systems that will be implemented by teams of senior and junior developers. An architect's job is to use his technical wisdom earned after years of experience (leaning programming patterns and anti-patterns) to create the structure for a successful software project. As new requirements come in, a software architect needs to know the right ways to build and scale all different kinds of applications.
A lead developer is a senior developer that other junior and senior developers look to for guidance and direction. Though lead developers usually don't usually hire or fire programmers, they do a lot of similar work to managers. They co-ordinate what work needs to be done and are the decision makers for implementation decisions while writing code.
Management is the traditional next rung up the ladder for engineers. There are different focuses for management. If you love keeping track of work-streams and are detail obsessed, then being a project manager is right up your ally. If you obsess about features and product enhancements, then being a product manager is a strong fit.
However the most common manager that a programmer turns into is a developer manager. The typical role of the developer manager is to mediate the needs of the product manager and project manager with the personalities of the development team. This role requires strong people skills, talent at mediating conflicts, and frequently acting like the group shrink. The developer manager's job is not just to hire, but also to fire the developers when needed. This means it is hard to be friends with them. Being friends puts you in awkward positions. If you have ever known someone who became the developer manager of a team he used to be a developer on, you know that they seem to change almost overnight. This is why. It is a hard job, and often a thankless one.
But it can also be very rewarding to lead a team to victory. If you want to buff up your leadership skills in preparation for a management role, read Phil Jackson's book.
The obvious difference between a mid-level manager and a senior leader is that senior leaders are in charge of mid-level managers. However, managers often don't need to be managed. They need to be led. Mid-Level Managers need to know the high-level orientation they need to drive in, not be given turn-by-turn directions.
A senior leader's job is to make high level decisions and inspire their workforce to go along with those decisions, to believe in the mission.
The higher up the ladder you climb, the less you will end up programming. At the top, it is all about people. Mid-Level Managers still get to have fun dipping their toes in the guts of technology, for a Senior Leader must spend all of his or her time focused on people issues: inspiring, motivating, leading, and strategizing. If you do write code, it is often just side projects (unless you are Bill Gates, but almost nobody is Bill Gates, he's an extreme outlier). Phil Jackson's book is required reading at this level, not just a nice to have.
The job as a senior leader is to make sure that everyone at the entire company is rowing in the same direction, making sure that direction leads to dry land, and making sure everyone knows why they are rowing that direction. It is a deceivingly difficult job. It is fraught with peril, heartache and booby traps. If you are up to the task, read "The Hard Thing About Hard Things" by Ben Horowitz.
Senior leaders are never born naturally. They are made. It takes practice to be good about it. Read Ben Horowitz's blog about Making Yourself a CEO for some examples of this.
The opportunities for programmers today are rich and plentiful. And programmers are in higher demand now than any time in history. It is truly a great time to be a programmer. But it is never too early to be planning your career. I hope this post gave you some guidance and food for thought that might come in handy.