Programmer Career Middle Game
2017-01-17 - 1897 words, approximate reading time: 9 minutes
You’re a programmer about ten years into your career. You’ve worked on countless projects, watched teams do all the wrong things, watched teams do all the right things, and have been somewhere in middle most of the time. You still like making things, but are weary of solving the same problems yet again for someone else’s business. You’re good at your job and that’s why you find it boring sometimes. You’d like to have a bigger impact than just the specific lines of code you write.
I call this the developer mid-career plateau. Unless you’re ecstatic about every waking moment of your job, this far into your career at least one or two of the things in that last paragraph will ring true for you. This is natural and I think something we all go through. Most of my friends in the industry are at this stage of their career.
This post is not advice, and the word-choice and distinctions in the topics below are coloured by experiences and the people that happen to be in my network. In this post I’m going to list potential directions for you to go in, rather than recommend that you do one thing over another. There’s no right or wrong way to plan your career, as no one knows your priorities and goals better than you do.
Keep doing what you’re doing
One perfectly good option is to keep doing whatever it you happen to be doing. There are many benefits to being a line-of-business senior developer. You have an in-demand skill-set, and can focus on improving your technical skills further rather than learning completely new skills from scratch. You can expect a steady pay and don’t necessarily have to take on more responsibility than necessary. After a decade of this, you will strategies in place for dealing with ancillary problems like time management and so are probably at the most productive stage of your programming career.
There is much to envy in staying where you are, especially from the point of view of someone who has stepped into entrepreneurship or into a completely separate career path. Depending on what you want to get out of your career, there’s no shame whatsoever in staying where you are, being massively effective and getting paid accordingly. Consultant/freelancer
In my definition, a consultant or freelancer is someone that codes for money who is not a full-time employee. Your sales process may eventually allude to “value-based” pricing but you’re effectively a time and materials contractor.
The difference between this and being a full-time senior developer somewhere is stability. You may not always be in work, and so your rates need to reflect this. Some people I know who try this like the idea that they’re not implicitly obligated to stay with a single company for the long haul. Others spend for example, half of the year freelancing and spend the other half on the beach in Bali.
There is plenty of work for freelance web development programmers around. Your ability to get it will depend either on having a strong network or on having good enough marketing ability to get work through your presence among your potential clients or people that can refer them to you.
By this I mean someone that has a higher level of authority on their team in terms of making technical decisions and who thinks about how the systems an organisation is building interact with each other rather than the specific code in any one feature.
This is a great direction if you want to stay technical but also have a larger impact on the development teams you’re on. Depending on the details of the role, you will have a greater say in the norms and values of the team you’re on than if you were just a rank and file developer. You will have to think strategically on a monthly or even yearly timeline rather than the features assigned to you in a given sprint. The pay will probably be better. You’ll also be able to more easily put into practice the lessons you’ve learned in your career on somewhat less functional teams.
By CTO, I’m referring to the person that acts to facilitate collaboration between the development team and the rest of organisation. I’ve also heard this role labeled as “shit umbrella”. When the business drops a lot of a shit on the development team, it’s the role of the CTO to shield them from it and give them the information and resources they need to add value to the organisation.
As a CTO you will have the maximum impact possible in your organisation in an ostensibly technical role. It is however highly unlikely that you will be writing any code or involved in any day-to-day technical decisions.
If your goal is impact, then this is great direction for you to go in. It will involve dealing with people and understanding parts of the business that you have no expertise in. Just like in any organisation, it will probably involve a lot of politics. Experience as a full-time CTO will also prepare you for a lot of the other directions you might go in, including entrepreneurship or advisory roles.
Product management is a multi-disciplinary role, sometimes described as the “CEO of the Product”. It’s a role helped by understanding of business fundamentals, software project management techniques, a bit of programming, a lot of UX, and practical communication skills. You will be spending a lot of time getting people in line with a strategy or roadmap and seeing it through to completion.
Product management is a great role for former programmers, as they have a far better understanding of the technical implications of product decisions than non-programmers will. It will however require that you spend a lot of time improving your skills in other areas that will help you work with the impact of product decisions on the business and on the user.
Learning product management is a sidestep out of programming and into a form of management, and can lead to other non-technical career paths. It’s also a great primer for entrepreneurship, as it forces you to contend with business fundamentals in a way that a pure technical role won’t.
Starting your own business, be that an technical consultancy, a SaaS product, or a fish and chip shop, is probably the most difficult direction to go in on this list. It means completely shedding the stability of a steady pay in favour of an unknown future upside.
Most entrepreneur’s have no programming ability. In the right context, your technical skills are a superpower. The company you work at right now, either as a freelancer or as a full-time employer is that context. When you start your own business, you are no longer able to focus solely on your superpower, you have to build the context it operates in too.
Doing so requires an understanding and appreciation of the five major parts of any business: value creation, value delivery, marketing, finance, and sales. You’ve spent your entire career in one of these areas. You are entry-level in all the others. You need to get good enough at those other things that you can hire people to do those things for you.
One way of solving this problem would be to team up with co-founders. This increases your likelihood of success because you’re now able to play to your various strengths and support each other through the emotional ups and downs of running a business.
This is a great direction to go in if you value autonomy and building long-term economic advantages for yourself. It’s not a great option if you like stability.
There are many startups that have good business fundamentals but have no idea where to start when it comes to building software. Startups often trade a bit of equity or a monthly fee for regular access to an advisor, typically with some specialist knowledge or experience.
Your experience is probably useful to early or seed-stage startups. Having someone with technical experience to help guide the development of their software is valuable to them. If you can help with high-level architecture, hiring, and building a positive engineering culture, you’re worth whatever they’re paying you.
These engagements typically take a day or two per month of your time. Depending on how you’re compensated, this might be a good source of income or expose you to a small upside in startups. The latter may work well if you have such an arrangement with five to ten startups. This is a great direction to go in if you want to simultaneously build your network and get exposure to a number of problem domains without having to spend every waking moment at one particular company. It allows you to make the good judgement you’ve developed over the years available for others, and therefore potentially makes a larger impact than if you were working at just one company.
By a specialist, I’m referring to someone that has niched down into a specific technical expertise. This is usually less to do with programming language or framework and more to do with a specific technical application. Examples might be computer graphics, information retrieval, natural language processing, cryptography, compiler design/PL theory, bioinformatics, or machine learning.
By specialising in a hard technical topic, you make a number of career avenues available to you. You might find a full-time job were your particular skill set is in demand. You might find it more appropriate to set up as a consultant or freelancer in your niche, which can end up being far more lucrative than a freelance line of business web developer. You may go an extra step and set up a consulting practice focusing on that niche.
This direction is good if you want to double down on your technical skills and become known as an expert in a specific field. It is a solid career choice, as your skills will be in greater demand and that gives you a degree of autonomy you otherwise wouldn’t have.
Leaving the industry
At some point, you may feel like you’ve spent a bit too much of your life looking at dark screens filled with coloured text. Many programmers feel an urge to stop doing programming as their main source of income and move completely to another industry focus. I know of only a few people who’ve done this but they seem to be happy about their decision. Software touches everything, so it’s unlikely you will be able to completely escape computers.
This is the only direction you have if you’re tired of doing software-related things for money, but it’s one you should seriously consider if you don’t feel a career in this industry will make you happy.
I don’t have any concrete answers about what you should or shouldn’t do later in your career as a developer. I’m still trying to navigate this particular jungle myself. Most of my friends in the industry are in the same place.
We’re all doing bits and pieces of things I’ve described above. We might do a bit of consulting, work as a CTO for a few years, then try our hand at running a business. That’s what a modern career around building software looks like.Home