Merlijn van Ittersum

Senior Software Engineer

About Me

Introduction

I am a software engineer with 15+ years of experience building business critical production systems.

My focus has been mainly on backend systems based on the JVM. I am most proficient in the Scala language but I am no stranger to Java. When needed I can also be of help in frontend development where I most familiar with the TypeScript and React combination.

Most systems I have worked on have been distributed in nature so I am very familiar with challenges in this domain. My experience includes:

  • Managing distributed systems using Kubernetes or Nomad
  • Cloud platforms to host these systems, in order of most familiarity: Azure, AWS, GCE
  • Building automated pipelines for Continuous delivery on various platforms such as Azure pipelines, Github Actions and Jenkins
  • Using techniques such as CQRS, sharding and caching to scale systems to handle large traffic volumes.
  • Storing data in databases: Postgres, MySQL and Cassandra as well as search engines, mainly Elastic Search but also Solr
  • Message bus systems such as Kafka and queue systems such as RabbitMq

As well as more technical aspects such as

  • CAP theorem and its implications in practice
  • Distributed state and it’s challenges, such as preventing split brain
  • Dealing with systems that maintain their own cluster state (Akka)
  • Different consistency models: ACID vs eventual consistency models such as CRDTs
  • Event sourcing

Additionally, the principle “you build it you own it” has always applied for the code that I have written. Meaning I have always been responsible to maintain and operate systems as well. This comes with additional challenges

  • Gaining insights into systems and being able to debug them through observability stacks (logs, metrics, traces). Most notably ELK and Datadog
  • Responding to issues reported by automated monitors (preferably) or customers
  • Being “on call” for 24/7 stand by using PagerDuty

Tech profile

Tier 1 (Daily driver)

Scala, git & Github, Intellij IDEA, Linux, MacOS, Docker, terminal, bash & zsh, ssh, Kubernetes, Kafka, Elastic Search, Postgres

Tier 2 (Proficient)

Java, Typescript, React, helm, nginx

Work Experience

DHL

dhl.com

Senior Backend Software Engineer (Freelance)

January 2023 - Present

Backend Developer at Team B2X

Team Responsibilities:

  • Management of the primary service for label/parcel intake, > 1 million parcels per day. Including 24/7 on-call duty
  • Management of My DHL Parcel (MDP) portal for business customers

Tech stack

Most of the backend is written in Scala using various frameworks such as akka, Play and tapir. A small percentage is using PHP. Services deployed on Kubernetes hosted on Azure, deployed using Helm with Azure pipelines.

The frontend stack is Typescript with React. Assets hosted by Cloudflare workers.

Other components and technologies used: Elastic Search, Kafka, Postgres

Way of working

Local flavour of Scrum/kanban with sprints of 3 weeks. Retro’s, refinements. PR reviews.

Projects

Numerous migration projects, the largest of which were:

  • All services (30+) migrated from MesOS to Kubernetes. Long project (> 6 months)
  • Kafka on-premise migrated to Confluent Cloud
  • Approximately 10 Postgres databases migrated to Azure Postgres Flexible Server

Notable features developed

  • Matrix barcodes on labels for improved scannability
  • Account managers feature in MDP
  • Upgrade the Direct Print Desktop application to support OS native printer drivers
  • Integrating the support system with an AI chatbot

Technical improvements:

  • Contract-first approach for communication using OpenAPI specs (for FE) and gRPC (BE)
  • Observability, improved monitoring & alerting on critical systems and data flows

Marktplaats

marktplaats.nl

Senior Backend Software Engineer (Freelance)

November 2020 - December 2022

Overview

I joined Marktplaats during a time of reorganization. The reason for this was that the company was sold off to Adevinta by Ebay classifieds group. I experienced both the end of eBay and the start of Adevinta. Because of these hectic times I was part of 3 different teams (see below).

General way of working in all teams

Local flavor of scrum/kanban, ticket system using epics & stories, agile, dev-ops with on-call, git-flow using feature branches, PR reviews

Common tech stack of the platform

  • Backend services : Mostly JVM using Scala with some parts still in Java.
  • Persistence: A mix of MySQL, Cassandra, CockroachDB and ElasticSearch for search.
  • Communication protocols: Thrift for internal, HTTP for external, Kafka for async message delivery, RabbitMq for traditional queue requirements
  • Frontend: TypeScript / React with some parts still in vanilla Javascript
  • Deployment pipeline: Jenkins for building and Nomad (on private cloud) for deployment with some homegrown tooling around it.
  • Developer tooling: GitHub Enterprise, Jira, mix of maven & sbt, docker


Trust, safety & support team

November 2021 – December 2022

This team was responsible for maintaining services related to identity (login, account creation, 2FA, etc…) as well as customer support tooling.

My role

Senior developer contributing to mostly the backend but also frontend. Main contributions:

  • A new customer support tool written in a modern tech stack (TypeScript/React frontend and Scala on backend) to replace an old legacy application still running as .war on bare metal on a servlet container.
  • Various anti-fraud measures on the backend.


Platform modernisation team

May 2021 – November 2021

This team’s purpose was to ‘modernize’ the backend platform. It was later disbanded because of reorganization.

