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

Engineering Career Framework

On this page

Engineering Career Framework

These are the expected behaviours of Engineers at GitLab. Most engineers at GitLab are Intermediate or Senior, so the priority is to address these levels first.

Moving between levels, you should see that as engineers advance in their careers, their duties should encompass a higher degree of complexity, the scope of their influence should expand, and their contributions should become more impactful.

These behaviors should not be considered as a checklist for promotion. Excellent Engineers may struggle with one or two aspects of their job and their strengths in certain areas should make up for deficits in others. However, it is important to show a significant number of strengths to be considered for promotion.

Each of these behaviors should be achievable inside of normal working hours. If you feel that you need to work additional hours to be successful in your role you should talk to your manager.

Junior engineers are still included on this framework even though we are not actively hiring at this level. Further discussion about junior engineers can be found on the career development page.

Glossary

These definitions are used for the scope of this document:

Scope of Influence

This refers to the range of people that you influence with your leadership and how broadly you are able to bring people together to work on a common goal.

When reading this framework, it is important to consider the behavior within the context of the scope of influence for the given level.

Juniors are expected to focus their energy on making sure that they are becoming proficient in their role. They need to become self-reliant for the majority of their tasks so that they can start to help their team.

Moving towards a Senior role, an engineer's focus begins to extend beyond themselves and into their team. They contribute to helping others on their team be successful and may start to develop a network that extends outside of their team.

Staff engineers are actively participating in activities beyond the scope of their team, while Distinguished and Fellow engineers may be interacting with departments outside that of Engineering.

As a result, the more senior you become, the greater impact, influence and contribution you will have. The results that you generate and efficiencies you generate have the potential to impact a broader range of people.

Values Alignment

In this section, we are considering how an engineer aligns with GitLab's values. We expect all engineers to adhere to our values. As an engineer becomes more senior, they need to become custodians of our values and be vocal when they see behaviour that does not align with them.

These are not described in great detail to avoid duplication with the Values handbook page.

Collaboration

More details about Collaboration can be found on the Values handbook page.

Results

More details about Results can be found on the Values handbook page.

Efficiency

More details about Efficiency can be found on the Values handbook page.

Diversity

More details about Diversity can be found on the Values handbook page.

Iteration

More details about Iteration can be found on the Values handbook page.

Transparency

More details about Transparency can be found on the Values handbook page.

Intermediate Senior Staff
Values Alignment: Collaboration
  • Independently brings in expertise from other contributors to raise the standard of their work.

  • Gives positive feedback in public and negative feedback privately with care.

  • Helps their team succeed. Provides feedback that focuses on the business impact of the behaviour.

  • Engages with the stable-counterparts for their team.

  • Extensive user of GitLab (dogfooding) and regularly makes helpful suggestions for feature proposals.

  • Help the team succeed and looks for opportunities to help the section to succeed.

  • Identifies situations where collaboration between teams will yield good results.

Values Alignment: Results
  • Executes tasks in team projects, demonstrating ownership of them from conception to completion. Requires supervision to deliver projects in time, growing bias for action.

  • Demonstrates ownership of projects that require collaboration with other teams in their section.

  • Creates a sense of urgency to deliver results and encourages bias for action in others.

  • Iteratively works towards results on cross-team projects without over-analysis.

Values Alignment: Efficiency
  • Recognises complexity of the team’s product or the team’s process, and proposes solutions accordingly.

  • Capable of implementing solutions based on the complexity, and asks for guidance when the complexity increases unexpectedly.

  • Proposes changes that improve the efficiency of the team.

  • Chooses work that enables greater efficiency of others in the team.

  • Chooses work that is appropriate to their level and works with the Engineering Manager to assign work to other members of the team.

Values Alignment: Diversity
  • Seeks out diverse opinions to improve the quality of the team’s work.

  • Directly or indirectly takes part in the hiring process to help ensure that we bring in a wide variety of experience into our teams.

Values Alignment: Iteration
  • Balances short term gains and long term benefit with team’s help.

  • Focuses on improvement.

  • Demonstrates understanding of balance between short term gains and long term benefit.

  • Creates proposals for team work that clearly defines the problem, offers alternatives, and proposes a solution.

  • Identifies opportunities for the team to deliver results in a more iterative way.

  • Is able to take a long term goal and turn this into small actionable steps that can be implemented in an iterative way. Identifies and prevents decisions that are not “two-way door decisions”.

