"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?
That's up to you 😋
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.
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!
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.
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 👍
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 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.
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 :)
Great, concise and useful article!
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! 👌
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!
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.