There are many career paths you can choose as a software developer.
And—just like a video game—there are paths within paths.
Where you ultimately end up in your software development career will be determined by the particular paths you choose.
Choose the wrong path and you’ll end up a Kobold writing COBOL for the rest of your life.
Choose the right path and you just might become a white wizard or architect, living in your ivory tower and bestowing edicts from on high.
Ok, maybe it’s not quite like that.
But your career path choices do make a difference; they really do matter.
Too many beginner programmers never take the time to consider what their actual career paths are and to deliberately choose which path and which guild they want to join.
Instead, they just stand on the side roads shouting, “looking for a group,” and join any band of adventurers to come their way who will have them.
This post is all about making a conscious choice about which career path you want to pursue as a software developer, and that begins with enumerating your options.
The Three Types Of Software Developers
I classify software developers, at the highest level, into three broad categories.
You are probably not used to thinking about software developers and software development in terms of these three categories because you might only really consider the largest of the three, where most software developers fall.
But, if we want to look at an exhaustive list of the software development career paths, we’ve got to start here.
With that said, here are the three broad categories of software developers:
- Career Developers (most common)
- Freelancers (hired guns)
- Entreprogrammers (programmer/entrepreneur hybrids)
Let’s talk about each briefly.
First, we have the career developers.
In fact, most of my posts are focused on career developers. And it’s who we are going to be mostly focusing on in this post.
The reason is simple: most programmers either are, or at some point in their career were or will be, career developers.
A career developer, according to my definition, is a software developer who has a regular job working for someone else and getting a regular paycheck.
Most career developers want to work for a company they like, get promoted within that company, perhaps switch companies from time to time, make a good salary, and then perhaps retire some day.
Nothing wrong with this path. Like I said, it’s the default.
Next up, we have the freelancer.
We talked about what a freelancer is in the last chapter, so I won’t rehash it too much here.
Essentially, a freelancer is a software developer who works on their own, not owing allegiance to any particular company, instead choosing to operate as a hired gun and doing work for whatever client they choose to work for.
We won’t cover that career path in this chapter, since we already talked about it earlier, and the freelancing career path really deserves its own book.
Finally, we’ve got the kind of software developer who is most near and dear to my heart, since I am one of them, the entreprogrammer, or the software developer entrepreneur, developerneur if you will.
This career path is different than being a freelancer because instead of using your software development skills to do work for someone else, you use them to create your own product or offering and sell that product or offering directly to clients.
This could be writing your own application that you sell, creating training videos or tutorials, blogging, writing, heck, even making music about your craft, and somehow making enough money from all that to put some macaroni and cheese on the dinner table each night.
We’re not going to talk about that career path in this chapter, since, again, we really need a whole book to discuss how to be an entreprogrammer and we touched on the basics in another post.
Career Developer Options
What follows next is what I think are the broad specializations you can pick as a software developer.
Note: This is not the same thing as the specializations I talked about in the post, Generalist vs. Specialist. The specializations in this post are far too broad.
Think of these specializations, which we will call options in order to limit confusion, as very high-level career paths you can choose to go down, in a technical sense, as a software developer.
To be clear, these options are not exclusive to career developers. Any kind of developer is going to have to choose one of these career paths.
You can pick multiple paths—you can “dual class”—but you should at least pick one.
This is probably the largest class of software developers today.
Most software developers are web developers, or at least do some web development work.
As a web developer, you… well, make web applications. Surprise!
As a web developer, you can work on the front-end and make things pretty, you can work on the back-end and make things work, or you can work on both and be an amazing, magical sort of web development unicorn—especially if you have some web design chops as well.
Typically web developers who can do it all, perhaps with the exception of web design, are called “full stack developers” since they develop on the full stack of web development technologies: front-end, middleware, backend (User interface, business logic, database).
Apps man, apps are where it’s at!
There is an app for that, you know.
Today, more and more software developers are choosing to become mobile developers, developing mobile applications for phones, tablets, even app-enabled TVs or wearable devices.
App development provides some exciting opportunities as a software developer because more and more apps are coming out each year.
Just about every company needs a mobile app nowadays—and maybe even more than one.
Software developers often write me to ask if desktop software development still exists.
I find this fantastical because most of the time they typed that email from a computer running a desktop program—granted, it’s usually a web browser, but it’s still a DESKTOP program.
In fact, how do you write your code and compile it?
Most of us use desktop based IDEs, although cloud IDEs are getting more and more popular.
Ok, fine! I’ll admit it, it’s not looking good for desktop developers.
Are you happy? I said it.
But, in reality, I think there will always be at least some need for software developers who write applications that run directly on the PC.
I could be wrong, but at least for now, this is a viable career choice, just not a highly popular one.
Yes, I know you want to be a video game developer.
Yes, I do, too.
That’s why I got into software development.
But instead of actually becoming a video game developer, I started programming printers, wrote a bunch of web applications, made some mobile apps, did a bunch of other things, and ended up writing books that drip with sarcasm and making a bunch of YouTube videos about how to pick up girls as a software developer.
Life is not always what you expect.
But, in all seriousness, this is a viable career option. It’s just a difficult one with lots of competition, long hours working on video games, and well, I guess that’s all the downsides I can think of.
Damn, I should have gone down this route.
Go down this path—do it!
Ok, this doesn’t sound very lucrative or cool, but trust me, it is.
I was once an embedded systems developer making… printers!
Say it with me.
Say it with excitement!
EMBEDDED SYSTEMS ROCK!
You rock, baby!
Ok, it’s not glamorous, but guess what, the refrigerator that just made that ice in the glass you are drinking out of… it’s got brains in it.
Everything has brains in it nowadays.
And someone’s got to write those brains.
And that someone could be YOU.
Embedded systems developers work on mostly real-time operating systems, which run inside of electronics, hence the name embedded systems—clever, I know.
It’s a good career choice because it’s in high demand and it requires specialized skill sets, which are highly valuable.
Some of the most difficult work I’ve ever done as a software developer has involved troubleshooting really hairy timing issues on embedded systems’ programs.
This one is a fairly new career path but is appearing to be one of the most lucrative ones.
What exactly does a data scientist do?
No one really knows… I think it has something to do with “big data.”
In all seriousness though, data science is a huge and fast-growing area that software developers can go into, especially if they want to make the big bucks.
A data scientist utilizes skills and technologies from several different fields to take large amounts of data, make sense of it, and draw conclusions and predictions.
Data scientists often utilize their programming skills to write custom programs to extract, manipulate, and reorganize data in order to represent it in a digestible way.
With the ever-growing amount of data, data science definitely holds some interesting possibilities.
Tools and Enterprise
Many software developers don’t actually create software that is commercially published and sold or used inside a product that is commercially sold. Instead, they create tools to be used within an organization or internal applications.
I actually find tools development to be extremely interesting and rewarding because when you build an effective tool that helps your team or another team do their job better, the effect can be very noticeable.
Enterprise development can be very challenging and requires a unique set of abilities and knowledge since enterprise developers often have to have a deep understanding of the organization and the political factions which shape how software is crafted.
Cloud development is also a fairly new field, but also rapidly growing as more and more applications move to the cloud and a distributed model.
Most cloud applications are also web applications, but they don’t necessarily have to be.
Cloud developers need to understand how the cloud works, especially in regards to scalability and availability.
With cloud IDEs, you can even be a cloud developer developing in the cloud.
It’s a pretty amazing feeling when you watch an automated test you wrote run and automatically fill out fields in an application, click buttons, navigate around the app, and verify the results.
Test automation is fun.
I love it.
Not only is it fun, but it’s rapidly expanding and in very high demand.
There is a serious lack of talented software developers who understand the proper way to create automation frameworks and write automated tests to test other software.
A software developer who focuses on test automation builds tools for automating the testing of applications and writes automated tests to execute and verify functionality.
Test automation can be extremely challenging and complex because it essentially requires you to write an application to test another application.
But, like I said, I think it’s pretty fun.
Advancing Beyond the Glass Ceiling
In general, you’ll find that even though you’ve picked a specific class of software developer to become—or perhaps more than one—you’ll eventually hit what is known as the “glass ceiling.”
This glass ceiling is the practical limit on how far you can advance or how much you can get paid as a software developer.
It doesn’t matter how good you are, there is a point where you reach the top and you can’t really advance any further.
But, there are ways around—or through—this glass ceiling.
First, you can choose to stop working for someone else.
As a freelancer, your glass ceiling is much higher, although there is still a practical limit on how much you can make as a freelancer since you still have to trade hours for dollars.
As an entrepreneur, it’s completely uncapped, but you could also make zero dollars or negative dollars.
Either of those choices are viable paths that can take you through that glass ceiling.
If you want to stay a career developer, you can invest heavily in your personal brand and marketing yourself, and you may be able to find a company which will pay you significantly more than average just because of your reputation.
But, there is another way…
You can look for a large corporation to join and go down either a management or technical track.
Management or Technical?
Most smaller or medium-sized companies have a practical limit on upward mobility.
As a software developer, you just can’t get any higher than the highest level they have, which might not be that high at all.
But at large corporations like Microsoft, Apple, IBM, Google, Facebook, HP, and others, the ceilings can be much higher.
These kinds of companies often want the very best technical people available, so they create special technical tracks to incorporate them.
Usually, these kinds of large companies either have a technical or a management track for advancement.
You’ll have to choose if you want to go down the management road and leave behind your coding skills, or the technical track and keep on coding until they tell you you just can’t code no more.
If you choose the management track, you might advance your career by becoming a developer manager, and then perhaps a section manager or project manager, and then work your way all the way up into executive level positions like a director of development, or even the chief technology officer (CTO).
If you choose the technical track, you might go from senior developer to architect and then to a fellow or senior fellow.
Each organization is going to have its own specialized tracks for technical and non-technical advancement, so the titles and positions are going to vary greatly.
But if you reach that glass ceiling and you want to keep on advancing, you’ll have to make a choice to either pursue the technical or management track.
In fact, if you are not at a large corporation that offers an advanced technical track, you might not even have a choice.
Going into management may be your only choice for advancement—well, either that or going out on your own.
Always Be Thinking About Where You Are Heading
Really, the point of this post is to get you to give some serious thought to where you are heading and to deliberately steer your career.
If you want to advance in your career, you need to know in what direction you are going.
So think carefully first about what kind of software developer you want to be.
Do you want to be a career developer forever?
If so, what kind?
A web developer? Mobile? Cloud?
And, to what end?
Do you want to eventually become an architect?
Do you just want to code and do cool stuff and not worry about advancing past a certain point?
Do you want to rise as high as you can?
If so, you’d better start looking for companies that have high-level technical tracks.
Perhaps you want to get into management eventually, or maybe you to become a CTO or even CEO.
Or maybe you want to be a career developer earlier on in your career, and then transition to becoming a freelancer or even an entrepreneur.
Whatever you decide to do, it’s important you make a decision and have a plan.
You can always change the plan later—you don’t have to commit forever to a path once you pick it—but, you should always have at least some plan, otherwise, you’ll be aimlessly drifting in your career.