The journey
Eight years,
one through-line
This isn't an employment history. It's the path a way of thinking took — from writing whatever code was in front of me, to designing the systems other people build on. Each role solved a harder version of the same problem.
8+
Years engineering
5
Defining chapters
1→7
Channels scaled at Clever
0
Critical data lost migrating
Jump between chapters · tap any role to expand
The breadth years. Before specialising, I needed to understand how every layer of a system fit together — frontend to database to deployment. I took on whatever was in front of me: building features, fixing production incidents, writing the deployment scripts nobody else wanted to. It was unglamorous and it was the most important education of my career.
Responsibilities
- Built and maintained full-stack web applications across multiple client projects
- Wrote backend services in C# / .NET and frontends in JavaScript
- Owned database schema design and query optimisation for relational stores
- Handled production incidents and learned to debug systems I didn't write
Achievements
- Shipped production features across a dozen client codebases
- Developed a working mental model of full request lifecycles — browser to DB and back
- Earned the trust to own increasingly complex pieces of work
Architecture
Mostly monolithic MVC applications backed by SQL Server. Simple by today's standards — but the right place to learn why the patterns that came later actually exist.
Technologies
Lesson learned
You cannot architect a system you don't understand end to end. Generalism early earns you the right to specialise later.
Aller publishes some of Scandinavia's most-read magazines and digital properties. Their ageing Umbraco CMS couldn't keep up with content velocity or multi-brand ambitions. I led the backend of a migration to Optimizely across multiple brands — my first real encounter with the gravity of legacy systems and the discipline required to move them safely.
Responsibilities
- Led backend development for a multi-brand CMS migration from Umbraco to Optimizely
- Designed content models and migration pipelines spanning years of editorial data
- Integrated Optimizely CMS and Commerce with existing Azure services
- Worked directly with editorial teams to understand real publishing workflows
Achievements
- Migrated multiple brand properties to Optimizely with zero critical data loss
- Enabled editorial teams to publish significantly faster post-migration
- Set the foundation for multi-brand digital expansion
Architecture
A CMS-centric architecture on Optimizely, integrated with Azure services. The hard part wasn't the new system — it was mapping a decade of legacy content into it without breaking the live properties readers depended on daily.
Technologies
Lesson learned
Legacy systems aren't failures — they're archaeology. Every decision in an old codebase made sense to someone once. Respect that before you replace it.
Commerce found me before I went looking for it. One project led to another until the pattern was undeniable: this domain rewards depth. I built a multi-tenant B2B platform integrated with SAP ERP for an industrial distributor, and launched direct-to-consumer stores for content creators. Different scales, same core question — how do you make the experience feel effortless for the person on the other side of the screen?
Responsibilities
- Architected a multi-tenant B2B commerce platform on Commercetools
- Integrated commerce systems with SAP ERP, Salesforce, and custom pricing engines
- Built D2C storefronts on Shopify Plus with automated lifecycle flows
- Designed approval workflows and custom pricing logic for enterprise accounts
Achievements
- Reduced B2B order processing from 3 days to under 4 hours
- Onboarded 40+ enterprise accounts within the first quarter post-launch
- Launched 5+ branded D2C stores converting at 4–8% per campaign
- Eliminated 90% of manual order-processing steps through automation
Architecture
API-first commerce on Commercetools for B2B, with an integration layer brokering between the storefront, SAP, and a custom pricing engine. For D2C, Shopify Plus extended with custom apps and event-driven email automation.
Technologies
Lesson learned
The hardest problems in commerce are almost never in the frontend. Effortless experiences are built on the integration plumbing nobody sees.
Where I work today. Clever operates Denmark's largest EV charging network, and when I arrived the platform had grown faster than the architecture beneath it — several teams integrating directly with the same third-party APIs, a monolith buckling, a single change quietly breaking three other things. I rebuilt the integration layer from the ground up, and I've stayed to shape what the platform becomes next. The rebuild was the start, not the engagement.
Responsibilities
- Own the architecture of the core integration platform
- Replaced direct third-party dependencies with a centralised proxy service layer
- Design reliable event-driven communication between distributed services
- Drive observability — logging, tracing, and fault diagnosis across the system
Achievements
- Scaled from 1 to 7+ active sales channels
- Centralised all third-party integrations behind a single proxy service layer
- Took full control of the onboarding flow, end to end
- Dramatically improved system observability and fault tracing
Architecture
Microservices on Azure Container Apps communicating asynchronously via Azure Service Bus, with APIM as the gateway for third-party integrations. Infrastructure as code throughout. Distributed transactions handled explicitly rather than hoped for.
Technologies
Lesson learned
The most valuable work in software isn't writing code — it's understanding systems well enough to change them without breaking what they support.
Everything that doesn't fit inside a single employer. Alongside the day job I run a small independent e-commerce practice — Shopify and Commercetools builds for a handful of clients — and I'm founding VelaCommerce, a commerce platform for the mid-market gap I kept running into. The day job is where I design systems at scale; the side projects are where I own the whole thing, end to end.
Responsibilities
- Independent e-commerce builds on Shopify and Commercetools for select clients
- Founding VelaCommerce — a commerce platform for the underserved mid-market
- Productising years of commerce work into something I own
- Writing publicly about architecture and engineering
Achievements
- Launched and maintained D2C and B2B stores alongside a full-time role
- Began founding VelaCommerce, turning consulting insight into a product
- Started writing publicly about architecture and engineering
Architecture
Cloud-native by default — Azure and .NET where it fits, TypeScript and PostgreSQL where it's lighter. Event-driven where coupling matters, observable by default, built to be maintained by whoever inherits it.
Technologies
Lesson learned
Building a product is genuinely different from running a services practice — different incentives, feedback loops, and kinds of failure. I'm still early in learning the difference.
The pattern
Each chapter was the previous one's hard mode
Full-stack work taught me how systems fit together. Media taught me to respect scale and legacy. Commerce taught me that the real complexity lives below the surface. Clever is teaching me to change critical systems without breaking them — I'm still there. And the side projects are teaching me what it means to build something of my own.
The titles changed. The fundamental work — understanding a system deeply enough to improve it — never did. That's the through-line.