Skip to content


I've published 109 articles here. I usually post everything here, but you can also find my some of my content on , and . Use the search below to filter by title.

All Posts

Getting started with Svelte, Tailwind, and Nrwl NX, a powerful combo

Learn how to create a Svelte application using Nrwl NX and how to add Tailwind support.


How periodic journaling can lead to a more fulfilling life - Part 2: Going further

On why periodic journaling can help you live a happier, more fulfilling and more productive life. Part two.


How periodic journaling can lead to a more fulfilling life - Part 1: Introduction

On why periodic journaling can help you live a happier, more fulfilling and more productive life. Part one.


My digital garden

An overview of my Personal Knowledge Management (PKM) system.


Problem-solving 101

Software crafters need rock-solid problem-solving skills.


Quality vs user satisfaction

Software crafters care a lot about the quality of their work, but business realities are generally much more important. Let's explore some of the tradeoffs.


An online community for Software Crafters

Come and join our community of code artisans


What is a software crafter?

Set the bar higher up, and become a crafter


How to get started in IT and grow as a Software developer

Learn how get started in IT, and how to grow as a software developer


What is the difference between software developers, engineers, coders, and programmers

Understand why those terms may differ


What is software engineering

A clear explanation about software engineering


What is software development

A clear explanation about software development


Angular 12 in Depth

Everything you need to know about Angular 12


Why Tailwind's Just-In-Time mode is a game-changer and how to use it right now

Learn how to migrate to Tailwind 2, and enable just-in-time for applications and Storybook


Lazy loading Angular applications

How to delay the execution of your Angular app


How Angular applications boot

Discover how Angular applications are bootstrapped


Welcome on my brand new blog

First post on my new blog.


21 months in and 80K views later

How my failed startup experience led to 80K views in a month


Configuring and using the Apollo client in a Next.js TypeScript application

Learn how to integrate the Apollo GraphQL client in a Next.js TypeScript application


Design Sprint 2.0 cheatsheet

Discover the essence of the Design Sprint 2.0 approach


UI, UX, and CX

Learn about UI, UX and CX


20 months in, 2K hours spent and 200K € lost. A story about resilience and the sunk cost fallacy

I’ve been working for ~20 months on my current project, spend 2K hours on it, and “lost” 200K € by not doing something else. That project is not ready yet. Here’s the story behind it.


Creating a table of contents with HTML and CSS

Learn how to use HTML and CSS to build a table of contents


Developing Office plugins using Angular and Nx

A modern way to develop Office plugins


Angular 11 in Depth

Everything you need to know about Angular 11


Mocking TS method overloads with Jest

Here's how to mock TypeScript method overloads with Jest


Software Development Concepts e-book collection

Here's how to become a real full-stack developer.


Avoid the Pyramid of Doom

Here's how to avoid nesting code needlessly.


Creating Moment decorators for class-validator

Learn how to create Moment decorators.


Histoire courte — Zoey & Jenny — Partie 1

Zoey est de retour


10 more ways to kill a team

Teams are way more fragile than you can imagine. Here are ten more things that can demolish one.


10 ways to kill a team

Great teams are hard to craft but much easier to break.


Don’t leave junior team members alone

Junior team members should never be left alone. Here's why


The journey from 4K to 30K views per month. Lessons learned

Let me tell you how I managed to be more successful with my writing


Angular roadmap analysis

Exploring the roadmap of Angular


RxJS 7 in Depth

Exploring everything new with RxJS 7


Git concepts for newcomers — Part 4: Branches

Let’s now learn about Git branches!


Angular 10 in Depth

Everything you need to know about Angular 10


Translating the MatPaginator Angular Material component

The MatPaginator component of Angular Material can be translated, but it requires a specific approach.


Typesafe checks against TypeScript interface property names at runtime

With TypeScript, interfaces only exist during development time. Still, sometimes, we might want to refer to interface property names at runtime. Here's a good solution!


Input validation with NestJS

