Gitlab hero border pattern left svg Gitlab hero border pattern right svg

Engineering Career Development

The Three Components of Career Development

There are three important components of developing one's career:


Team members who are (or want to be) on track for promotion should be engaged in a career coaching conversation with their manager. Some basic information about this process can be found in the People Ops handbook. Specific coaching plan templates are listed here to help start the conversation:

We want to build these documents around the career matrix for Engineering. Since this career matrix is still being developed, these documents are currently based on the job family requirements.

The first career matrix being developed is for Individual Contributors in Engineering.

When a team member is deemed ready for promotion, their manager should follow the promotion process outlined by People Ops.

Remember that the coaching process helps team members understand what they need to do in order to prepare for a more senior position on the team. The promotion process documents what an engineer has already done to deserve a more senior position on the team. The two processes are related, but they are not substitutes for each other.

Individual Initiative

Most career opportunities involve stepping into a position of informal or formal leadership. As such, the initiative of the individual is a necessary component, as well as a qualification. However, for the sake of inclusion we do ask that managers periodically bring up the possibilities for advancement so that individuals know the avenues available to them and receive encouragement to pursue them. Managers and team members should strive to have a career development conversation at least once a quarter.


GitLab is a fast-growing startup. As such, there is no shortage of opportunity for advancement along either the individual contributor or management tracks. We're fortunate that this is the easiest component. And internal promotions are generally our first option.

Sometimes a position must become available on the management track before a promotion can occur. But at our rate of growth in 2017 and 2018, it is usually only a matter of 6 months or less before something opens up for a prepared candidate.

Individual Contribution vs. Management

Most important is the fork between purely technical work and managing teams. It's important that Engineering Managers self-select into that track and don't feel pressured. We believe that management is a craft like any other and requires dedication. We also believe that everyone deserves a manager that is passionate about their craft.

Once someone reaches a Senior-level role, and wants to progress, they will need to decide whether they want to remain purely technical or pursue managing technical teams. Their manager can provide opportunities to try tasks from both tracks if they wish. Staff-level roles and Engineering Manager roles are equivalent in terms of base compensation and prestige. Learn more about what it means to be a Staff-level engineer at GitLab in a blog post with feedback from some of our Staff Engineers.

Trying the Management Track

It's important that team members interested in the people management track have opportunities to try it out prior to committing themselves. Managers can provide multiple opportunities to Senior and Staff Engineers who want to consider moving into an available or upcoming manager role. Examples include hosting a Group Conversation, acting as the hiring manager for an intern position, or running a series of demo meetings for an important deliverable. These occasions for trying out management functions are useful and can provide good coaching opportunities for the individual looking to move to management. Some engineers may find through these experiences that they are better suited to remain on the technical path, and this gives them the ability to decide before investing a significant amount of time in the transition.

In order to facilitate the transition, we recommend any person moving from an Individual Contributor role to a Engineering Manager role work with their manager to create a focused transition plan. The goal is to provide a concentrated look into the responsibilities and challenges of people management with the understanding that, if the role is not for them, they can return to the IC track. A good example of how to build such a plan can be found in this article. Another good resource for when you are ready for the critical career path conversation is this 30 mins video.

Temporary Management Positions

We create temporary management positions when there is organizational need, and we imprint these in our company org chart. These may be filled by someone who is transitioning into the role, experimenting with the role as they work on determining their career path or, someone who is just filling in while we hire and who is not interested in pursuing an Engineering Manager role long term. This difference should be made explicit with the individual and team members before the temporary role is created. See the types of temporary roles for more information on this distinction.

When someone fills a temporary role they are providing a service to the company, and perhaps getting a valuable career development opportunity for themself; so, poor performance against those duties would not result in termination. At worst, the person would return to their prior responsibilities. That does not mean, however, that an individual is immune to termination of their employment, for example if they commit a breach of their prior responsibilities or of the company's Code of Business Conduct & Ethics while in an temporary position.

Once you have been designated as filling a temporary management role, the current manager should update all reports to in BambooHR with a job information change request and create an access level request to grant interim manager access in BambooHR.

Those interested in these roles must:

Process for selection:

Types of Interim Roles

Acting Manager

An Acting Manager is someone who occupies a role temporarily and will move back to their original role after a set amount of time or other conditions. An Acting Manager may be experimenting with the role as a part of determining their career development path, or may be filling in for a vacant role while we hire.

Interim Manager

