In our latest blog post you’ll get a unique chance to find out how all the career stages in programming look like, beginning with the apprenticeship programme, through the various engineering jobs to become the Principal Engineer of the company and finally conquer the entire industry. But be aware from the very start, not all programmers get to the final stage!
“If you are going through hell, keep going!”
A phrase attributed to Winston Churchill aptly describes the path a novice in the IT industry takes to become an Engineer of Distinction. This uphill struggle costs both money and time (measured in years), but the end result will hopefully prove worthy.
In this guide for software engineers and HR managers you’ll find useful information about all career stages in programming that all programmers have to come through.
We identified 9 programming career stages:
First, let’s find out how a Pre-Apprentice can become a full-fledged Software Engineer.
Having previously grasped the basics of programming, a programmer is now ready for his/her first post at an IT firm.
However, no one will instantly give them free rain, because they first have to undergo an apprenticeship programme. It typically lasts from two to four months and they get assigned to a mentor, who is usually someone of the Senior Engineers.
There are no ownership responsibilities yet and they will have to closely adhere to the programme designed by the firm and fulfill all of its requirements. Their mentor acts as sort of a “boss,” since the feedback they are provided with is essential to their advancement.
Basically, their only task at this point is to learn as much as possible before moving on to the next stage.
If you become an apprentice, you get the official confirmation from the company that you know practically nothing.
Joking aside, the second stage of apprenticeship can last up to six months and although programmers still have to work under supervision, they do get some small tasks. Usually, they will be delegated with internal tasks in client projects and their work on these will be closely monitored by the mentor.
However, their primary goal still remains learning and self-development through observation and mentor feedback.
Having completed the apprenticeship, they are finally ready to become true Software Engineers. Now, your real programming career with all its stages can begin.
Although still considered a learning position, being a Software Engineer brings in a whole new set of responsibilities and opportunities for a young programmer. This is reflected in the minimum one year trainees are expected work in this role, but this can be prolonged up to three whole years.
Programmers not only get to work in a team, but they receive the same status as the people they are learning from. The process still involves accepting feedback graciously, since they are still focused on their own tasks which become more complex over time.
They now receive well-defined sub-tasks which they are expected to complete. Of course, close guidance and technical mentoring ensure that they don’t fall in danger of becoming stuck or blocked.
They still have to heavily rely on guidance, since they are not yet ready to learn in a self-directed way. At this stage, productivity skills are in focus, such as source control, editors, the build system and other tools, as well as testing best practices.
In essence, a Software Engineer is expected to acquire a broad knowledge of CS concepts, all the while focusing on growing as an engineer, learning existing tools, resources and processes.
Only after all these requirements have been met, regardless to the period elapsed, the programmer is ready to assume the role of an Advanced Software Engineer and for the first time co-own an area of projects.
So, the journey continues!
In the following paragraphs we will show you what a novice engineer must achieve in order to firstly become an Advanced Software Engineer and then a Senior Engineer.
The biggest advance in this position is the fact that a programmers’ world no longer revolves around themselves and their tasks, but they start focusing on their projects and peers. Yes, you read it correctly, their projects, since they tackle projects as a whole. They work from task to task, and actively seek guidance from others, since the danger of going down a rabbit hole still looms.
Professionally, making the same mistake twice should by now have become a thing of the past, although the learning process is still ongoing. The programmer’s education is now self-directed and he does not rely on the feedback of senior engineers that much.
In essence, although an Advanced Software Engineer co-owns an area of project/product, he/she must still be eager to learn and ready to take initiative since those are crucial element in progressing to a Senior Engineer.
Now things really get serious. A Senior Engineer is in charge of a whole team and is responsible for projects with well-defined tasks. He is the go-to guy whom others approach for guidance. Taking initiative is therefore key to this role, since Senior Programmers have to understand and make design decisions and tradeoffs in their area.
Beside the technical issues, like not spending more time than necessary debugging, they also have to communicate with non-technical team members to give technical advice. Knowledge of industry trends, the company’s infrastructure and build system is also a must.
Since Senior Engineers possess a strong record of ownership of their projects, they are expected to contribute to common code because they have end-to-end responsibility. In addition, they are expected to identify problems and/or risks not only of their own work, but as well of others.
The leadership part of a Senior Engineer’s job is based on the ability to communicate. They should convey technical decisions through design docs, tech talks, blog posts etc. Apprenticeship programme is still important, but now a Senior Engineer assumes the role of a mentor to young programmers, pairing up with them and providing them with feedback and reviewing their design and code.
Senior Engineers have to mediate as well, bridging across various functions and departments, such as Product, Design, Analytics, etc. Communication-wise, their most important role is the aforementioned one of identifying problems both for their own and adjacent work, and discussing them in order to find the best solution as early as possible.
All in all, a Senior Engineer is the person whom everybody looks up to if a problem arises.
However, to be the best of the best and earn promotion, most Senior Engineers decide to take up some type of Tech Lead responsibilities. As an alternative, they can demonstrate a notable degree of people leadership by assuming mentorships, which indicates that they are ready to become Advanced Senior Engineers.
So, the next two stages in a programming career are Advanced Senior Engineer and Staff Engineer. Let’s examine what are the roles of an Advanced Senior Engineer and Staff Engineer.
It’s time for a company takeover!
Well not literally, but professionally, since the path from a Senior Engineer leads to the ownership of entire projects and even organizations.
In order to become a Staff Engineer, a programmer must first gain the title of an Advanced Senior Engineer and here are the necessary steps involved for both of these high-ranking posts.
After spending years as a Senior Engineer, it won’t be hard to spend roughly the same number of years as an Advanced Senior Engineer. Exact numbers vary, but one year is a minimum, and one can expect to work at this post for three years or even longer.
This is not without reason since these engineers exhibit not only ownership of the entire project/product, but take initiative to identify and solve important problems. They coordinate with others and set directions at project level, constantly taking part in the decision-making process.
At this stage, the issue of technical debt arises and has to be identified and tackled by Advanced Senior Engineers before it gets a chance to grow into a debt that requires up-front work to get involved.
When it comes to the work itself, excellent judgment is something that the programmer has attained so far. It is a much-needed skill since Advanced Senior Engineers act as a resource to unblock and enable the entire team. They are the go-to experts in the entire company for at least one of the areas (Rails, Ember, etc.).
Since they possess an understanding of the broad systemic architecture, they assume a new role of researching and even proposing new technologies, which will be essential in their next engineer career step.
Multi- is the keyword to the tasks a Staff Engineers undertakes. Like managing one project/product wasn’t enough, now multiple teams and projects are put in the care of this position. Since not many programmers advance this far in reaching these stages in their programming career, there is no fixed period one spends as a Staff Engineer.
Basically, they are expected to exhibit ownership across the organization. By now, these programmers have made an unambiguous impact on the entire company’s future technical path. Their role is crucial when it comes to developing long-term strategies for complete and critical areas of business.
All the tasks they had as Advanced Senior Engineers are multiplied so they act as a resource on several projects/products and across several teams as well. They not only research new solutions, but are responsible for their successful implementation. The improvements they create have to prove stable, scalable and in general perform well across major business-critical systems.
They have to recognize more complex problems, break them down and swiftly come up with solid solutions. Staff Engineers are masters of debugging and technical guidance since they are the highest instance their fellow programmers address.
Last but not least, Staff Programmers are regarded as the driving force for multiple teams. Their cross-team work consists of hearing and guiding debates in order to produce a decision which they will feel confident enough to back. They provide teams with clear directions for the period of six months or a full year and identify the areas which need most care and planning.
Both of the posts we discussed require the ability to look into the future, of the industry, all the while coordinating and guiding other programmers. This is no coincidence since the positions we write about in our final blog post have to assume responsibility for whole organizations and even the industry in its entirety.
Stay tuned, just two more steps left before we reach the programming crème de la crème.
The final piece of the puzzle! How to become Principal Engineer and an Engineer of Distinction.
Our blog post took us on path a programmer takes from as early as his apprenticeship days, across various Engineering posts, such as Senior and Software Engineers, all the way to a Staff Engineer, responsible for handling multiple projects and teams.
Not many people advance thus far, and even less become Principal Engineers, in charge of the entire organization. However, there is one more step on the road to programming stardom and that is the post of an Engineer of Distinction.
If you are talented, hard-working, and persistent enough (in that order) you might work as these engineers one day, so don’t miss this chance to find out what their work consists of.
You’re the man (or woman). No, literally, the whole company structure funnels upward to this post which is responsible for the whole organization. If there is a failure, he is likely to be blamed since it is up to the Principal Engineer to set the technical path and directions. He fully understands the impact of business decisions and choices and he is not afraid to make them.
The decision-making process involves not only envisioning things, but conferring these visions to others. A Principal Engineers is expected to anticipate challenges across the organization much prior to their actual occurrence and react by devising preventive measure and successfully executing them.
The facilitation of an internal discussion is crucial to this post, since achieving consensus from the entire team ensures that they all take the same professional direction. In this sense, a Principal Engineer inspires other engineers by directing their work in a way that has been commonly agreed on. He or she therefore serves both as a role-model and a mentor to every single member of the technical team, which lies at the heart of any IT company.
Make no mistake; a person suitable to become a Principal Engineer is hard to come by. The already established ones spend years and years at this post working for their respective companies. They possess a unique combination of unparalleled dedication to the craft and a fervent desire to progress from Staff Engineers. Since this is the case, it is even rarer to meet an Engineer of Distinction, the apex position of the entire industry and a dream of innumerous young programmers.
This is pretty much it.
This is the top of all stages in a programming career.
The skills of the few lucky ones who become Engineers of Distinction have outgrown the scopes of the biggest companies, and their reputation now spans the entire industry. They can truly be deemed as leaders, since they have made and constantly make breakthroughs and are in charge of projects which several organizations depend on.
Principal Engineers, whom we described as top-dogs, now seek guidance from Engineers of Distinction since not all organizations have the resources to employ them. Actually, very few IT firms have the capacity to sustain such an esteemed position, but if they do, they keep this individual for years on their team.
Work-wise, an Engineer of Distinction is also in charge of communicating multi-year technical strategy and taking the helm of the team. His main task is to identify the strategic areas in which further development will be directed in.
In the end, we notice that due to the enormous responsibility and workload both posts described entail, there are not many programmers that would qualify to fill in the shoes of Principal Engineers or Engineers of Distinction. As the industry grows, however, we could expect a rise in the number of these engineers, but mind you, this does not imply that the required skills level would go down, quite the contrary.
To sum up, a career in the IT industry is nothing to shy from, especially if one has the proper higher education for it. Each stage a programmers climbs up the imaginary ladder to success is a reward for mastering the craft. Therefore success in the programming profession is more of a journey than a destination in itself.
Now that you are familiar with all the career stages in programming, you are ready to become a Pre-Apprentice and perhaps go all the way, for as the famous Chinese philosopher Laozi once famously said:
“A journey of a thousand miles begins with a single step.”