My role

Senior backend developer

Main contributions

  • Helping to finish up a database migration project (switching from MySQ to Cassandra)
  • Implement cleanup of dormant (unused) accounts as part of GDPR. This means that accounts inactive for a long period will be deleted.


Platform project team

December 2020 – May 2021

This team’s purpose was to pick up big projects to improve the platform. It was later disbanded because of reorganization.

My role Senior backend developer

Main contributions

  • Helping on the backend side to finish up a big rewrite of part of the frontend.
  • Mapping out a potential big migration project regarding identity (login, 2FA, account creation, etc…)

Sabbatical

May 2019 - November 2020

After 10 years of working in IT I felt the urge to take a break for a while. I did take some time in the beginning to familiarize myself with Kubernetes which had caught my attention during my last project. Beyond that I traveled around a lot and basically let go of the idea of work for a while. A sabbatical is a very fortunate thing that not many people have the opportunity to experience. I am grateful to have had this time for myself.

Trivento

trivento.nl

December 2014 - May 2019

Consultancy at Trivento

I applied at Trivento with a wish to apply the Scala programming language which, at that point, I was not very experienced with. They successfully found me projects at Wehkamp and ING (see below). I had a very good time here and learned a lot but after almost 5 years I decided to take a break and go freelance.

ING

ing.nl

June 2015 - December 2018

Mobile Onboarding

April 2016 – December 2018

After two POCs we were given the opportunity to develop the backend for the Mobile Onboarding project. This project would allow customers to onboard and open a bank account at ING themselves using only their mobile phone.

https://www.ing.nl/particulier/betalen/bankrekeningen/mobiel-rekeningopenen/index.html

I was involved in this project from start to finish. During this time the Baker process orchestration library was developed to cope with the complex and often changing business process. It was open sourced after some time at:

https://www.github.com/ing-bank/baker

This library is built in Scala using Akka (including clustering, persistence & sharding). Petri nets were chosen for the underlying execution semantics because of its simplicity, mathematical foundation and personal experience with the concept.

My role

My main focus was the design and development of the Baker library although I also contributed to the Mobile onboarding project which the library served.

Way of working

Small team (3 developers), Kanban, agile, dev-ops, PRs & code reviews

Tools used: Docker, Git, Gitlab, Maven, Sbt akka, cats, fs2, scalacheck Kafka, cassandra, jenkins


Scala POC 2

Oktober 2015 - March 2016

Re-building a critical service with high scalability and resilience requirements using the Scala and Akka stack.


Scala POC 1

June 2015 - September 2015

A POC using Scala and Akka to prove the technology is mature and satisfies all requirements to deploy in production at the ING bank.

Wehkamp

wehkamp.nl

January 2015 - June 2015

Blaze

January 2015 – June 2015

A new platform developed from the ground up for Wehkamp BE. Envisioned to later replace the .NET based architecture of Wehkamp NL. Based around a micro service architecture and hosted on AWS following the principles from the reactive manifesto: responsive, resilient, message driven & elastic.

My role

Developer in a feature team. Responsible, as a team, for the design/ development/testing/deployment & maintenance of a few micro services. The main focus was on the Scala backend but features sometimes also touched on the frontend which was written in AngularJS.

Way of working SCRUM, agile, dev-ops, Gitflow (PRs & code reviews)

Applied methods

  • Micro service architecture
  • Actor systems using Akka
  • Functional programming, event sourcing & CQRS
  • REST APIs
  • Private cloud deployment on Mesos / Marathon

Tools used Git, Github, Scala, sbt, Javascript akka, spray, scalaz, AngularJS (1.x) Bamboo, ansible, docker, mesos / marathon, amazon AWS

Stream

streamconsulting.nl

July 2009 - September 2014

Statebox

September 2009 - September 2014

Long running project that was the core of a SAAS solution by Stream B.V. of which Econosto and Dienst Justitiële Inrichtingen (DJI) at that time were the most important clients.

This product involved a low latency process engine based on petri nets which was tightly coupled with Drupal, which hosted all the business data of the process cases. A backend service in Java managed the process flow and a frontend written in GWT (java compiled to javascript) could be used to investigate process cases and their state and act on them.

My role First co-developer, then project lead (from 2011), small team 2-3 devs.

Way of working Loose kanban style.

Most important contributions

  • A petri net extension system (arc-inhibitors, type restrictions)
  • A Test platform with DSL
  • A Scheduler/execution engine
  • An immutable/persistent collection library for Java

Education

Universiteit van Amsterdam

Master Artificial Intelligence

2007-2009

WO, Master Artificial Intelligence (Universiteit van Amsterdam) Unfinished because of a full time job at the “Stream B.V.” start-up

Erasmus Universiteit Rotterdam

Bachelor Informatica & Economie

2002-2006

WO, Bachelor Informatica & Economie (Erasmus Universiteit Rotterdam) Diploma received in May 2006

Goudse Scholen Gemeenschap (Gouda)

VWO

1995-2001

Diploma received in June 2001

A Little More About Me

Besides software engineering I have a few other hobbies:

  • Running
  • Hiking
  • Guitar playing