cswork / libraryOpen practice workspace

Interview guides · GitLab

GitLab Software Engineer Interview Guide

GitLab Software Engineer interview guide: reported rounds, questions and how candidates describe the process.

The 60-second brief

As a Software Engineer at GitLab, you contribute directly to one of the world's largest open-core DevOps platforms. You are responsible for designing, building, and maintaining robust features that power the entire software development lifecycle—from project planning and source code management to CI/CD pipelines and security defense. Operating within a massive, single-application codebase built primarily on Ruby on Rails, Vue.js, and Go, your work impacts millions of developers and enterprise engineering teams globally. The role at GitLab demands technical rigor and a high degree of autonomy. Because GitLab operates as a 100% remote, asynchronous-first organization, software engineers are expected to be self-directed problem solvers who communicate with exceptional written clarity.

This guide is scoped to a Software Engineer candidate at GitLab.

Focus areas

  • Merge request (MR) review
  • Backend technical interviews
  • Code review skills

The GitLab interview process

GitLab candidates report 5 rounds over 4-6 weeks. The stages below are what candidates describe, not a published process.

Recruiter Screening

Initial discussion with a recruiter to review your background and alignment with the role.

What to demonstrate

  • Initial discussion with a recruiter to review your background and alignment with the role
  • Depth in Merge request (MR) review

How to prepare

  • Be able to walk your CV end to end in two minutes, and say why this company specifically.
  • Have your salary expectations, notice period and location constraints ready, and ask for the rest of the loop in writing.

Technical Assessment

Asynchronous task involving a Merge Request review or a small coding project, simulating real work.

What to demonstrate

  • Asynchronous task involving a Merge Request review or a small coding project, simulating real work
  • Depth in Merge request (MR) review

How to prepare

  • Answer aloud and timed: "Explain how you would refactor a heavy SQL query that is causing 500 error responses during peak database traffic."
  • Answer aloud and timed: "What refactoring steps would you take to modularize a complex HTML/SCSS layout using Vue component best practices?"

Technical Interview

Live session where you pair with an engineer to discuss your assessment and implement fixes.

What to demonstrate

  • Live session where you pair with an engineer to discuss your assessment and implement fixes
  • Depth in Merge request (MR) review

How to prepare

  • Answer aloud and timed: "How do you approach writing clean, maintainable unit and integration tests in a large Ruby on Rails application?"
  • Answer aloud and timed: "If Nginx returns a 502 Bad Gateway error on a self-managed GitLab instance, what diagnostic steps would you take to locate the root cause?"

Behavioral Interview

Interviews with hiring managers focusing on past experiences using the STAR method.

What to demonstrate

  • Interviews with hiring managers focusing on past experiences using the STAR method
  • Depth in Merge request (MR) review

How to prepare

  • Prepare three examples from your own work, each with a decision you made and an outcome you can quantify.
  • Re-read the description of the behavioral interview above and write down what you would ask to confirm before it.

Values Interview

Discussion on company values and how you handle challenges in remote work and conflict.

What to demonstrate

  • Discussion on company values and how you handle challenges in remote work and conflict
  • Depth in Merge request (MR) review

How to prepare

  • Prepare three examples from your own work, each with a decision you made and an outcome you can quantify.
  • Re-read the description of the values interview above and write down what you would ask to confirm before it.

Where candidates lose points

Study the Public GitLab Handbook

GitLab operates with an unusual level of operational transparency. Reviewing their public handbook—specifically sections covering engineering workflows, code review guidelines, and company values—gives you immediate insight into how your interviewers think and evaluate code.

Embrace the Minimum Viable Product (MVP) Mindset

When answering behavioral or technical design questions, emphasize shipping small, fast, incremental improvements over massive, monolithic rewrites. GitLab strongly favors candidates who know how to break down complex projects into iterative Merge Requests.

Practice Asynchronous Communication Style

Treat your pre-interview written Merge Request assignment like real production work. Write thorough, well-formatted, and empathetic review comments. Explain not just what code should be changed, but why it improves performance or maintainability.

Questions & practice

"How do Golang channels work, and how would you prevent goroutine leaks when handling concurrent jobs?"

Medium · Merge Request Review & Domain Knowledge

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. Distinguish a value from a reference to it, and say which one you handed out.

Follow-up

  • What happens if two callers reach this at the same time?
  • Where could this allocate more than you expect?

"How do you approach designing a scalable web feature that must handle thousands of concurrent file updates as

Medium · System Design & Troubleshooting

"How do you approach designing a scalable web feature that must handle thousands of concurrent file updates asynchronously?"

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. Distinguish a value from a reference to it, and say which one you handed out.

Follow-up

  • What happens if two callers reach this at the same time?
  • Where could this allocate more than you expect?

"How do you prioritize your daily workload and stay productive when working in an entirely remote and asynchro

