DEV Community

Cover image for The Stages Of Your Software Development Career

The Stages Of Your Software Development Career

James Hickey on March 01, 2019

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?...
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!

Collapse
 
ealpuche profile image
Elmer Alexis Alpuche Morales

What do you think about Software Architect?

Collapse
 
jamesmh profile image
James Hickey

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.

Collapse
 
ianrathbone profile image
Ian Rathbone

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

Collapse
 
jamesmh profile image
James Hickey

Thanks Ian!

Collapse
 
juliabekesh profile image
Julia • Edited

Thank you for sharing this useful information about hierarchy in software development career.

Collapse
 
jamesmh profile image
James Hickey

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