Values Alignment: Transparency
  • Provides context and background on projects and issues so that those with no prior knowledge are able to contribute to the discussion.

  • Holds their team to a higher standard of transparency and encourages others to work in the open.

  • Champions a no-blame culture and encourages learning from mistakes.

Technical Competencies

Engineers must be able to produce high quality code that solves the requirement. With seniority comes more complex tasks that are less well defined, and the need to help other engineers find good solutions.

Quality

Quality goes further than just testing. An engineer needs to deliver code of a high standard that is well written, well tested, properly documented, maintainable, and achieves the original goal of the requirement. Juniors will need more help than others to achieve this. As engineers become more experienced, they will achieve this consistently and will in turn be able to help others produce quality code.

Complexity

As engineers become more experienced, they will be able to handle issues of increasing complexity with more ease. This is very closely aligned with ambiguity.

Simple projects have no external dependencies, they can be built without very much specialist knowledge, and usually take a short amount of time to complete. They may produce features of a high impact, but the work itself is low risk and there is very little chance of something going wrong.

Another way to think about simple projects is that they do not cost as much as complex projects to execute.

Complex projects require coordination with many external dependencies, specialist knowledge is required to write the code, and specialist knowledge is required to review the code. They may also have very vague requirements at the start. These projects can take many months to deliver and carry a higher risk of failure.

Security

Engineers need to be able to fix security issues when they arise, and as engineers become more senior they need to become more adept at preventing security issues from being introduced.

Security also encompasses the domain of compliance and more experienced engineers need to be aware of the compliance implications of the requirements that they are asked to build, and be prepared to question these requirements if necessary.

Technical Stewardship

Stewardship refers to caring for the code base, looking out for how changes are made, and considering how new work fits within the existing classes and modules of the system.

As an engineer becomes more senior, they start to describe the direction that the codebase needs to take.

Performance

This category is concerned with how an engineer's code performs in a production environment. This includes looking at the resources required to run the features that are in the engineer's domain. Some examples are processing power, network resources, or disk space.

Junior engineers will be looking at their work and checking it's performance, and at more experienced levels, these engineers will need to verify the performance of the code that is inside of their domain.

Open Source

With the nature of GitLab being open source, we want to encourage engineers to be part of the open source community.

Intermediate Senior Staff
Technical Competencies: Quality
  • Expected to write tests with every MR and work to uplift the quality of the code.

  • When working in an existing area of the code base, is able to recognise and propose an improvement. Is able to give an estimate and execute on proposal that does not affect deliverables.

  • It is important that at every level we adhere to the minimum requirement of writing tests with every MR.

  • Expected to uplevel the quality of the code.

  • When working in an existing area, strives to leave it in a better state than before.

  • Improves the state of our test framework and any other dependencies.

  • Work to guide others and improve the performance of the tests.

  • Always looks to improve our test coverage with every MR coded or reviewed.

  • A champion for Quality and makes sure it is everyone’s responsibility.

  • Mentor others on how to keep the quality bar high.

  • Hold MRs to our high standards of done and work with engineers to improve their tests and prevent future regressions.

  • Takes on initiatives that address performance issues and work with the quality team on any initiatives that would simplify life for the developers and contributors.

  • Champion for tech debt, customer issues, and high severity bugs.

Technical Competencies: Security
  • Is aware of company established development processes that are aimed at reducing security related issues. Is able to produce a solution based on the said processes.

  • In addition to fixing security issues, contribute to the team’s understanding of security and how they impact the team’s domain.

  • Able to take on issues, come up with an effective approach and deliver a working solution.

  • A champion for security.

  • Work closely with our internal security team, provide guidance to others on the team regarding how to properly address security issues and vulnerability.

  • Expert at using the security features of our product and mentor to others to ensure we adopt our own tools.

  • Provide feedback to the secure team and act as a customer for this stage of the product.

Technical Competencies: Complexity
  • Able to tackle all but large issues independently. Large issues with provided clear requirements and design implementation require little effort, issues that are not clearly defined require team assistance.

  • Asks good questions to clarify expectation.

  • Ask for help when an issue is taking longer to implement, works with the team to split issue into further issues.

  • Able to take on large issues with vague requirements and design implementation.

  • Asks good questions to clarify expectation.

  • Recognizes when an issue becomes much larger than originally expected and able to create further issues and propose the next simplest implementation to follow.

  • Able to take on complex requirements and decompose them into a proposal of small deliverables.

  • Able to quickly pivot a solution based on feedback or complexity.

  • Mentors and guides others on the team to achieve this goal