Medium · Behavioral & Values Alignment

"How do you prioritize your daily workload and stay productive when working in an entirely remote and asynchronous environment?"

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. Distinguish a value from a reference to it, and say which one you handed out.

Follow-up

  • What happens if two callers reach this at the same time?
  • Where could this allocate more than you expect?

"Explain how you would refactor a heavy SQL query that is causing 500 error responses during peak database tra

Medium · Merge Request Review & Domain Knowledge

"Explain how you would refactor a heavy SQL query that is causing 500 error responses during peak database traffic."

Approach

  1. Name the grain you start from and join outward from it.
  2. Check whether any join is one-to-many before aggregating, or the sums inflate.
  3. Say which index the query would use, and what makes it unusable.
  4. Handle the rows that do not match: that is usually the actual question.

Follow-up

  • How does the query change if that join becomes one-to-many?
  • What happens to this when the table is ten times larger?

Find version gaps and relay lag with window functions

Medium · window functions · event tables · frame semantics

outbox_event holds event_id, aggregate_type, aggregate_id, aggregate_version, event_type, payload, status ('pending','published','dead'), attempts, created_at, published_at. A projection is missing rows and you must decide whether the relay skipped events or the consumer dropped them. Write three queries over the last seven days: one listing every aggregate_id whose published aggregate_version sequence has a hole, one giving per-day counts with a running total, and one returning the newest published event per aggregate. For each, say where the window function is evaluated relative to WHERE and LIMIT. PostgreSQL 16.

Approach

  1. Gaps: compute lead(aggregate_version) OVER (PARTITION BY aggregate_id ORDER BY aggregate_version) in a subquery, then filter next_version <> aggregate_version + 1 in the outer query. Window functions are evaluated after WHERE, GROUP BY and HAVING and before the outer ORDER BY and LIMIT, so the predicate cannot sit in the same WHERE clause and PostgreSQL 16 has no QUALIFY.
  2. Say what the seven-day filter does to the answer: it truncates every partition, so the first row per aggregate has no predecessor inside the window and a hole spanning the boundary is invisible. Widen the window, or join to resource.version as the authority for the true maximum.
  3. Running total: SELECT date_trunc('day', created_at) AS d, count() AS n, sum(count()) OVER (ORDER BY date_trunc('day', created_at) ROWS UNBOUNDED PRECEDING). An aggregate inside a window call is legal because grouping runs before windowing. The grouping key is unique per row here so ROWS and RANGE agree, but write the frame anyway — over ungrouped rows with tied timestamps the default RANGE frame pulls in every peer row and the total jumps.
  4. Newest per aggregate: DISTINCT ON (aggregate_id) ... ORDER BY aggregate_id, aggregate_version DESC is the cheap PostgreSQL-only form when an index matches that order; row_number() OVER (PARTITION BY aggregate_id ORDER BY aggregate_version DESC) = 1 is the portable form and needs a subquery for the same evaluation-order reason as the gap query.

Follow-up

  • Relay failover redelivers events. Does a duplicate break the gap query, and how would you detect one from this table alone?
  • Turn the gap check into a continuous monitor rather than a query someone runs after an incident. What does it watch?

"Review this Merge Request and identify any architectural, security, or performance issues within the Rails co

Medium · Merge Request Review & Domain Knowledge

"Review this Merge Request and identify any architectural, security, or performance issues within the Rails controller and Vue.js component."

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

"What refactoring steps would you take to modularize a complex HTML/SCSS layout using Vue component best pract

Medium · Merge Request Review & Domain Knowledge

"What refactoring steps would you take to modularize a complex HTML/SCSS layout using Vue component best practices?"

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

"How do you approach writing clean, maintainable unit and integration tests in a large Ruby on Rails applicati

Medium · Merge Request Review & Domain Knowledge

"How do you approach writing clean, maintainable unit and integration tests in a large Ruby on Rails application?"

Approach

  1. Say who the caller is and what they do when the call fails halfway.
  2. Define the identity of a request so a retry cannot double-apply it.
  3. Separate accepted, pending, failed and confirmed; they are different facts.
  4. Design the error taxonomy before the success shape; callers branch on it.

Follow-up

  • What happens if the caller retries after a timeout?
  • How does a client discover it is on an old version of this contract?

"Walk me through how you would isolate and fix a PostgreSQL connection pool exhaustion error under heavy API l

Medium · System Design & Troubleshooting

"Walk me through how you would isolate and fix a PostgreSQL connection pool exhaustion error under heavy API load."

Approach

  1. Say who the caller is and what they do when the call fails halfway.
  2. Define the identity of a request so a retry cannot double-apply it.
  3. Separate accepted, pending, failed and confirmed; they are different facts.
  4. Design the error taxonomy before the success shape; callers branch on it.

Follow-up

  • What happens if the caller retries after a timeout?
  • How does a client discover it is on an old version of this contract?

