Benjamin Larsson

Benjamin Larsson

I'm an Experienced Release Engineer at Paradox Interactive. I build the pipelines, tooling and test automation that get games out the door, including Hearts of Iron IV and its steady stream of DLC.

My work is CI/CD, automation and development environments across Windows, macOS and Linux, with Docker and Kubernetes behind it. I also come from the game side. On Bramble: The Mountain King I started as a level designer and programmer, moved into engine programming by extending Unreal Engine, and took on all of the team's IT.

Shipped

Hearts of Iron IV

8 releases

ExpandCollapse
  1. Theater Pack - Hearts of Iron IV: Thunder at our GatesDLC, Experienced Release EngineerParadox Interactive
  2. Focus Pack - Hearts of Iron IV: Peace For Our TimeDLC, Experienced Release EngineerParadox Interactive
  3. Cosmetic Pack - Hearts of Iron IV: Warships of the PacificDLC, Experienced Release EngineerParadox Interactive
  4. Expansion - Hearts of Iron IV: No Compromise, No SurrenderDLC, Experienced Release EngineerParadox Interactive
  5. Cosmetic Pack - Hearts of Iron IV: Prototype VehiclesDLC, Experienced Release EngineerParadox Interactive
  6. Hearts of Iron IV: Bonus Songs PackDLC, Experienced Release EngineerParadox Interactive
  7. Country Pack - Hearts of Iron IV: Graveyard of EmpiresDLC, Experienced Release EngineerParadox Interactive
  8. Expansion - Hearts of Iron IV: GötterdämmerungDLC, Experienced Release EngineerParadox Interactive
  1. Theater Pack - Hearts of Iron IV: Thunder at our GatesDLC, Experienced Release EngineerParadox Interactive
  2. Focus Pack - Hearts of Iron IV: Peace For Our TimeDLC, Experienced Release EngineerParadox Interactive
  3. Cosmetic Pack - Hearts of Iron IV: Warships of the PacificDLC, Experienced Release EngineerParadox Interactive
  4. Expansion - Hearts of Iron IV: No Compromise, No SurrenderDLC, Experienced Release EngineerParadox Interactive
  5. Cosmetic Pack - Hearts of Iron IV: Prototype VehiclesDLC, Experienced Release EngineerParadox Interactive
  6. Hearts of Iron IV: Bonus Songs PackDLC, Experienced Release EngineerParadox Interactive
  7. Country Pack - Hearts of Iron IV: Graveyard of EmpiresDLC, Experienced Release EngineerParadox Interactive
  8. Expansion - Hearts of Iron IV: GötterdämmerungDLC, Experienced Release EngineerParadox Interactive

Bramble: The Mountain King

1 release

  1. Bramble: The Mountain KingGame, Level Designer, Engine Programmer & ITDimfrost Studio
    • Steam Very Positive (94% of 3,312 reviews)
    Bramble: The Mountain King - Launch Trailer

Projects

Release kickoffs

A kickoff meeting for every release that brings everyone involved together early, so what still needs to be done is known and nothing falls between the chairs.

Some of our releases were problematic. After each one I wrote an analytical report on what had gone wrong, and those reports showed problem areas in how we communicate.

The problem

We did not gather the whole group of stakeholders and other important people until very close to release.

What I did

I introduced a Release Kickoff for every release: a shorter meeting with everyone involved in that release. It exists to:

  • Hash out issues early.
  • Make sure everything that still needs to be done is a known-known.
  • Make sure nothing falls between the chairs.

What mattered

A kickoff meeting sounds trivial, and it is. The valuable part was identifying the problem: that our releases kept going wrong because of how we communicate.

release management, communication, process

Cross-platform build sync and launcher

A cross-platform GUI built with Go, Wails and SvelteKit for syncing builds from Azure Blob Storage, tracking GitLab pipelines and launching the game, as part of porting a Python toolset to Go.

Related games:Hearts of Iron IV

Tech:Go,Wails,SvelteKit,Azure Blob Storage,GitLab CI,Agentic AI workflow

  • All platformsWindows, Linux and macOS
  • Less supportCompared with the Python toolset
  • All studiosInternal Grand Strategy Games studios use it

