I’m a seasoned software engineer with more than fifteen years of experience.
Throughout my career I have interviewed many engineers of various nationalities and various engineering levels, capabilities and years of experience.
I was offered help in some non trivial episodes in my life by individuals who are not a part of my family, and I would like to pay it forward and help others. This is the main motivation behind my volunteering activity.
The COVID-19 pandemic worldwide crisis is causing massive layoffs and hiring freeze in many organizations.
Let’s start by introducing engineering/software development levels.
Various companies have different definitions to these levels, but I believe we can establish some rules of thumb, or general definitions.
It is important to understand these levels, and the engineering rank one is interviewing for, as this sets the expectations (the hiring bar) to the interviewing process.
The engineering levels I’m about to introduce differ not only by pay/total compensation but also by the level of impact the employee has in their role.
Software engineer student/software engineer intern/associate software engineer
Various companies offer internship programs for software engineering / computer science/ computer engineering and other related fields during summer vacations.
Most (if not all) FAANG companies offer such programs in the USA.
The intern works with a team on a specific project for several months. In some cases, if the intern is about to start their senior role, and their colleagues are pleased with the quality of the project they would be offered a full-time engineering role, pending on their completion of the degree.
In Israel, most of the major employers in the software industry hire students for a longer period of time.
The expectation is usually that the student will be able to work at least two days a week.
During exams periods the students are expected to work less or even are allowed to take a leave from their work.
These employers see these students as their future generation of engineers, and besides providing them valuable work industry experience, offer them help sometimes with tuition payments.
Usually these individuals will not work on “mission critical features”, but rather on small features which are either “nice to have” or any postponement of their delivery would not have serious implications on the business and its customers.
The expectations of these students or interns is to deliver results, be curious about their work, become comfortable with their employer’s culture , internal tooling, procedures and methodologies, hoping that if they become full-time engineers they will require less ramping up.
Karin Eibschitz-Segal, General manager of Intel’s development activities in Israel, started working as a software engineering student in 2001. Both Karin and I were hired on the same hiring day.
Junior software engineer/university or college hire/bootcamp graduate
These developers are hired after or close to graduation.
They are expected to participate in a ramping up program, a part of it may be organized at their team level, and a part of it might be general for all new hires.
After ramping up period , they are expected to work on tasks with small or medium scope, which have influence within their team, but may be included in their team’s deliverables and be used by either external or internal (other teams) customers.
These engineers will receive their tasks from their direct managers or seasoned engineers and technical leaders in their team, and are expected to consult with more seasoned developers on the execution of their tasks on a frequent basis.
They can help mentoring the students and interns working with the team, to some degree, but are more expected to be “manteed” rather than to mentors.
Some employers expect junior engineers to be promoted to the next level after several years. Failing to do so might have implications on the continuation of their employment.
After feeling comfortable with their work environment, peers and procedures, these engineers should seek guidance from their managers and other seasoned peers on how to move forward towards the promotion.
Mid level software engineer
Mid level engineers are engineers which possess a few years of industrial experience.
They are expected to be proficient in the technical stack and methodologies that are used in their team.
They show more degree of autonomous work, and will require less guidance from seasoned developers and their technical leadership, compared with junior engineers.
They work on tasks with higher degree and complexity, and sometimes are required to interact with other teams or organizations.
These engineers should show more involvement in improving their team procedures and methodologies, and participate in larger portions of code reviews.
These engineers can be involved in mentoring junior engineers and interns/students in their teams, and should seek advice from seasoned engineers how to evolve their engineering careers.
Senior/seasoned software engineer
Senior software engineers will work on complex features, mostly within the scope of their team, sometimes with some level of ambiguity on the requirements that will need to be clarified with other stakeholders such as the product management team, and they may need to reach out to other groups (sub organizations composed from several teams) for clarifications.
Quite often they are the de facto technical leaders of their projects and features, driving the software design for the project.
On other occasions they are teamed up with either engineers on complex projects, taking a significant part in detailed design and implementation .
When serving as technical leaders of projects, they may be required by their manager to provide a suggestion work plan for a complex feature from design phase to launch on production environments , and these projects may stretch to several months of work.
There is an expectation of these engineers to show mentoring abilities for less seasoned engineers, and be engaged in forming and revising best engineering practices at the team level.
They are expected to take an active role in code reviews for their team and to provide important feedback
These engineers work with their managers and technical leaders on driving their careers.
Technical lead / Hands on team lead
The technical leader is the technical authority in their team.
They serve as an example of technical excellence to other team members, and provide mentoring and technical advice to all engineers on the team when required.
They will lead the selection of the technical stack in new formed teams and adoption of new technologies over time, by evaluating them according to the business needs (whereas less seasoned engineers might try to evaluate technologies according to popularity and hype).
Technical leaders will be heavily involved in setting the software architecture at their team level and will frequently collaborate on the matter with technical leaders from other teams and with architects (which deal with the software architecture of several teams or the entire company).
They provide high level designs of complex parts of the team’s architecture and sometimes also a “proof of concept” software artifacts to back their high level designs.
In some companies, the technical leader is not a people manager. They have no personnel authority. They cannot hire or fire engineers, but they may be requested to take an active role in providing feedback on the performance of engineers on their team.
In other companies, usually startups and small sized companies, many technical leaders are also people managers of several engineers.
In this case their responsibilities are divided between people/team management and providing technical guidance/mentorship.
In my next post I will cover the expectations from candidates of student/intern roles during technical interviews.
I would like to thank those who reviewed the post, especially Oded Maggar for his insightful comments and ideas.