Interim Manager positions are for individuals who are pursuing the role long term: the requirement is that, before moving into the role full time, they will make at least one successful hire. The official promotion will not occur before 30 days after that person's hire, so that we can assess whether the hire was truly successful. If the new hire's success is indeterminate at the 30-day mark, then we will continue to review until a firm decision is made. If the new hire is not successful, that does not mean that the Interim Manager cannot eventually move into the full-time role.

Once the Interim Manager's first new hire has been at GitLab for 30 days the Interim Manager can submit a promotion document to their manager and determine the compa group for the new role. The goal of this process is to have a determination made by the interim manager's manager about the promotion to a permanent manager role within 30 days of the first successful hire into the new team. Generally we aim to have the interim period not to exceed 4 months before turning into a fulltime role.



graph LR; eng:jbe(Junior Backend Engineer)-->eng:ibe(Intermediate Backend Engineer); eng:ibe(Intermediate Backend Engineer)-->eng:sbe(Senior Backend Engineer); eng:sbe(Senior Backend Engineer)-->eng:stbe(Staff Backend Engineer); eng:stbe(Staff Backend Engineer)-->eng:dbe(Distinguished Backend Engineer); eng:dbe(Distinguished Backend Engineer)-->eng:ef(Backend Engineering Fellow); eng:sbe(Senior Backend Engineer)-->eng:em(Backend Engineering Manager); eng:em(Backend Engineering Manager)-->eng:de(Director of Engineering); eng:de(Director of Engineering)-->eng:sde(Senior Director of Engineering); eng:sde(Senior Director of Engineering)-->eng:vpe(VP of Engineering); eng:jfe(Junior Frontend Engineer)-->eng:ife(Intermediate Frontend Engineer); eng:ife(Intermediate Frontend Engineer)-->eng:sfe(Senior Frontend Engineer); eng:sfe(Senior Frontend Engineer)-->eng:feem(Frontend Engineering Manager); eng:feem(Frontend Engineering Manager)-->eng:de(Director of Engineering); eng:sfe(Senior Frontend Engineer)-->eng:stfe(Staff Frontend Engineer); eng:stfe(Staff Frontend Engineer)-->eng:dfe(Distinguished Frontend Engineer); eng:dfe(Distinguished Frontend Engineer)-->eng:feef(Frontend Engineering Fellow); click eng:jbe "/job-families/engineering/backend-engineer#junior-backend-engineer"; click eng:ibe "/job-families/engineering/backend-engineer#intermediate-backend-engineer"; click eng:sbe "/job-families/engineering/backend-engineer#senior-backend-engineer"; click eng:stbe "/job-families/engineering/backend-engineer#staff-backend-engineer"; click eng:dbe "/job-families/engineering/backend-engineer#distinguished-backend-engineer"; click eng:ef "/job-families/engineering/backend-engineer#engineering-fellow"; click eng:em "/job-families/engineering/backend-engineer#engineering-manager"; click eng:de "/job-families/engineering/backend-engineer#director-of-engineering"; click eng:sde "/job-families/engineering/backend-engineer#senior-director-of-engineering"; click eng:vpe "/job-families/engineering/backend-engineer#vp-of-engineering"; click eng:jfe "/job-families/engineering/frontend-engineer#junior-frontend-engineer"; click eng:ife "/job-families/engineering/frontend-engineer#intermediate-frontend-engineer"; click eng:sfe "/job-families/engineering/frontend-engineer#senior-frontend-engineer"; click eng:stfe "/job-families/engineering/frontend-engineer#staff-frontend-engineer"; click eng:dfe "/job-families/engineering/frontend-engineer#distinguished-frontend-engineer"; click eng:feef "/job-families/engineering/frontend-engineer#frontend-engineering-fellow"; click eng:feem "/job-families/engineering/frontend-engineering-manager";

Security Engineering

graph LR; sec:se(Security Engineer)-->sec:sse(Senior Security Engineer); sec:sse(Senior Security Engineer)-->sec:stse(Staff Security Engineer); sec:sse(Senior Security Engineer)-->sec:sem(Security Engineering Manager); sec:sem(Security Engineering Manager)-->sec:ds(Director of Security); click sec:se "/job-families/engineering/security-engineer/#intermediate-security-engineer"; click sec:sse "/job-families/engineering/security-engineer/#senior-security-engineer"; click sec:stse "/job-families/engineering/security-engineer/#staff-security-engineer"; click sec:sem "/job-families/engineering/security-management#security-engineering-manager"; click sec:ds "/job-families/engineering/security-management#director-of-security";

Test Engineering