Hearts of Iron IV already had a game binary syncing setup when I joined the project. We ported its Python application to Go. I helped with the port, and my focus was the GUI: a cross-platform frontend that I spearheaded, built using an AI-native, agentic workflow.

The problem

The Python application was complex to maintain, and Python’s handling of dependencies and environments kept causing issues for developers. The shell scripts that came before it were hard to approach for many users.

The tool

The Go version has a shared library with the core functionality, which we built together and which both the CLI and the GUI use. The core tool interfaces with Azure Blob Storage to resolve builds: it syncs binaries and fetches builds by branch, commit or merge request.

My part

  • Helped port the Python application to Go.
  • Spearheaded the GUI for Windows, Linux and macOS, built with Go, Wails and SvelteKit.
  • Built the pipeline tracking, which starts and tracks the GitLab CI pipelines that produce builds.
  • Built the development launcher, with launch presets that users can customize.
  • Built the self-update mechanism, so I could push updates and users could choose when to apply them.

Result

Users no longer had to manage Python environments, and the tool was more accessible than the earlier shell scripts. It needed less support, and the more complex UI made features possible that weren’t before. It is now used across all internal Grand Strategy Games studios.

release engineering, developer tooling, cross-platform

Mutex-locked build pipeline

A GitLab CI design that runs one build per protected branch at a time and always builds the latest commit, instead of building every push.

Related games:Hearts of Iron IV

Tech:GitLab CI,Python,Shell scripts

  • Much lowerBuild costs
  • FasterTime to a downloadable build
  • All studiosInternal Grand Strategy Games studios use it

For Hearts of Iron IV’s development I designed a GitLab CI pipeline that decides when the game needs to be built, so builds stop piling up behind every push.

The problem

Every push to our main branches that contained C++ or other code changes started its own build.

What I built

A pipeline design around a mutex lock:

  • Each protected branch has at most one build running at a time.
  • While a build is running, new pushes don’t start another one.
  • When the running build finishes, a build starts for the latest commit pushed since. The builds for the commits in between are cancelled.

Result

All internal game studios at Paradox Interactive decided to implement the design in their own pipelines. It cut build costs substantially, and it produced builds faster, so developers could download them sooner.

release engineering, CI/CD, pipeline design

Game binary sync and build tooling

An S3-based tool that syncs the custom engine and prebuilt game binaries to the whole team, with CI/CD and tooling behind it.

Related games:Bramble: The Mountain King

Tech:Go,Shell scripts,S3

  • FasterDeveloper environment setup
  • Time savedNo compiling for non-programmers

Bramble: The Mountain King ran on a custom engine, and not everyone on the team wanted to deal with compiling it or the game. I built the tooling that got both to them without that.

The problem

Everyone needed the custom engine. Artists, designers and others also needed working game binaries without compiling anything themselves.

What I built

  • A sync tool on S3 object storage that distributes the custom engine to everyone and the game binaries to the people who didn’t want to compile.
  • Tools for automatic SDK installation and game compilation.
  • CI/CD that built the game and uploaded the binaries.

Result

Developers could be set up in our development environment faster. Non-programmers saved the time they would otherwise have spent compiling a lot of code.

release engineering, CI/CD, build tooling

Interests

The tech I run and spend a lot of time on outside of work.

Self-hosted infrastructure

Dedicated servers and a homelab, joined into one network.

I run my own infrastructure across a datacenter and my home. I use it myself and rent part of it out to friends.

Sites

The datacenter side is dedicated servers that I maintain. The homelab uses the same base setup and is one of the other sites.

Services

Systems are kept separate with LXC and Incus, and most services are containerized. They include web servers, authentication, email, GitLab and LLMs, among others.

Network

A mesh VPN built on WireGuard connects the sites to each other. I have several public IP addresses and manage the DNS and reverse proxies myself.

Storage

Storage pools are mostly ZFS. The sites also use network-backed storage between them, and I host S3-compatible object storage.

Identity

Authentication runs through a self-hosted OIDC provider.