DEV Community

Cover image for The Stages Of Your Software Development Career
James Hickey
James Hickey

Posted on • Edited on • Originally published at yourdevcareer.com

The Stages Of Your Software Development Career

Have you ever wondered what the next step in your career should be?

How do you know what tools, principles or programming languages to learn next?

I want to share with you guys a simple framework that will help developers in any stage of their career be able to navigate to the next steps and level-up.

Important Considerations

Each step represents a general "place" where you may be in your career.

Between each step, there is some transition which requires building knowledge and experience in certain areas.

Each step builds from the previous one.

These don't necessarily correspond to job titles.

Someone with a title of "Senior Developer" may in reality only be a Junior Developer in their skills and knowledge!

Yes, sometimes people are promoted simply because they have X number of years in the field - not because they have the skills and knowledge required to be competent.

Or, perhaps they've worked for the same company for so long that they are just given a "better" title.

I'm sure most of you guys and gals have seen this happen too.

And of course, I have to say: There are no real "hard" lines between each stage.

This is simply a way of envisioning your career so it's easier to manage and grasp as a whole. It's a useful set of concepts - that's all!

Let's begin!

1: Coder

A coder is basically a hobbyist.

Traits of a coder are:

  • Knows programming language syntax - perhaps even very well!
  • Can create small projects on their own - like video games, an app, etc.
  • Good problem solver
  • Works alone
  • Doesn't get paid for their work (not professionally)

2: Junior Developer

A junior developer is similar to a coder when starting out.

But, they are now entering the IT field as a paid professional and they work with a team of other professionals.

Soon, a junior developer will most likely manage to work in a codebase that may be too large for him/her to grasp in their head. They will have to learn how to break problems down into smaller and more manageable tasks.

They will begin to learn how to connect different systems together - such as client-server interaction or connecting to a database from server-side code.

3: Intermediate Developer

He/she is a competent team member and contributor.

They have learned how to build basic systems - such as a web application.

At this stage, some of the skills a developer is learning are:

  • Understanding of basic system architecture
  • Able to use professional tooling well
  • Basic understanding of design patterns, code smells, etc.
  • Understands how to work well as part of a team

P.S. This article is originally from YourDevCareer.com where you can check out more articles and resources to help accelerate your career growth!


4: Senior Developer

The senior developer is becoming very skilled and knowledgable to the point that those around him/her are looking to them as a mentor and a "go-to" in general.

They usually have some specialized and advanced programming knowledge and are able to build more complex systems using advanced techniques and patterns.

Some traits of a Senior Web Developer, as an example, are:

  • Knowledgable concerning design patterns, code smells, refactoring, etc.
  • Knowledgable concerning architectural paradigms like Domain Driven Design, Event Sourcing, CQRS, etc.
  • Some experience with server deployments and maintenance Infrastructural knowledge about load balancing, connection pooling, etc.

Yes - that's a lot of stuff!

A Note About Different Focuses

This example looked at traits of a Senior Web Developer. While most of these are fairly general and shared across different focuses, they may be different for someone who's a Senior Data Analyst, Senior IOT Developer, etc.

For example, a database oriented senior developer would require more knowledge and skills specifically around database admin, programming, etc.

5: Lead Developer

The lead developer is focused on providing high-level guidance to their dev team.

But more importantly, they are a bridge or connector between the development team and the other business-oriented departments in your organization.

Check out this article for some more details.

6: Tech Leader

A tech leader has made a name for themselves as an expert in some specific area(s) and usually have a very targeted branding/positioning as to what they do well.

That might be a specific programming language, web security, front-end development with react, a developer mentor, or even a particular industry!

They are community builders who have a following of people that look up to them as a direct or indirect mentor.

They are thought leaders who champion some specific cause or idea.

They speak publicly about their area of expertise or the ideas that they champion.

In a nutshell, they are technology experts and very skilled communicators.

All Done For Now!

What do you think? What stage do you see yourself in?

Are there any specific areas or topics that you feel you need to learn?

What do you think you need to do, specifically, in order to get to the next stage of your career?