graph LR; qual:jset(Junior Software Engineer in Test)-->qual:iset(Intermediate Software Engineer in Test); qual:iset(Intermediate Software Engineer in Test)-->qual:sset(Senior Software Engineer in Test); qual:sset(Senior Software Engineer in Test)-->qual:stset(Staff Software Engineer in Test); qual:sset(Senior Software Engineer in Test)-->qual:qem(Quality Engineering Manager); qual:qem(Quality Engineering Manager)-->qual:dqe(Director of Quality Engineering); click qual:jset "/job-families/engineering/software-engineer-in-test#junior-software-engineer-in-test"; click qual:iset "/job-families/engineering/software-engineer-in-test#intermediate-software-engineer-in-test"; click qual:sset "/job-families/engineering/software-engineer-in-test#senior-software-engineer-in-test"; click qual:stset "/job-families/engineering/software-engineer-in-test#staff-software-engineer-in-test"; click qual:qem "/job-families/engineering/engineering-management-quality/#quality-engineering-manager"; click qual:dqe "/job-families/engineering/engineering-management-quality/#director-of-quality-engineering";

Support Engineering

graph LR; supe:se(Support Engineer)-->supe:sse(Senior Support Engineer); supe:sse(Senior Support Engineer)-->supe:stse(Staff Support Engineer); supe:sse(Senior Support Engineer)-->supe:sem(Support Engineering Manager); supe:sem(Support Engineering Manager)-->supe:ssem(Senior Support Engineering Manager); supe:ssem(Senior Support Engineering Manager)-->supe:ds(Director of Support); click supe:se "/job-families/engineering/support-engineer#support-engineer"; click supe:sse "/job-families/engineering/support-engineer#senior-support-engineer"; click supe:sem "/job-families/engineering/support-management#support-engineering-manager"; click supe:stse "/job-families/engineering/support-engineer#staff-support-engineer"; click supe:ssem "/job-families/engineering/support-management/" click supe:ds "/job-families/engineering/support-management#director-of-support";


A limited internship pilot is launching in 2020. Depending on the success of the pilot we may choose to roll it out further.

Junior Engineers

Junior Engineers require a high degree of mentorship to effectively set them up for success. Because GitLab Engineering is scaling so quickly at the moment (100% in 2018, 125% in 2019) we are not hiring at the junior level. A good guideline for what it takes to meet our intermediate criteria is 2 years of professional experience with rapid growth. We encourage you to apply, even if you have questions.

GitLab is committed to increasing diversity of all types, particularly in leadership, as it's one of our core values. There is a misapprehension that the junior role is an effective tool for increasing our diversity. GitLab Engineering has made its greatest gains in diversity since putting a moratorium on junior hiring. This indicates that diversity and the junior level are orthogonal, at best.

Before this level is re-opened we need to assess the following attributes:

Senior Engineers

Note that we have a specific section for Senior Engineer because it's an important step in the technical development for every engineer. But "Senior" can optionally be applied to any role here indicating superior performance. However, it's not required to pass through "senior" for roles other than Engineer.

Senior engineers typically receive fewer trivial comments on their merge requests. Attention to detail is very important to us. They also receive fewer major comments because they understand the application architecture and select from proven patterns. We also expect senior engineers to come up with simpler solutions to complex problems. Managing complexity is key to their work. Staff and Distinguished positions extend the Senior Engineer role.


We strive to set the clearest possible expectations with regard to performance and promotions. Nevertheless, some aspects are qualitative. Examples of attributes that are hard to quantify are communication skills, mentorship ability, accountability, and positive contributions to company culture and the sense of psychological safety on teams. For these attributes we primarily rely on the experience of our managers and the 360 feedback process (especially peer reviews). It's our belief that while a manager provides feedback and opportunities for improvement or development, that it's actually the team that elevates individuals.

Transfer Options

The following table outlines some of the possible lateral transfer options at any level of the role, but don't feel limited by this table. Compa Ratio might differ per individual to determine leveling for each of the positions listed.

Starting Role Lateral Options
Frontend Engineer Product Designer
Product Designer Frontend Engineer
Backend Engineer Production Engineer
Production Engineer Backend Engineer
Backend Engineer Support Engineer
Support Engineer Backend Engineer
Support Engineer Solutions Architect
Support Engineer Technical Account Manager
Support Engineer Implementation Specialist
Automation Engineer Backend Engineer
Backend Engineer Automation Engineer

Lateral transfers among backend teams are also an option. Those teams include Distribution, Create, Verify, Release, Geo, Monitoring, Gitaly, etc.