Validating incoming data is of the utmost importance for security. Let’s explore why and how to handle this concern with NestJS and class-validator


Iterating on a TypeScript string enum

Here are a few useful tips showing how to loop over TypeScript enum keys and values


Introduction to TypeScript

Here’s a real quick introduction to the TypeScript programming language.


Forcing change detection on third-party Angular components

Let's see how to access the ChangeDetectorRef for any third party Angular component and use it to work around bugs!


Removing Moment.js locales from your Angular app JS bundles

Your bundle size exceeds the allocated budget or is getting close to it? Moment.js might be one of the major culprits. Let’s see how to fix the situation using a custom Webpack configuration


What's new with TypeScript 4.0

Everything new with TypeScript 4.0


Analyzing Your Angular app JS bundles

Discover how to analyze the JS bundles of your Angular applications to identify and fix issues using webpack-bundle-analyzer.


NGRX component-store deep dive

Part 2: Let's dive into the new Component-store library of NGRX!


Introducing NGRX component-store

Part 1: Component-store is an upcoming reactive library of the NGRX family. Let’s discover it and see what it’s all about!


Angular Template Type Checking

In Angular, a neat new template type checking mode has been introduced, called strictTemplates. Let me tell your what it is and why you should enable it.


Customizing your Angular app’s Webpack configuration

In this article, I’ll explain why you might need to customize the Webpack configuration of your Angular applications and I’ll of course also show you how to do so using angular-builders webpack-config.


Do you ever forget things at work?

I almost never forget things at work. When I do, I really feel embarrassed. What about you? Here's what I do to keep track of everything.


How to access the Web from tools and terminals in corporate environments

In medium to large companies, it’s almost always the case that your Web traffic has to go through a corporate proxy to reach the Web. Here’s how to find out more about those proxies and how to use them from your tools and terminals.


Git concepts for newcomers — Part 3: Commits, log and amend

In this third article of the series, we’re going to discover how to create and modify commits with Git, but also how to look at the commit log.


Embedding translations in your JS bundles with ngx-translate

Embedding translations in your JS bundles can be useful to speed things up if you know that users need to switch between languages regularly. Here's how to do it


Never miss a switch case with TypeScript

Switch statements are sometimes considered a code smell, but when they do make sense to use, you’d better make sure you don’t forget a single case. Luckily, TypeScript can help.


How to choose between constructor and ngOnInit in your Angular apps

Learn why ngOnInit is not always the best solution


Why you should stop installing npm packages globally

There is almost no use in installing npm packages globally. Here's why


Strongly typing your Angular route data

As Angular projects grow, it is quite common to add data to your routes. This article shows how to strongly type such data


Git concepts for newcomers - Part 2: Git repository, working tree and staging area

This article explains what git repositories are, as well as how the working tree and staging area works


What's coming with TypeScript 4.0 -- Language features

Learn everything about git, step by step. Part 1


Git concepts for newcomers — Part 1: What is a DVCS?

Learn everything about git, step by step. Part 1


What's the bus factor and 7 ways to increase it


What's new with TypeScript 3.9

Everything new with TS 3.9


Handling scrolling on Angular route transitions

How to correctly handle scrolling upon Angular route transitions


Drastically reducing your stylesheet size with Tailwind and PurgeCSS

Learn how to configure PurgeCSS with Tailwind to reduce get rid of useless styles


Bash aliases are awesome

How to leverage Bash aliases to boost your productivity


Getting rid of Kubernetes pods stuck on "Terminating"

How to get rid of pods that are stuck in the "Terminating" state


Dynamically translating a PrimeNG menu using ngx-translate

How to translate a PrimeNG menu dynamically


Improvements coming with TypeScript 3.9

The coolest improvements coming with TypeScript 3.9


TypeScript non-goals

The goals of TypeScript are obvious, but do you know about its non-goals?


How to write code comments like a pro

In this article, I’ll explain how my commenting practice (yes, that’s a thing :p) has evolved as well as what I currently recommend, whether you’re a junior fresh out of school, a seasoned developer…


