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

Engineering Career Framework

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 & Inclusion

More details about Diversity & Inclusion 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.

  • Engages with the stable-counterparts for their team looking at how to improve the working relationships and processes.

  • Represents their team, and considers the impact to the team, when in conversations with others.

  • Provides feedback that focuses on the business impact of the behaviour.

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

  • Regularly engages with other teams in their section.

  • 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.

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

  • Helps others in their group to achieve their group’s goals.

  • Follows up on suggestions that they make and issues that they create.

  • 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.

  • Seeks out ways to be more effective in their role, while also starting to mentor others in ways to work efficiently.

  • Proactively takes on 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 & Inclusion
  • Requests expert help from others recognising that diverse opinions/experience improve the quality of their solution.

  • Shows that they are aware of differing priorities between groups.

  • Seeks out diverse opinions to improve the quality of the team’s work, for example through code review from outside the team.

  • Uses people’s talents to maximize the results of their group.

  • 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. For example, advocating for technical debt resolution and understanding the opportunity cost in comparison to a quick customer win.

  • Creates proposals for their team that clearly defines the problem, offers alternatives, and proposes a solution. These proposals are small in scope, looking to address problems with a small surface area.

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

  • Independently balances short term gains and long term benefit.

  • Creates proposals for the team that have a wide scope but still contain an iterative proposal for delivering the outcome.

  • Identifies opportunities to improve the processes around iteration.

  • 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 high 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
  • Writes tests with every MR and works 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.

  • Able to give an estimate and execute on proposals that do not affect deliverables.

  • When working in an existing code area, leaves it in a better state than before.

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

  • Guides others on improving their 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.

  • Adheres to security best practices for their domain.

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

  • Contributes to the team’s understanding of security and how they impact the team’s domain.

  • 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 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 an implementation.

  • 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.

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

  • Performs thorough reviews within their domain and submits helpful comments.

  • Helps to set and enforce coding standards.

  • Looks to maintain coding consistency across the code base.

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

  • Be a Maintainer of at least one (smaller) project.

  • Be a gate keeper for quality as a Maintainer of your team’s primary project (usually GitLab CE & EE).

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.

  • Mentors others on best practices.

  • Understands how code in their domain performs in production on GitLab.com.

  • Understands 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.

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

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

  • Act as coach for open source contributors.

  • Actively participates in open source.

  • Contribute bugs and features to upstream dependencies where appropriate.

Leadership Competencies

Leadership is not the same as Management. Both individual contributors and managers need to exhibit good leadership. Management is more concerned with making sure that projects are successful and that teams form good working relationships together. Leadership is about providing a clear and compelling direction to follow. These categories look at leadership from the IC's perspective.

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 concentrates 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).

  • During reviews, takes time to explain why code could have been written or approached in a different way.

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

Leadership Competencies: Communication
  • Communicates clearly and effectively, especially in writing, when working with peers, stable counterparts or their manager on technical tasks or issues.

  • Follows the GitLab communication guidelines.

  • Seeks assistance in clearly managing expectations around the delivery of their work.

  • Communicates clearly and effectively, both written and verbally, when working with team-members, managers, customers and the wider community while advising others, setting expectations, or suggesting improvements.

  • Communicates clearly and effectively, both written and verbally, when working with managers, directors, customers and other sub-departments, while advising others, setting expectations, or acknowledging mistakes.

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.

  • Able to deliver results despite starting from unclear requirements.

  • Makes responsible decisions, and evaluates tradeoffs.

Leadership Competencies: Business Acumen
  • Demonstrates knowledge about how their group’s product category and features fits into their stage.

  • Demonstrates knowledge about how their group and stage fit into the larger business.

  • Able to suggest alternative solutions to customer problems based on what they know about other areas of GitLab.

  • Exhibits a deep understanding of all of the products owned by their section, how customers use them, and how they fit in to the larger business.

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

  • 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.

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

Download In CSV Format

This framework is available for download in a csv format.