Skip to content

Software,
Architecture
& People.

I’m an all-over-the-stack software engineer and a builder at Duna. I maintain open-source tools a lot of apps run on, and I write about the design of the systems we build.

An ampersand drawn on a drafting grid, with its baseline, x-height and cap height markedfig. 1U+0026 AMPERSANDcap 661x 4800DM Serif Text, 1000 upm

Writing.

Notes on software design, architecture, domain-driven design and distributed systems.

All 26 postsRSS feed

Latest

1 min read

New language, new direction, new content

Over the last couple of years, this blog has gone stale. I intend to change that and produce more content when I learn something new. This new content will still cover a lot of the things you're used to: software design, architecture, domain-driven design, and distributed…

  1. Encapsulating interactions with the outside world in your domain model.

    In my ever-lasting battle against anemic domain models I've developed a preference on how to integrate with the external concerns. In this post I'd like to show an alternative, a strategy on how to keep encapsulating behaviour wile interacting with the outside world.

    4 min readSoftware Design

  2. Use a message envelope

    Event-driven architectures have various styles of communication. In my previous post I described a couple of event types you may see in these kinds of architectures.

    7 min readEvent-Driven Architectureevent sourcing

  3. The different types of events in event-driven systems

    Event-driven systems come in all sorts of shapes and sizes. The obvious commonality is; they all use events to communicate information. These events come in many shapes and sizes, and determining what goes into an event has an immense impact on the design of your system.

    6 min readSoftware DesignEvent-Driven Architecture

  4. Reliable event dispatching using a transactional outbox

    Using events in a system is great, but how do you know for sure if you've reliably dispatched your events? The transportation of events needs to be done reliably while maintaining overall system consistency, be it eventual or immediately.

    5 min read

Open source.

Tools I maintain for the work we do as developers.

Downloads from Packagist
2.48B
Share of every Packagist download
1 in 83
1.2% of all downloads
  • Flysystem

    Since 2013, PHP

    league/flysystem

    PHP’s de facto file storage abstraction. One API for local disks, S3, SFTP and a dozen more, and the engine behind Laravel’s Storage.

    DocsGitHubPackagist

  • EventSauce

    Since 2018, PHP

    eventsauce/eventsauce

    A pragmatic toolset for event-sourced PHP applications, with companion libraries for object hydration, clocks and back-off strategies.

    DocsGitHubPackagist

  • Flystorage

    Since 2023, TypeScript

    @flystorage/file-storage

    The same idea, rebuilt for JavaScript: a type-safe file storage abstraction for Node.js, written in TypeScript.

    DocsGitHubnpm

More on GitHub

About.

Hi, I’m Frank.

At Duna we help regulated companies onboard new customers safely, faster, and with higher conversion. We’re changing how companies stay compliant.

  1. 2023 to now

    Founding engineer, Duna

    Proposed going policy-first and took it from design to delivery: the Policy Engine now powers our onboarding suite and case review. Built the shared tooling we ship on, including an event-sourcing toolkit for high-consistency domains.

  2. 2022 to 2023

    Staff engineer, Personio

    Set the technical direction that unblocked several P0 priorities, built proofs of concept to test the risky parts, and aligned seven engineering teams behind the plan.

  3. 2019 to 2022

    Staff software engineer, Mollie

    Drove Mollie’s EventSystem from first design to long-term tooling and moved the whole organisation onto transactional outboxes. Wrote the plan for leaving the monolith, introduced a technology adoption process and designed the back-end interview track.

  4. 2007 to 2019

    Freelance and agency work

    Twelve years of client work, including Schiphol, where I led a move to TypeScript and Kafka that reached production in eight weeks, Buma/Stemra and NOS. Co-founded the web agency Ku and served as its technical lead.

Things I think about.

The amount of energy needed to refute bullshit is an order of magnitude bigger than that needed to produce it.
Brandolini’s law