Software development is a career path that many of us take. We've all had to start somewhere, and for the vast majority of us, it's at the bottom. A few have lucked out, started their own businesses and careers, completely avoiding the need to grind away from day one.
It's rare though, that even for the lucky few, that a software developer will skip through the five major milestones of personal and career development, as they grind day-to-day towards the highest level they can achieve.
For those of you wondering where you stand, or even at the start of the road and you want to understand your career path, these are the five levels of expertise and seniority in software development.
A software developers career ladder typically consists of three rungs; junior, mid-level and senior. The industry applies this scale for a number of reasons - to better understand and assign a degree of qualification, remuneration, expected expertise, as well as responsibilities.
As you move through the levels from junior to senior, an employers' expectations of your skill, expertise, problem solving ability, research and responsibilities, including leadership and mentorship will increase, and thus your remuneration to reflect your status.
While these levels are typically used by recruiters and companies to assign you to a bracket from which to ascertain your suitability for a given role, it is restrictive in the way that it can describe your relevant experience.
That brings us to the two missing levels - trainee and leader. Both levels fit in the existing seniority paradigm, trainee to junior, and leader to senior.
The trainee is an individual who's often learning about their role, and gaining practical experience in a workplace. A trainee is someone that's discovering what it means to practice software development for the first time in an industry environment, as part of their studies, or as pathway into the company of their choice.
A lot of large employers offer traineeships, in-business learning (IBL) opportunities and graduate pathways, IBM notably as an international employer.
The expectations for a trainee differ depending on the employer, but typically they will be looking for someone with some knowledge of software development, or a passion and desire to learn.
It's this formative stage where you decide if software development is for you, and if you have the passion and skill to make it your career.
Initially, trainees will have little to no exposure to real development, but will make steps towards coding in a professional way, eventually having the minimal level of skill and knowledge to tackle a real project.
Junior developers and trainees are often interchangeable, and in a lot of cases, blended into the same role. It can be difficult getting a job as a junior, because they often come and go, and employers tend to hire juniors as contractors, with an eye to cut long-term costs.
Nevertheless, a good junior is worth their weight in gold, because it's often at this stage, once you've had your first real taste of working on project, that you bring vigor, passion, motivation and energy. These are a junior's real strengths.
However, juniors are often impatient and want immediate results for their efforts, often lacking consideration of context, or taking shortcuts to achieve results. This often leads to junior burnout, where a junior places a much higher expectation on themselves, and an employer reciprocating.
It's important that a junior is closely supervised, because they need their passion and energy properly channeled, and they should be exposed to as much technology, practices and ideas as possible, to help build their career.
At this level, you're not expected to be an expert in a domain, or know a lot of different technologies, ideas, or approaches. You've typically come from further education, such as college or university, and you may have some practical experience working in a real-world environment, through placement, work experience, or traineeships.
It's vitally important to remember that this is the level where you will be learning a lot more than practicing.
Typically junior developers with 2-3 years can leverage their skills and experience and become the mid-level specialist, often referred to as the "workhorses of the programming world".
The mid-level stage is reached when you have the experience, knowledge and skill to execute projects on your own, but should still be done under limited supervision. This is also a stage when you can start to assume leadership responsibilities, typically through mentoring junior developers.
Competent developers are highly resourceful and display initiative in spades, but often need guidance to properly focus and channel their energy, as they often lack the experience to do so themselves, and struggle to reflect on their own mistakes.
At this point, it's expected that you know one programming language very well, while not quite fluent, you can certainly start your own project. However, competent developers often want to prove their worth and this is often where teamwork and focus can lag.
It's important that a mid-level developer's focus is guided. If you can harness the passion, drive and motivation of a mid-level developer, they'll fast become one of the most important resources in your team.
A lot of mid-level developers fall under the Dunning-Kruger effect, which hampers further career growth. It's a phenomenon that describes how dangerous a little knowledge can be. Being self-assured, developers at this level can often overestimate their skills which hampers their development, and impedes their development.
This cognitive bias is not just limited to mid-level developers, all seniority levels experience it, it's just that mid-level developers are more susceptible to it.
It's only once you realize that there's still so much more to learn that you can transition to the next level. Proving that you're beyond this bias is as simple as broadening your knowledge, by proving that you can not only acquire new knowledge, but put it to practice as well.
Senior developers are often referred to as problem solvers, because of their deep, specialized knowledge and exhaustive experience. They're often knowledgeable in the business domain that they support, which that allows them effectively transition between projects and products.
A senior will always consider what they're doing in the context of their domain, and what benefits or gains it can bring to the business. The real benefit of a senior is their ability to foresee issues ahead of time, design around them, or resolve it before it happens.
This is often from a combination of experience, intuition, deep domain understanding and leveraging the knowledge and experience of their team and other domain experts.
When leading a project, a senior will often make decisions based on best standards and practices in their field, as well as what is acceptable and likely to produce the best outcome for their team, and their teams' relative skill level.
There are several levels of seniority for senior developers. Those that transition from mid-level to seniors are junior seniors, those with significant experience and expertise are known as the expert, and then there's the leader.
A junior senior is a proficient and highly skilled developer, who made a major breakthrough; they are able to reflect on their work performance, analyze mistakes and learn from them. Their ability to reflect, learn and adjust is an approach at the core of agile project management, and vitally important on career development.
It's at this point that one should seek out opportunities for leadership, to hone their soft skills and develop skills for the next stage of their career that they may not have yet learned.
The expert is a level of seniority that is achieved through roughly 10 years of hard, determined practice. They will often draw on their vast experience and knowledge across a number (often all) domains, technologies and experiences.
It's at this point that their intuition is often their best asset, alongside their ability to problem solve and foresee issues. They are an adept practitioner and a good instructor, that has a profound methodological foundation.
The senior level is often the final rung on the ladder for a lot of developers, but is also the first rung for a whole slew of opportunities in the business world. It's a great point to jump off and start something else, that focuses more on the soft skills, than being focused almost purely on technical work.
While leadership should normally be reached from a senior level, because it provides the foundations of the necessary soft skills that are required, it can be shortcut from lower levels on the seniority ladder.
It's important that a leader should still be involved in the tools of their own trade, while focusing on the soft-skills that they have acquired, or are acquiring at this level.