Builds


Some of the projects I have been a part of shipping.

I’ve worked in Shopify sites, react SPAs, react-native cross-platform apps, ruby on rails, typescript, flow, c#, java, vue to name a few. I’m a fullstack engineer who is happiest working directly on the product with a cross-functional team.

[GitLab] Credits and Usage Billing

GitLab introduced Duo Agentic Platform (DAP) in early 2026 and as part of that effort monetization had to evolve within GitLab.

While tokens and charging for usage is pretty standard in AI products, this was not how GitLab has been charging customers up till now so the foundations for event ingestion and correct billing were not in place.

Role: Engineering Manager for 2 of the ~9 teams involved. Responsible for staffing and keeping the project on track. Collaborated with engineers on architectural design and planning breakdown.

[GitLab] Quarterly subscription reconciliation

GitLab introduced quarterly subscription reconciliation. To understand the value of Quarterly Subscription Reconciliation it helps to understand the pricing model that was being phased out, true-ups.

In a true-up pricing model, customers can add users throughout the year and would pay for additional seats during renewal of the next term.

  1. User subscribes to Premium for 6 seats
  2. Throughout the year the user adds 7 more seats, to a total of 13
  3. During renewal the user will be charged for 20 seats (13 in the new term + 7 that were added throughout the year)

This is a confusing and frustrating experience for customers since intuitively the renewal total should be 13. GitLab opted for the true-up model in large part because the product is distributed as a self-managed (you install and run the instance yourself) and as a SaaS product. The true-up model means GitLab can be pretty hands off of your self-managed instance.

The confusion and frustrations around the true-up model were severe enough that Quarterly Subscription Reconciliation was implemented. It’s quite a title for a project (internally the project was called Super Sonics) but it is fairly descriptive. GitLab will count and charge (reconcile) customers every 3 months (quarter).

Role: Engineering Manager for 1 of the teams involved. Responsible for staffing and keeping the project on track.

[GitLab] Deprecating Bronze and Starter tiers

GitLab moved to a three-tier subscription model deprecating the lowest subscription tiers at GitLab, Bronze(SaaS offering) and Starter(self-managed offering).

On the surface this should be an easy change, going from 4 tiers to 3, but in practice we found that GitLab was built with hard coded functionality that a Starter tier exists in the codebase. This is not too surprising given the state of the market when GitLab introduced monetization (you’re a startup? Slap some payments in there and don’t touch the code again unless you have to)

Add to this technical debt that

  • This was a lynchpin project for GitLabs IPO (time pressure)
  • There was a large marketing campaign planned that needed to be timed with the release (time pressure)
  • A promotional upgrade had to be rolled out at the same time (additional scope)
  • Features on the Bronze/Starter tier were either moving up to the next tier or down to Free. Our team had to communicate with feature owners to push decisions (coordination overhead)
  • Bronze/Starter was being deprecated not removed. We had to support the deprecated lowest tier for a year while nudging customers to upgrade

Role: Frontend Engineer and Engineering Manager. I transitioned from individual contributor to engineering manager during this project. I did a lot of project planning and built a good portion of the implementation before handing the implementation over.

[Leo Innovation Lab] Rewrite native iOS and Android apps to React-Native

Leo Innovation Lab was an incubator from Leo Pharma. Exploring digital solutions to help patient care.

One of the products was Imagine, an app where users with a chronic skin disease could take pictures and compare their progression over time. There was some nifty computer vision technology to guide the user. I didn’t get to build that nifty tech since it was implemented before I joined but I was part of rewriting the two native apps to react-native.

At the time react-native had gotten to the maturity level that teams could ship features faster across both platforms, if the teams invested enough resources to build a cross-platform app in the first place.

Role: React Native engineer. My experience with react made it easier to pick up react-native. At the same time I was fortunate enough to learn a ton about app development from the team of native app developers.

[ReonTech] prentagram.is - WYSIWYG christmas and postcard builder

Christmas cards with photos of the family is a big tradition in Iceland. The goal here was to build a website where users could upload, edit, and add text, to photos. We would then assemble the pieces to a christmas card (or postcard in the off-season) which we would ship directly to the recipient.

The main challenge here was to accurately reflect on the web what the end result would be. Customers had to see what they were buying before they were willing to purchase.

This was the first piece of code I received payment for in my career. I worked way too hard, took on way too many things, and didn’t ask for help when I should have. I am still grateful to the owner of ReonTech for taking a chance on me at that point in my journey. I learned so much throughout the process and in the first christmas of this project, roughly 80% of Icelandic households received a card that was made through our website.

Role: All-the-things. In real startup fashion (and young gun fashion) I ended up saying yes to all the tasks and working like crazy to deliver. I built a UI that was functional and a backend that could create previews on the fly as well as generate PDFs for the printshop to consume. I was out of my depth but I just kept swimming until I made it.