Frank on Software
  • About
  • Blog
  • Search
Encapsulating interactions with the outside world in your domain model.

Encapsulating interactions with the outside world in your domain model.

1 Aug 2022 • 4 min read

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.


Use a message envelope

Use a message envelope

7 Mar 2022 • 7 min read

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. In this post I'd like to go over a supporting practice that benefits virtually all types of events; the use of message envelopes.


The different types of events in event-driven systems

The different types of events in event-driven systems

19 Feb 2022 • 6 min read

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. In this post I'd like to go over three different types of...


Reliable event dispatching using a transactional outbox

Reliable event dispatching using a transactional outbox

20 Jan 2022 • 5 min read

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. In a typical setup, a database is used to store information and queues are used to send messages between...


Flysystem 3.0.0 is released

Flysystem 3.0.0 is released

14 Jan 2022 • 3 min read

On the 13th of January 2022, version 3.0.0 of Flysystem was released. The library ships a couple new methods on the main filesystem and adapter interfaces, making it a breaking change that cause a major version increase.


Where does my validation live?

Where does my validation live?

20 Dec 2021 • 8 min read

This is a question I've received over and over again, a question that does not have a single answer. Sometimes when I explain how I approach this I get surprised reactions, so I figure I might as well share it in a blog post and see what other people think. What makes something valid? When talking about validation...


Ensuring data(base) consistency during concurrent requests

Ensuring data(base) consistency during concurrent requests

1 Nov 2021 • 8 min read

Bugs caused by race conditions can be a huge source of frustration. They are difficult to identify and often difficult to remedy. As part of my day to day job at Mollie [https://mollie.com/], guarding against data inconsistencies is always top of mind. At the very least, unexpected inconsistencies require attention from support or a developer. In worse situations,...


Setting up a TypeScript multi-package mono-repo for @scoped/packages.

Setting up a TypeScript multi-package mono-repo for @scoped/packages.

8 Aug 2021 • 5 min read

How to use NPM workspaces for scoped packages.


Back the func off, this is my abstraction!

Back the func off, this is my abstraction!

1 May 2021 • 8 min read

Integrating services over API's exposes your application to a range of possible failures. At scale, any network interaction can and will fail. Implementing a retry mechanism is a common approach to increase fault tolerance. Taking into account how systems fail when designing software can greatly improve the quality of your code. In this blogpost I'd like...


A new major version of Flysystem

A new major version of Flysystem

21 Dec 2020 • 3 min read

For those who missed it, a new major version of Flysystem was released on the 24th of November. A new major version allows you break with the past for the sake of the future, which is exactly what I've done. For the second version of Flysystem I went back to the drawing board. Many of the library'...


Testing without mocking frameworks.

Testing without mocking frameworks.

23 Mar 2020 • 9 min read

Over the years, my coding practices have changed a lot. From hacking away until it works to TDD/BDD/DDD and everything in between. One of the biggest changes in my developer career has been when, why, and how I test my code. In particular, my view on mocking frameworks has changed a lot. A couple of years ago I...


Setting up docs with Tailwind CSS & GitHub Pages.

Setting up docs with Tailwind CSS & GitHub Pages.

12 Aug 2019 • 7 min read

To me, Tailwind CSS is one of the the most enjoyable tools to build documentation websites. It's quick, it's easy, and it gets the job done well. The library has taken the world by storm, and that doesn't surprise me one bit. When paired with a static site generator like Jekyll you've...


Type-safe stream processing in TypeScript

Type-safe stream processing in TypeScript

2 May 2019 • 6 min read

> This post contains a lot of back-story about how this all came about, you can skip ahead if you only care about the code. In case you haven't worked with TypeScript before: TypeScript is a superset of JavaScript that enhances the language by providing optional static typing. It's designed to scale well in large code-bases....


Array destructuring in PHP

Array destructuring in PHP

30 Apr 2018 • 3 min read

In my day to day job I write in a number of programming languages. The majority of my time is spent writing PHP but I very much enjoy writing other languages, such as Go and Javascript, too! One of the things I like the most about JavaScript, and PHP also to some extent, is how flexible and expressive they CAN...


Being in control of time in PHP

Being in control of time in PHP

8 Mar 2018 • 4 min read

When developers talk about the infrastructural boundaries or external dependencies they often talk about databases and third-party integration. They're the first thing we'll put behind an interface so we can stub them out during our tests. This gives us some control over them. It's become relatively easy to spot these dependencies because we do...


page 1 of 2
Older →

Stay up to date

Get the latest posts delivered right to your inbox. I blog about technologies and software engineering. If that's your cup of tea, be sure to subscribe!

Sign up or sign in.

  • Twitter
  • YouTube
  • GitHub
  • RSS