loading...
Cover image for The Stages Of Your Software Development Career

The Stages Of Your Software Development Career

jamesmh profile image James Hickey Updated on ・4 min read

Stages Of Your Software Development Career (5 Part Series)

1) The Stages Of Your Software Development Career 2) Transitioning Into Your First Junior Developer Role 3) Becoming An Intermediate Developer 4) How To Become A Senior Developer 5) Essential Senior Dev Skill: Solving Problems With Patterns

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!

Stages Of Your Software Development Career (5 Part Series)

1) The Stages Of Your Software Development Career 2) Transitioning Into Your First Junior Developer Role 3) Becoming An Intermediate Developer 4) How To Become A Senior Developer 5) Essential Senior Dev Skill: Solving Problems With Patterns

Posted on by:

jamesmh profile

James Hickey

@jamesmh

Software Architect & Senior Developer | Microsoft MVP

Discussion

markdown guide
 

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

 

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.

 

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 🇨🇦!

Thanks Spencer! I appreciate the encouragement 👍

 

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

 
 

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.

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 😋

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.

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.

💯

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!

 
 

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.

 

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!

 

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!

 

Thanks for the comments Riccardo 👍

 

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.

 
 

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 :)

 
 

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.

 

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.

 

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?

 

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!

 
 

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".

 

Great - keep learning and building stuff! 👌

 

Junior Developer and Senior Developer are fuzzy Human Resources distinctions. Rather than focus on the stages between a young butterfly becoming an old butterfly, it's more useful to consider the stages leading up to it becoming a butterfly, to begin with, I suggest you get knowledge by reading information from professionals software development sources vilmate.com

 

I think that fits with what I said in the article: that these titles are not about job titles but competency levels.

 

What do you think about Software Architect?

 

Well, that's something I'd like to write about in more detail someday 😋.

But basically, a lead dev is a liaison between the dev team and the other external teams (marketing, etc.) In many orgs a lead dev will represent a cross-functional team to other cross-functional teams too.

An architect is one more level "up" where they manage technology across multiple teams (whether cross-functional or just segmented by trade).

Architects would also be more involved with clients - gather requirements, understanding business needs, offering advice, etc.

 

Really like this, nice to see some clear cut definitions. Would be good for hiring too!