Creating a Storybook instance including stories from multiple libraries in a Nrwl Nx workspace

Learn how to create a Storybook including stories from multiple libraries in a Nrwl Nx workspace


Why you should generally prefer TypeScript interfaces and custom types over classes

TypeScript interfaces and custom types are great. Use them as much as you can; here's why


Quickly amend a git commit

Here is the quickest way to amend a git commit


Fixing the “can’t resolve all parameters” exception with Angular DI

How to fix the “can’t resolve all parameters” exception with Angular


Dynamically customizing Quill/ngx-quill editors in an Angular application

How to customize Quill editors through ngx-quill in an Angular application


Avoiding Import Issues in TypeScript Monorepos

Leverage TypeScript paths to avoid problems with your imports


Using NGX Translate in Storybook stories

How to use ngx-translate with Storybook stories


Leveraging Type-Only imports and exports with TypeScript 3.8

How to use Type-Only imports and exports with TypeScript 3.8


Remote work works fine if...

Tips and tricks for a better remote work experience


Why and how to use stable node and npm versions across your project & team

Use stable versions of Node.js and npm to avoid surprises


Speeding up your CI/CD build times with a custom Docker image

How to drastically reduce CI/CD build times for Node.js projects using a custom Docker image


Adding Tailwind support to a Nrwl NX workspace with Angular and Storybook

How to configure Tailwind in Angular and Storybook


Going through dark times

Let dark times behind you


Why you shouldn’t implement authorization “around” your application and what to do instead

Here's how to writer more secure applications


Kickstart your writing with these tools

A writer's process and tools. Kickstart your writing!


Self learning tips for hungry minds

Tips to learn faster


DeveloPassion’s fifth newsletter

Fifth newsletter of DeveloPassion


Steps towards a better work/life equilibrium

Practical advice to better balance life and work.


Work/life equilibrium

Sometimes in life, we try too hard for too long.


Building a Service Worker with Workbox 5, TypeScript, Webpack and Angular

How to implement a service worker using Workbox, TypeScript, Webpack, and Angular


Deploying TLS certificates for local development and production using Kubernetes, cert-manager, mkcert and Let’s Encrypt

How to deploy TLS certificates for local development and production using Kubernetes, cert-manager, mkcert and Let’s Encrypt


Adding missing GPG keys for apt-get on WSL

How to add missing GPG keys when using WSL


VS Code extension packs to boost productivity

Awesome extension packs to boost your productivity with VS Code


Typewriter sounds on Linux

How to enjoy beautiful typewriter sounds while writing on Linux


TypeScript 3 Projects: What's next?

An appendix to my TypeScript book


VSCode tips for the newcomers

Tips to use VSCode like a pro


Tagging your daily todos: When MoSCoW is not enough

Extending the MoSCoW method to tag daily tasks


Configuring sourcemaps with the Angular CLI

How to configure sourcemaps with the Angular CLI


Tip of the day: using capture groups and back references to search and replace in IntelliJ

Using capture groups and back references to search and replace in IntelliJ


Searching for final methods in a Java project

Efficient way to find final methods in a Java project


Fixing ‘bash’ is not recognized as an internal or external command when used within npm scripts on Windows

Fixing bash is not recognized as an internal or external command error


The story behind my upcoming book: Learn TypeScript by Building Web Applications — part 1

The story behind my TypeScript book


GraphQL API integration tests in a Spring Boot 2.x Kotlin application

How to write integration tests for a GraphQL API using Spring Boot 2.x and Kotlin


Cleaning up database tables after each integration test method with Spring Boot 2 and Kotlin

How to clean database tables after each integration test in a Spring Boot application using Kotlin


Using JUnit 5 with Spring Boot 2, Kotlin and Mockito

How to setup and use JUnit 5 and Mockito in a Spring Boot Kotlin based project


Kotlin UUID bean validation

A small bean validation constraint annotation in Kotlin for UUIDs


My GPG configuration

Some notes about my current setup for GPG/PGP.