Leave a comment sharing your thoughts for everyone else to benefit from!

Keep In Touch

Don't forget to connect with me on twitter or LinkedIn!

Navigating Your Software Development Career Newsletter

An e-mail newsletter that will help you level-up in your career as a software developer! Ever wonder:

โœ” What are the general stages of a software developer?
โœ” How do I know which stage I'm at? How do I get to the next stage?
โœ” What is a tech leader and how do I become one?
โœ” Is there someone willing to walk with me and answer my questions?

Sound interesting? Join the community!

Top comments (35)

Collapse
 
trandana profile image
trandana • Edited

Hobbyist:

"Can create small projects on their own - like video games"

Uhh what? Making games, especially from scratch building their own engine is one of the most challenging things a programmer can do.

I would put most game developers way above the average web dev in terms of skill level. Web development is very easy compared to game and game engine development

Collapse
 
jamesmh profile image
James Hickey • Edited

I think equating "small projects like video games" and "building their own engine" is quite an extrapolation on your part.

Even so, I think if you read the full article you'll see that the main focus is not on technical skill but has to do with (a) profession and (b) team work for moving forward from this stage.

I've known some very smart people from school, as an example, who actually were building their own video games. You know, pretty cool stuff.

However, that doesn't mean that they worked well with other people.

It doesn't mean that they were capable of working well as part of a team or could communicate with others very well.

It doesn't even mean that their code is maintainable and easily readable by other developers.

There are many things that are learned from experience that takes time - no matter how talented you are.

Collapse
 
srepollock profile image
Spencer Pollock

Great response. I have to say, James' post is quite good. I think that a hobbyist can really extend from a programmer's first tutorial all the way to someone that has coded 30+ years as a side time gig that does all open source. Programming has various levels that go both vertically and horizontally in terms of skill (take those as you will I think there may even be a Z-axis in there somewhere). That said, a programmers life is one that is in constant shift. No matter what end of the spectrum you're on, you're always building, creating or updating in a new way shape or form (and forum?).
Great post, looking forward to more and great discussions ๐Ÿ‡จ๐Ÿ‡ฆ!

Thread Thread
 
jamesmh profile image
James Hickey

Thanks Spencer! I appreciate the encouragement ๐Ÿ‘

Collapse
 
srodrigodev profile image
Sergio Rodrigo

"I would put most game developers way above the average web dev in terms of skill level"