Technical Competencies: Technical Stewardship
  • Aware of technical debt and tries, as far as reasonable, to not introduce more of it.

  • Perform thorough reviews within their domain and submit helpful comments.

  • Care for GitLab’s code base.

  • Provide helpful reviews across many domains and be mindful of how changes may impact other teams.

  • Be a Maintainer for smaller projects.

  • Be a gate keeper for quality; either as a CE/EE Maintainer or working towards this responsibility.

  • Expected to make this achievement as one of the top goals.

Technical Competencies: Performance
  • Able to resolve moderately complex performance issues independently.

  • Able to monitor and debug performance issues of moderate complexity and resolve them.

  • Able to resolve complex performance issues and mentor others on best practices.

  • Understands how code performs in production on GitLab.com and impact of the architecture and dependencies required for the self-hosted product

  • Able to resolve complex performance issues and mentor others on best practices.

  • Understands how code in their domain performs in production on GitLab.com and impact of the architecture and dependencies required for the self-hosted product.

  • Able to guide and discuss performance issues from customers and quickly provide solutions that align with product direction.

  • A champion of technical initiatives in this area and works closely with product to help prioritize the work.

Technical Competencies: Open Source
  • Encourages participation from those in the community.

  • Act as coach for open source contributors.

  • Encourage participation from those in the community.

  • Active participants in open source.

  • Act as coach for open source contributors.

  • Encourage participation from those in the community and contribute bugs and features to upstream dependencies where appropriate.

Leadership Competencies

Growing Others

Here we are looking at how an engineer helps others to grow. This can be by giving fair and kind code reviews, providing timely feedback, or more formally - through mentorship. "Others" in this case can refer to team members, other engineers, community members, or even other GitLabbers outside of the Engineering function.

Communication

This ranges from managing expectations with your manager and your team to finding simple and easy ways to explain technical concepts to non-technical people that interact with your team. Communication becomes more nuanced as your scope of influence changes because your voice carries to a broader range of people.

Ambiguity

At the start of an engineer's career, requirements are well constructed and the problem to solve is clearly articulated. As they become more senior, they need to be more comfortable when requirements are less clearly defined and when the problem itself may not be well understood. The most senior engineers may even be in a position where they know that something is wrong, but they are not exactly sure what it is - and they work to define the problem.

Business Acumen

This category looks at how an engineer views their work in the context of the goals of the business and the direction of the company.

Process

Here we look at how engineers view the processes that they need to operate within.

Intermediate Senior Staff
Leadership Competencies: Growing others
  • Still largely concentrating on growing themselves.

  • Continually looks for opportunities to grow their technical skills

  • Often works with other team members to grow their own understanding of the team’s domain through code reviews, pair programming or mentoring sessions.

  • Participates in code reviews and uses best practices when giving and receiving feedback.

  • Provides additional feedback whenever possible (i.e. 360s, Pulse, etc).

  • Continually works with others in their section to help those individuals grow their understanding of the team’s domain and technology.

  • Participates in code reviews and uses best practices (https://docs.gitlab.com/ee/development/code_review.html#best-practices) when giving and receiving feedback.

  • Provides additional feedback whenever possible (i.e. 360s, Pulse, etc).

Leadership Competencies: Communication
  • Communicates clearly, and effectively in both written and verbally, both internally, and with customers.

  • Follows the GitLab communication guidelines.

Leadership Competencies: Ambiguity
  • Delivers work given clear requirements within the context of their team.

  • Makes responsible decisions, and evaluates trade-offs.

  • Remains calm under pressure.

  • Delivers work given unclear requirements within the context of their team.

  • Makes responsible decisions, and evaluates trade-offs.

  • Maintains calm under pressure.

  • Delivers work given unclear requirements within the context of their section.

  • Makes responsible decisions, and evaluates tradeoffs.

  • Maintains calm under pressure.

Leadership Competencies: Business Acumen
  • Demonstrates knowledge about their features and caregory and how it fits into their group.

  • Demonstrates knowledge about their groups, and how their stage fits into the larger business.

  • Also exhibits an understanding of a number of other team’s products

Leadership Competencies: Process
  • Works effectively within established processes, and keeps themselves current as processes change.

  • Seeks to understand how their works integrates with processes across the company

  • Seeks to understand how their work integrates with processes across the company.

  • Looks for opportunities for process improvements within their team and works with others to implement process changes

  • Works effectively within estabilshed processes, and keeps themselves current as processes change.

  • Looks for opportunities for process improvements for their section and works with others to implement process changes.

As CSV