Leaving GitLab

I have nothing but appreciation and gratitude for my time at GitLab. It was the chance of a lifetime to join a company during a hypergrowth phase, through an IPO, and beyond. But after almost seven years, I felt it was the right time for me to move on.

The beginnings

It still feels like pure luck, but in 2019, I changed my LinkedIn profile to “Fullstack Engineer”. Shortly after, I was contacted by a recruiter because GitLab was looking for its first Fullstack Engineers. My desire to work on developer products and the company’s values aligned well. The interviews went smoothly, and I still remember how excited I was when I got the offer.

Screenshot of confirmation email

The email that changed the next seven years.

I joined during a time when GitLab tripled in size, from a few hundred to over a thousand employees. Impostor syndrome kicked in quickly, but I found relief in a German saying, “Alle kochen nur mit Wasser”:

Everyone only cooks with water.

The scaling challenges were the most interesting to me and the biggest opportunity to grow. With a larger company, a larger user base, and more traffic, nothing is quite that easy anymore.

  • Want to run a data migration? Zero downtime is a must, which makes it at least double the effort.
  • Want to add a new API endpoint? Be deliberate with the design, because it will be here forever.
  • You think SaaS is hard to work on? Let me tell you about self-managed software.
  • Anything you ship needs to scale from day one.
  • Want to remove a feature? Assume at least one customer depends on it.
  • The codebase is large and old. Side effects are inevitable, and there are features you have never even heard of.

The list goes on and on, but some of the challenges are not visible from the outside, which makes complaining easy.

Screenshot of GitLab contributions

A 3D print of my contributions.

Remote work is awesome. But in-person connections are too

GitLab was fully remote from the beginning. While I had worked remotely before, I still had an office I could go to for in-person connections. But my fear that I might feel lonely went away pretty quickly. In my second week, I got the opportunity to meet the whole department for an offsite in Vancouver. In my third week, I traveled to Warsaw to be a coach at Rails Girls because my soon-to-be best work buddy Gosia organized it.

These in-person connections and additional virtual coffee chats made it really easy to feel connected. I don’t want to go back to an office anymore, but those moments made later Slack conversations easier because there was already a real person behind the avatar.

My management journey

The options to switch positions were limited in the smaller companies I had worked at before. My goal had always been to get into management, and so after two years in the Growth department, I became a manager and suddenly led a team of eight engineers.

If you ever talked to me or read this blog, you know how that journey ended as I realized management wasn’t for me.

But I am so glad I tried it out. The lessons I learned were invaluable for my career and eventually helped me become a Staff Engineer. But we’re getting ahead of the story. Before that, I got to experience my first IPO.

Paper money became worth something

It was the first time I had a stake in a company. But I didn’t know what a 409A valuation, strike price, or exercise price really was. When I signed the contract, stock options felt like paper money until they became real in 2021. So I got the full experience of selling shares and dealing with the taxes that came with it. Yikes.

IPO

Following the IPO from home.

I obviously got lucky here. But exercising stock options before the IPO also felt like a huge risk because you pay taxes for something that could still become worthless.

IPO swag

My IPO swag arrived.

A few months after the IPO, I made the switch back from management that I mentioned earlier. I was a Senior Engineer again, but rather unhappy with the work I was doing. It didn’t feel challenging enough. By the end of 2022, and especially in 2023, our industry started changing. LLMs became a thing, and I was chosen to be part of the new AI team.

The AI era

In hindsight, the early days of GitLab’s AI team in 2023 were my favorite time there. We had these daily standups where we asked ourselves: what can we ship by the end of the day? It was exciting and energizing to work with that excellent team.

We built a framework to support other teams that were building AI features within GitLab. I am still proud to say that I shipped the first AI feature in GitLab and enabled streaming Chat responses.

Back then, context windows were small and there was a lot of luck involved in getting proper JSON responses, let alone stable tool calling. It’s amazing to see how much better LLMs and AI tooling have become since then. Many things we had to build ourselves during this phase were later commoditized by LLM providers, while other companies started building whole products around similar ideas.

After my time in the AI team, I started looking for something new again. My manager at the time encouraged me to go for a promotion to Staff Engineer, but I was not really interested in that title. Ultimately, he made a good point that convinced me: I would not be happy continuing to do the same work for the next few years.

He was right, and I am still grateful that he pushed me. Thank you, David. Becoming a Staff Engineer led me to my next major project.

Leading and learning

After the AI team, I found my place in the Plan department and was trusted to lead the largest migration we had ever done there.

This was a multi-month effort across multiple teams. One of our VPs called it open-heart surgery, and it felt like it. The team even trusted me to change the initial architecture in the middle of the project, which allowed for a safer rollout.

Over time, I took on more responsibilities within the Plan department and led a few more projects. I learned a ton about database optimization, scaling myself as an engineer, and engineering leadership.

One clear advantage of staying with the same company for so long was seeing the consequences of my own decisions. There were moments when colleagues asked me about code I had written five years earlier because they needed to touch it again. Without git blame, I sometimes would not have believed it really was my code. But these were real learning opportunities that you otherwise can’t experience.

Leaving

My first manager at GitLab told me his goal was to prepare me for my next job. He said that during my first week at GitLab. I was confused back then because I had just started, but now I know what he meant.

The decision to leave wasn’t easy because this job was a huge part of my life. During these seven years, I moved between three different apartments, met my partner, lived through a freaking pandemic, started learning a new instrument, and collected many more memories along the way.

Screenshot of farewell call

I didn’t spare my team a goodbye tune.

Over time, many coworkers became friends, and I loved the feeling that whenever I traveled, a colleague was likely close by. The people were the best part, and I am going to miss them.

But I think my first manager was right. GitLab prepared me for whatever comes next, and now feels like the right time to find out what that is.