That sounds quite arrogant. I've done both. Professional game developers are better at algorithms than web developers, whereas web developers are better at architecture, design and maintainability. Game codebases tend to be small (Braid was 100k lines of code, which is a very small codebase) compared to any web project I've seen. Remember that web development is not only HTML and CSS, there is reactive UI, a bunch of integrations that should work in a cohesive way, backend (most game developers haven't even heard of the word 'backend', as they are effectively frontend developers working on real-time applications), etc. Game code tends to be a mess as game development is pretty much always rushed and a good amount of programmers didn't have much training in good coding practices (apart from "this executes fast"). Most game developers wouldn't pass a coding interview at a top web development company, as they tend to lack the skills required for that kind of job. Same the other way around, for the same reason.

In short: different kind of skills.

Collapse
 
regularmike profile image
Michael Sullivan

Which is the stage where you finally perfect the work/life balance?

Collapse
 
jamesmh profile image
James Hickey

That's up to you ๐Ÿ˜‹

Collapse
 
antonfrattaroli profile image
Anton Frattaroli

I use the phrase "work/life integration". "Balance" doesn't have the right sound to me: you're a human/spouse/parent/employee/friend each 100% of the time, and you don't balance those like you would a 401k portfolio.

To be all of those things at once, we can try to plan in advance and be adaptable, aim to minimize costs of task switching, prefer async communication over synchronous... but it's a skill like any other that everyone improves with at their own pace. We can look to homemakers for expertise with work/life integration skills.

Thread Thread
 
jamesmh profile image
James Hickey

Agree ๐Ÿ’ฏ

Sometimes you go through "seasons" where you need to focus more on family, and sometimes you need to get work done.

But the idea of "balancing" - I agree - is not very appropriate.

But wherever you are at any given moment - give 100%.

Easier said than done ๐Ÿ˜‹

Thread Thread
 
regularmike profile image
Michael Sullivan

Maybe neither is quite right. After all work is part of life but I guess it's shorthand for personal life. Work/life integration has some negative connotations for me when I think of the consequences of too tight an integration. Anyway, ftr I posted this only half jokingly. I think many developers are way too obsessed with learning, improving, advancing, etc. and it can be detrimental to mental and physical health and relationships. Do you see yourself primarily as being on a software development journey? As a human I think that's just totally wrong.

Thread Thread
 
antonfrattaroli profile image
Anton Frattaroli • Edited

Yeah, thinking of work/life as an optimization problem where you're optimizing for multiple things conflicts are inevitable. And sometimes it would be "better" to earn money for your family rather than spending quality time with them (and some will disagree, resulting in conflict in yet another life role). It's tough being a human.

Thread Thread
 
jamesmh profile image
James Hickey

๐Ÿ’ฏ

If your family is severely in debt... what's more of a priority right now - quality time or making money?

If your family values being financially independent, etc. then being in a "season" of tackling the debt would be "better" for now. And this would position your family, long term, to be in a better position.

So ya, sometimes there are short term sacrifices for long term gains, sometimes it depends on values, etc.

No easy answer! And yes, it's tough!

Collapse
 
jperasmus profile image
JP Erasmus

enlightenment

Collapse
 
marek profile image
Marek Zaluski • Edited

Great way to lay out the long-term strategy of a developer career. I'm a big believer in strategic thinking when it comes to career plans.

I want to respond with two points:

First, this is one possible career progression out of many. The starting point in any career plan is to ask yourself what your end goals are -- for example what's your dream job as a developer. Then make a progression plan (maybe like this one, or maybe different) towards that goal. In real life, careers have many more twists and turns, and much more ambiguity in terms of stages and titles.

Second, the article's definition of "coder" is entirely abritrary and I think it's inaccurate.

A better definition of a coder is: "someone who writes code." That's it. It could be an amateur or it could be a pro. There's nothing about the word coder that implies that it's an unpaid hobby. Nor that it's someone who works alone.

A better term to match that definition would be "lone unpaid coder".

I do agree with your main point James that if you're the kind of coder who works alone, then one of the most beneficial things you can do for your work and your career is to get more experience collaborating with others.

Collapse
 
jamesmh profile image
James Hickey

I agree ๐Ÿ’ฏ.

The reason I did choose "Coder" (if anyone is curious ๐Ÿ˜‹) is that I find the term "Coder" does have the stereotype of a socially awkward nerd sitting in his mom's basement building role-playing games by himself.

And I just needed a really simple word to use ๐Ÿ˜‚

I like your first comment too. This is a general framework that (by design) hasn't included things like freelancing, consulting, etc. and different fields like IOT, web, data analysts, etc.

My newsletter (where this article was adapted from) is starting to get into these differences though.

But I wanted this to start - like you said - by looking at it an easy way to get a top-level view/understanding.

Thanks for the comments!

Collapse
 
cesar_mostacero profile image
Cesar Mostacero

Awesome reading, James!

I totally agree with the summary of Tech Leader:
In a nutshell, they are technology experts and very skilled communicators.

At that point, to be able to perform the role as expected, both sides are mandatory: tech and soft-skills.

What I would like to mention is, even for Senior and Junior developer, soft-skills are important. As developers, we should have the ability not only to code, but also to share our ideas in a proper way, making the team work easier.

Collapse
 
jamesmh profile image
James Hickey

๐Ÿ’ฏ

Collapse
 
riccardomessineo profile image
Riccardo Messineo • Edited

This article is a confirmation of what I'm seeing in almost any software developer: they tend to image themselves as a more accurate, more specialized expert.
They think they have to basically build a vertical skill asset.

But, isn't it strange in this market?
We build things that lasts months and then we rebuild them (and on, and on...).
What remains, is our ability to learn the new patterns/technologies and, based on our experience, make these new arrows for our bows.
Senior people should focus in building their horizontal soft-skills: communication, direction, leadership.

Thanks for your article James!

Collapse
 
jamesmh profile image
James Hickey

Thanks for the comments Riccardo ๐Ÿ‘

Collapse
 
bastionthedev profile image
Bastion Fennell

This reminded me a lot of The Manager's Path, by Camille Fournier. When I was struggling to figure out what direction I wanted to go with my career, that book helped me out a lot!

Having a clear idea of the levels of development is super helpful, both at a personal level and at a company level I think.

Collapse
 
jamesmh profile image
James Hickey

Nice! I had never seen that book before but it's pretty much what I've been trying to do with my newsletter "Navigating Your Software Development Career". The term "navigating" happens to be in the book you mentioned, which, as you said, is helpful to know where you are "going", etc.

Collapse
 
lautarolobo profile image
Lautaro Lobo

Hey, good post!

I would add: you can be a good comunicator and/or coach, but without having a Senior Dev knowledge. Like you now how yo deploy websites, or apps, with Firebase, and you do very good talks about using Firebase, without knowing many programming langs. Or you may be a tech organizer, organizing hackathons and Dev talks, without being and expert on all the topics that these events are related to.

You may be good with Tensorflow, do some well-prepared talks bout that, and not being an expert on all the uses of the lang, just in that particular "niche" or specific topic.

Very good post, cheers :)