"Explain how you would design an iterative Minimum Viable Product (MVP) feature without introducing technical

Medium · System Design & Troubleshooting

"Explain how you would design an iterative Minimum Viable Product (MVP) feature without introducing technical debt into a large codebase."

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

"If Nginx returns a 502 Bad Gateway error on a self-managed GitLab instance, what diagnostic steps would you t

Medium · System Design & Troubleshooting

"If Nginx returns a 502 Bad Gateway error on a self-managed GitLab instance, what diagnostic steps would you take to locate the root cause?"

Approach

  1. Establish what changed and when, before forming any theory.
  2. Pick a bisection that eliminates candidates whichever way it turns out.
  3. Check the instrumentation before believing the symptom.
  4. Separate the trigger from the cause; the deploy is rarely the bug.

Follow-up

  • What would you look at first, and what would it rule out?
  • How would you tell a cause from a coincidence here?

"How do you ensure zero-downtime database migrations when modifying high-volume tables?"

Medium · System Design & Troubleshooting

Approach

  1. Establish what changed and when, before forming any theory.
  2. Pick a bisection that eliminates candidates whichever way it turns out.
  3. Check the instrumentation before believing the symptom.
  4. Separate the trigger from the cause; the deploy is rarely the bug.

Follow-up

  • What would you look at first, and what would it rule out?
  • How would you tell a cause from a coincidence here?

Suggested practice checklist

Built from the rounds and topics GitLab candidates report.

Day 1 — Map the GitLab loop

  • Write out the reported sequence: Recruiter Screening, Technical Assessment, Technical Interview, Behavioral Interview, Values Interview.
  • For each round, write one sentence on what it is judging, from the description above, and mark the one you are least ready for.

Deliverable: A one-page map of the 5 reported rounds, with the weakest marked.

Day 2 — Work Merge request (MR) review

  • Spend the session on Merge request (MR) review, which GitLab candidates report being tested on.
  • Write one worked example in Merge request (MR) review and time yourself on it.

Deliverable: One timed worked example in Merge request (MR) review.

Day 3 — Work Backend technical interviews

  • Spend the session on Backend technical interviews, which GitLab candidates report being tested on.
  • Write one worked example in Backend technical interviews and time yourself on it.

Deliverable: One timed worked example in Backend technical interviews.

Day 4 — Work Code review skills

  • Spend the session on Code review skills, which GitLab candidates report being tested on.
  • Write one worked example in Code review skills and time yourself on it.

Deliverable: One timed worked example in Code review skills.

Day 5 — Answer out loud: Merge Request Review & Domain Knowledge

  • Answer aloud, timed: "Review this Merge Request and identify any architectural, security, or performance issues within the Rails controller and Vue.js component."
  • Answer aloud, timed: "How do Golang channels work, and how would you prevent goroutine leaks when handling concurrent jobs?"

Deliverable: Spoken answers to 2 reported Merge Request Review & Domain Knowledge question(s), under time.

Day 6 — Answer out loud: System Design & Troubleshooting

  • Answer aloud, timed: "If Nginx returns a 502 Bad Gateway error on a self-managed GitLab instance, what diagnostic steps would you take to locate the root cause?"
  • Answer aloud, timed: "Walk me through how you would isolate and fix a PostgreSQL connection pool exhaustion error under heavy API load."

Deliverable: Spoken answers to 2 reported System Design & Troubleshooting question(s), under time.

Day 7 — Answer out loud: Behavioral & Values Alignment

  • Answer aloud, timed: "Describe a situation where you had a strong technical disagreement with a teammate. How did you handle it and reach a resolution?"
  • Answer aloud, timed: "Tell me about a complex technical project you are particularly proud of, focusing on your specific individual contributions."

Deliverable: Spoken answers to 2 reported Behavioral & Values Alignment question(s), under time.

Behavioural preparation

Behavioural rounds judge the decision you made and what it cost.

"Describe a situation where you had a strong technical disagreement with a teammate. How did you handle it and

Medium · Behavioral & Values Alignment

"Describe a situation where you had a strong technical disagreement with a teammate. How did you handle it and reach a resolution?"

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

"Tell me about a complex technical project you are particularly proud of, focusing on your specific individual

Medium · Behavioral & Values Alignment

"Tell me about a complex technical project you are particularly proud of, focusing on your specific individual contributions."

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

"Give an example of a time when you received tough feedback on a code review. How did you process and apply th

Medium · Behavioral & Values Alignment

"Give an example of a time when you received tough feedback on a code review. How did you process and apply that feedback?"

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

"Describe a scenario where you had to ship a feature under tight time constraints. How did you define the Mini

Medium · Behavioral & Values Alignment

"Describe a scenario where you had to ship a feature under tight time constraints. How did you define the Minimum Viable Product (MVP)?"

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?