Today, I want to tell you about my latest project; the Dev Concepts book, which you can already pre-order now (there’s a limited early-bird offer for the first 100 customers).

Image for post
Image for post
Picture courtesy of Anastasiia Chepinska

As some of you might know, I’m the author of a book about the TypeScript programming language. It was my first experience with the publishing world and it taught me a lot. The writing experience in itself was interesting, but seeing people reading and learning from my own book felt great.

I want to continue to contribute to the IT community, and writing is my main medium for now. …

Recently, I’ve been doing some research around Next.js & GraphQL.

Image for post
Image for post

After looking into the back-end side (which I’ll write about another day), I wanted to test drive some libraries for querying my GraphQL API.

Of course, since I was using Apollo on the back-end, it made sense to go full-circle and use Apollo on the “client-side” too.

In this article, I’ll explain how I’ve integrated it into my Next.js application. Since you know me, it should be obvious that the application uses TypeScript!

Note that I’m no Next.js specialist (nor a React one :p) and thus, I might be wrong…

Back in 2019, I wrote a short cheatsheet about the Design Sprint 2.0 approach. It’s been sitting on my Google Drive, and I thought that it may be useful to others, so here goes!

This isn’t an introduction to the approach, so if you’ve never heard of design sprints, you should probably check out the Sprint book of Jake Knapp (the creator of Design Sprints).

In two words though:

Design Sprints are workshops, spread out over about a week of time (depending on which variation you use), during which your team will try to solve a big design challenge, and…

As some of you might know, I’m working on a book about Software Development Concepts.

Among many other things, the book will cover the basics of User Experience (UX), User Interface (UI), and Customer Experience (CX).

Tonight, I wanted to help my readers to visualize the difference between those. Here’s what I’ve come up with so far:

This diagram is directly inspired by the one published here by Michael Janda, extended with some ideas of mine.

Now that I have created the visualization, I can continue explaining those concepts… one by one ;-)

That’s it for today!

PS: If you have ideas/remarks about this, don’t hesitate to comment, I’m curious.

TL;DR: It can be really hard to know if we’re just resilient or falling for the sunk cost fallacy.

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

Image for post
Image for post
Picture courtesy of Natalie Rhea

Before it all

Early in 2018, after having worked for 10+ years as an employee, office politics got to me and I was tired of wasting time in meetings. I really wanted to quit, be my own boss, and have more impact on the world around me.

I was…

Today, while preparing to publish the table of contents for my book, I realized that I didn’t know how to add it to my landing page

Image for post
Image for post
Picture courtesy of Lalaine Macababbad

In this article, I’ll explain how to generate a table of contents with automatic numbering using pure HTML and CSS.

CSS counters to the rescue

In the past, I imagine that quite a lot of JavaScript code has been written for this purpose. Luckily, nowadays, the Web platform is more powerful than ever. We can do wonderful things with HTML and CSS alone. For one, counting things!

With CSS counters, we can use and increment variables maintained transparently for us by CSS; allowing us to customize the appearance of our content easily.

The value of a CSS counter can be displayed using counter() or counters()

Office plugins (desktop & OWA) can be developed using standard Web technologies, but the templates of Microsoft are “dated”.

Image for post
Image for post
Picture courtesy of Pedro Santos

Using the Web platform to develop Microsoft office add-ins is pretty cool. Unfortunately, at least at this point in time, the template offered by Microsoft to generate Angular-based projects is quite “old-school” and not in phase with modern Angular/Web/TypeScript development.

In this article, I’ll show you that we can do better and use a standard Angular project and integrate what’s needed to make it work as an Office add-in.

Let’s get started!


  • Forget about the official Yeoman generator for now (yo…

Angular 11 has just been released. Time to discover what’s new!

Image for post
Image for post

In this article, I’ll go over (almost) everything noteworthy in this brand new release. I’ll also highlight what’s changed around Angular, just like I did with my Angular 10 in depth article.

If you want a helicopter view of what’s new, then check out the official Angular blog. Here, I’ll try to dig much deeper into the release notes.

As a reminder, the Angular team tries to release two major versions per year; so Angular 12 should arrive early next year.

If you’re missed the previous article about Angular…

Mocking overloaded TS methods with Jest is not hard per se, but you have to know how to do it.

Image for post
Image for post
Picture courtesy of Ammar Sabaa

In this article, I’ll explain the “issue” and how to work around it.

The “issue”

Method overloading is a very familiar concept for any developer used to Object-Oriented Programming (one of many that I’ll explain in my upcoming book by the way).

With method overloading, you can define multiple methods/functions with the same name but with different signatures. Overloading can be nice to use as a specific implementation is called depending on the parameters that you pass.

Of course, method overloading is…

Because nested code is bad for mental health

Image for post
Image for post
Picture courtesy of Thais Cordeiro

Often, when I look at code written by juniors, I see a lot of nested code. In this article, I’ll try to articulate why it is problematic and what to do instead.

A trivial illustration of the issue

Let’s look at a trivial example together:

This function is simple enough; it either receives an input, or it does not. As it stands, almost all of the code of this function is “protected” by an if statement. That is, almost none of the code will execute if the condition is not met. If it isn’t, then there’s a single log statement to execute.

For such a…

Sébastien Dubois.

Author, CTO. Subscribe to my newsletter: Follow me on Twitter

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store