Collapse
 
jamesmh profile image
James Hickey

Thanks! ๐Ÿ‘

Collapse
 
bpkinez profile image
Branislav Petroviฤ‡ • Edited

Great, concise and useful article!

Thanks James.

Collapse
 
jamesmh profile image
James Hickey

Thanks!

Collapse
 
murtezayesil profile image
Ali Murteza Yesil • Edited

I am slowly becoming Junior / Hobbyist. I have very few ideas I want to develop as hobby (side) projects once I get better at coding and developing algorithm. But currently I am a CS student who keeps copies of projects as simple as "calculator using switch case statements".

Collapse
 
jamesmh profile image
James Hickey

Great - keep learning and building stuff! ๐Ÿ‘Œ

Collapse
 
awinterman profile image
Andrew Winterman

This is an awkward thing you've written. Are you at the end of your career?
Maybe wait a few decades before attempting to define all the career stages?

There's a person at my previous organization who is a former bank cto who now just wants to code. He's a mid level engineer in a organization around 200 folks strong. Where is he on your hierarchy? Has he gone down two stages from Leader all the way to Senior Developer?

Where's the emotional aspect of this? Where's the progression from having no idea what's going on and being distressed about it, but loving the feeling of getting things working; to thinking you know what's going on and being able to sort of fly through more mundane requests; to realizing you don't have any idea of what's going on actually but what you know is upsetting you; to a begrudging acceptance that everything is a house of cards, that there be dragons, but you can build nice interfaces around them and live in the cage of your own construction and at least understand the shitty tradeoffs you had to make; and then whatever comes after that? Where's the first time you had to tell someone not to refactor that shitty code that's been lying around forever because there's no compelling business case and the risk isn't worth the potential reward, no matter how unpleasant/difficult it might be to work with? Where's the understanding that comes from your first failure? from your first success?

Why does your hierarchy include a sojourn through management? Have you never worked at a place where there was an individual contributor track that would see you well up the chain? Those people DO sometimes get asked to weigh on in business concerns, but they can also hide out and solve particularly difficult or important problems.

Why did you write this? Is the taxonomy of roles really so uncommon or unexpected that we need yet another surface level take?

Collapse
 
jamesmh profile image
James Hickey

To be honest, I suspect you aren't really looking for me to respond to the questions you asked (which you answered yourself anyway).

If there are some honest questions you would like me to respond then I'd be more than happy to answer. You can even DM me if you feel that is more appropriate :)

Thanks for taking the time to chime in!