At the end of a call this week, a developer said something to me that I haven't been able to stop thinking about. We'd been talking for over…
Khalil Stemmler
https://khalilstemmler.com/ · 138 posts · history since 2016 · active
4 Jun
25 Nov 2025
Quick question. How often do you see this type of code? composition conditional problem If the answer is "a lot", that's okay - we've all…
14 Nov 2024
A few big projects happening right now in essentialist.dev-land. November's theme has been finishing solidbook (finally), pattern-first in…
25 Oct 2024
He holds out a rubber band, expands it until it snaps and says, “Tension seeking resolution. That’s it. That’s the key. The fundamental…
16 Aug 2024
Before we begin, You can join The Software Essentialist for an additional 15% off before we ship the Pattern-First phase of craftship. Use…
15 Aug 2024
In a recent letter, I explained that edge cases can be an absolute nightmare to deal with when testing testing features. To deal with this…
12 Aug 2024
Ever been so scared to change your code out of fear you’ll break something? You’re not alone. Been there. Over the last months, I’ve been…
26 Mar 2024
Recently, I've been thinking about those early days of when I first started out coding. There were a bajillion things to learn, right? And…
24 Mar 2024
Before we begin: Doors open for the latest version of The Software Essentialist on March 31st. Join the waitlist for perks, bonuses & 5…
10 Jan 2024
It was only a matter of time before I fell in love with Domain-Driven Design. Not only did it clarify how to organize my code and untangle…
"Wait, is that Sean? Hold on a sec," I exclaimed, interrupting a friend mid-conversation. I had just seen him speeding past the famously…
8 Mar 2023
I want to tackle a hot take that happens to be one of the biggest ones holding developers back from endless puppy videos becoming truly…
26 Nov 2022
What is this? Stateful tests are obviously tests that rely on state What makes these different than other tests? You have to set up the…
3 Nov 2022
I'm sure you've run into this issue before. You try to a project up but you get an error that looks something like the following: What's…
8 Sept 2022
When I was in university, I decided to build my first startup with a couple of buddies that helped students find jobs. Having spent a year…
7 Sept 2022
Why the heck is LEGO still so comforting after all these years? Maybe it's because it feels good to come back to the same baseline elements…
4 Sept 2022
What’s the difference between a framework and a library? A framework is something that you plug your code into. A library is something that…
4 Aug 2022
10 May 2022
Hashing is a technique used to convert a key into another value (typically for cryptographic or data storage purposes). It works by running…
3 May 2022
What’s the difference between software that works and software that works well? Non-functional requirements. Consider the following example…
For many developers, JavaScript acts as introduction to the functional programming paradigm. And if you've never encountered callback…
16 Apr 2022
“Understanding responsibilities is key to good object-oriented design” — Martin Fowler Do you struggle with object-oriented programming…
Dependency: The Address object comes from outside, it's allocated somewhere else. This means that the Address and Employee objects exists…
Even though I studied object-oriented programming in university, I still struggled with it once I got out into the real world and tried…
8 Apr 2022
Is Domain-Driven Design (DDD) overrated? In my opinion, you can only say DDD is overrated once you've achieved mastery over it. At this…
6 Apr 2022
Well, everybody. The time has come. March 31st, 2022 was my last day at Apollo GraphQL. After about 3 years, countless blog posts, 4 talks…
19 Jan 2022
On this site, we're primarily concerned with software design, architecture, and the many problems that occur later on in your developer…
9 Jan 2022
If you're just getting started with object-oriented programming, the notion of an class may seem a little foreign. Abstraction is one of…
21 Dec 2021
The tldr Naming conventions dictate the way you write names (for methods, folders, variables and so on). The three most common are camel…
19 Dec 2021
Intro In the previous article in this series, "How to use ESLint with TypeScript", we learned how add ESLint to our project and configure it…
17 Nov 2021
In our humble introduction to Test-Driven Development, we learned the basics of TDD. You now know that you should start with a failing test…
8 Aug 2021
In a layered architecture there are often a number of mutable, shared, external, out-of-process infrastructural dependencies. We can break…
Originating from the idea of a stunt double (like in action movies), there are two general categories of testing objects that we use in…
7 Aug 2021
I've been spending some time attempting to really understand the philosophy of testing in software design. There is a tremendous amount of…
4 Aug 2021
If you're not familiar with mocking, it's a pretty controversial topic in testing. Mocking implies the use of some sort of test double…
24 May 2021
Originally published in volvox vault's issue on metamorphosis. Someone said I was a writer the other day. When the hell did that happen…
26 Apr 2021
Albert Camus was a French philosopher most well known for his ideas about absurdism. Sometimes regarded as an existentialist philosopher…
23 Apr 2021
Introduction Here are a few pressing questions: What is the single-most important concept you can tell me about software design? How do you…
31 Mar 2021
Watch on YouTube If you're like me, you see programming as a type of trade . Over the past year, I've been paying more attention to how…
12 Mar 2021
In the last post, I mentioned the fact that DTOs (Data Transfer Objects) and GraphQL schemas serve a similar purpose; they create a strict…
24 Feb 2021
Have you ever heard the expression that "all problems in computer science can be solved by adding another layer of indirection"? I'm not…
22 Feb 2021
I'm always interested in what blog readers are building using Domain-Driven Design and Clean Architecture practices. In this post, I'd like…
9 Feb 2021
Entropy Entropy is a fancy word for complexity, randomness, uncertainty or a state of disorder. Entropy It was first recognized in the…
ORMs like Sequelize and Prisma use the Active Record pattern which lets you add, remove, delete, and update data from SQL server without…
8 Feb 2021
Some people think programming is similar to story-telling. If that's the case, then good code is an incredibly boring and one-dimensional…
27 Jun 2020
In this article, you will learn how cold start issues occur, what factors contribute to cold starts, and how to manage Lambda cold starts…
24 Jun 2020
This is page one of a guide on Client-Side Architecture basics. Why we need a client-side architecture standard Allow me to paint the…
This is page four of a guide on Client-Side Architecture basics. Start at page one. The work isn't over I know this article expressed a lot…
Welcome When I first learned React and Redux in 2015, I made an enormous mess of the production codebase I was working on. Back then, class…
This is page three of a guide on Client-Side Architecture basics. Start at page one. Layers and concerns We're finally ready to decompose…
This is page two of a guide on Client-Side Architecture basics. Start at page one. The most influential client-side architecture design…
14 May 2020
Historically, when starting on a new React project, we’ve had to design and implement the state management infrastructure from scratch in a…
29 Apr 2020
Ever seen a friend, coworker, or maybe even an accidental stranger- trying to solve a problem using a tool that you feel is completely unfit…
10 Mar 2020
Intro On most projects I've ever worked collaboratively on, someone takes the role of the code cleanliness champion. It's usually the team…
26 Feb 2020
Intro Formatting is one of several concerns in the efforts to write clean code. There's a lot of other stuff we should be concerned about as…
23 Feb 2020
Deploying a Serverless GraphQL API with TypeScript is essentially the same as deploying one with JavaScript. The only difference is in the…
You know, I'm very proud to be a developer in 2020. The access we have to tools and services is impressive. The barrier to entry towards…
22 Feb 2020
Unfortunately, in GraphQL, you can't nest operations to apply better grouping (namespacing / separation of concerns) to your services. Here…
Intro When I first started building khalilstemmler.com, I stubbed out a component to present the current song that I was listening to on…
17 Feb 2020
Today, in the Advanced JavaScript Developers group, someone asked the question: Musing from a Noob: so if you were to write a translator…
2 Feb 2020
Intro In "Decoupling Logic with Domain Events [Guide] - Domain-Driven Design w/ TypeScript", we use Sequelize Hooks to decouple business…
31 Jan 2020
Introduction Designing your GraphQL schema is a potentially expensive task. It's potentially expensive because if we respect the principles…
20 Jan 2020
Understanding how to write testable code is one of the biggest frustrations I had when I finished school and started working at my first…
18 Jan 2020
Readers that frequent this blog know that I often look for answers to the hard questions in software design and architecture 🧐. Over the…
8 Jan 2020
Every frontend framework has their own opinionated way to solve the same three problems. 1. Data storage Defining the shape, changing, and…
2 Jan 2020
At the time of writing this, I've been on Earth for about ~2.4 decades. That means that ten years ago, I was the very tender age of fourteen…
27 Dec 2019
There are several ways to design systems. When I first starting building applications, I would start out with the database. Eventually, I…
14 Dec 2019
Quite honestly, I don't know if I really enjoy writing optimization code. I'm not saying that I don't like optimized code- I'm saying that…
2 Dec 2019
If what we ship to our server is a single executable file or script that runs our entire application in one process, we have a monolith on…
22 Nov 2019
Whether you’re a new developer or you’re fairly experienced as a programmer, you’ll come to realize that the amount of time you’ve worked at…
21 Nov 2019
When we first learn how to code, we're typically most focused on making things work. We visualize the finished product as a coming together…
Go read "When to Use a Private Constructor | Object-Oriented Programming w/ TypeScript". You'll use static factory methods for the same…
One of the first things we learn when we start out is how to create instances of objects. Typically, we do this with the keyword. The…
19 Nov 2019
If you've been writing code for at least 15 minutes, you've probably realized that the ability to learn is one of the most important skills…
18 Nov 2019
Also from the Domain-Driven Design with TypeScript series. Introduction A blog reader recently asked, "Please suggest to me the best…
5 Nov 2019
Readers of khalilstemmler.com either love or hate the design of the site. When I was designing the site, I knew that I wanted to draw a…
Before I got into software design and architecture, my code was hurting 🤕. I spent a lot of time doing rework, writing untestable code…
25 Oct 2019
When Disqus comments stopped being awesome, I was left without comments on my blog for a while. Not too long after, Tania Rascia wrote an…
28 Sept 2019
You ever think about what it took for some of the world's most skilled developers to learn how to build systems within companies like Uber…
26 Sept 2019
Introduction When we're working on backend logic, it's not uncommon to eventually find yourself using language like this to describe what…
24 Sept 2019
Frontend development is an animal of it's own. From jQuery, to Backbone, to EmberJS, to the (terribly painful) journey of dealing with…
16 Sept 2019
How many times have you been working on an application, and in the middle of writing some logic, asked yourself: "Is this the right place to…
I get a lot of emails about which DI container to use. InversifyJS? Awilix? "Angular and NestJS use their own inversion of control…
15 Sept 2019
If a component is really stable, it's likely it's going to be serving more purposes for more groups of people, and for different problems…
Every system has stable components and volatile components. Stable components are components that aren't expected to change that often…
In the header image, component A relies on component B which relies on component C. The problem is that component C also relies on A. That…
11 Sept 2019
One of the first things we learn in programming is to decompose large problems into smaller parts. That divide-and-conquer approach can help…
29 Aug 2019
I recently discovered a programming term, Heisenbug. No, I'm not talking about about a certain chemistry teacher turned criminal drug-lord…
We talk about a lot of advanced Node.js and TypeScript concepts on this blog, particularly Domain-Driven Design and large-scale enterprise…
21 Aug 2019
Microsoft called TypeScript JavaScript that scales... what's so unscalable about JavaScript? With respect to software development, there are…
14 Aug 2019
Imagine a world where you could open a severely rattled bottle of Pepsi with brazen confidence, not hesitating to consider the possibility…
30 Jul 2019
Also from the Domain-Driven Design with TypeScript article series. Have you ever worked on a codebase where it felt like "the more code I…
The Dependency Rule In Uncle Bob's book, he describes the dependency rule. That rule specifies that something declared in an outer circle…
25 Jul 2019
The aggregate design article I wrote was definitely my most in-depth article yet. And that's because it's such a big topic. In response to…
Here's a question I got recently, Q: How can a domain model reference a model from a different subdomain? The person who asked the question…
24 Jul 2019
Can it be that it was all so simple then? Remember when our apps were simple? Remember we could make CRUD API calls to our backend to change…
11 Jul 2019
If you ask a software consultant for advice on the best approach to anything, such as: what's the best framework to use what's the best ORM…
9 Jul 2019
Have you ever heard someone say that your code should be so well-understood that it should be read like a book? Those are the same…
7 Jul 2019
In Object-Oriented Programming, we write a lot of classes. Classes contain properties (methods and attributes) which hold variables and…
4 Jul 2019
Last time, we talked about how to create a facade over our ORM using the Repository pattern. Today, we're talking a little bit about where…
3 Jul 2019
Originally published here June 2019, with discussions on Hackernews and Reddit. Melvin Conway is credited with that quote back in 1967. In…
1 Jul 2019
Join the discussions on Hackernews and Reddit. Getters and setters (also known as accessors) were introduced to JavaScript when ECMAScript…
25 Jun 2019
The term Use Case is used to describe one of the potential ways that our software can be used. Another word that's sometimes used is feature…
20 Jun 2019
Also from the Domain-Driven Design with TypeScript series. In Domain-Driven Design, there's a correct tool for every possible thing that…
13 Jun 2019
Is domain knowledge needed for the Single Responsibility Principle? TLDR; yes, we have to care enough to understand the domain in order to…
7 Jun 2019
I came across an article recently from CNBC titled Tech's ultimate success: Software developers are now more valuable to companies than…
6 Jun 2019
Have you ever heard of the "clean architecture"? Maybe you've heard it by a different name... Clean Architecture, the Onion Architecture…
28 May 2019
Also from the Domain-Driven Design with TypeScript series. The biggest reason why companies move towards domain-driven design is because…
25 May 2019
You know Sequelize, TypeORM, and Mongoose? Those are all ORMs. When you return an instance of a row (or document), being able to make…
See this article. 🙂
24 May 2019
If you're a developer, you've most definitely heard about MVC. It's the most popular and well-understood architecture for creating…
18 May 2019
Writing code can be like pouring concrete. If what you've written in the past doesn't suit your needs today, it can be expensive to change…
15 May 2019
This article is part of the Enterprise Node.js + TypeScript series. Do you ever find yourself wondering where exactly you should throw an…
Also from the Domain-Driven Design with TypeScript series. When you get a new Node.js project, what do you start coding first? Do you start…
Recycled from the 'When to Use TypeScript' [Guide] article posted April 6th, 2019 The Performant System Problem, the Embedded System Problem…
11 May 2019
This article is part of the Enterprise Node.js + TypeScript series. Express.js is my favourite web framework to use with Node.js for…
In this article, we'll look at the pros and cons of TypeScript compared to JavaScript. For an in-depth guide on when to use TypeScript…
30 Apr 2019
Let's assume you're building a blog with Sequelize. On your blog, you can create a bunch of s. As a way to describe your post, it can…
26 Apr 2019
UML class diagrams can be a useful tool for communicating designs with other developers - or just drawing out your design candidates before…
20 Apr 2019
In my domain-driven design journey, I've come to realize that auto-incremented IDs just aren't gonna cut it for me anymore for my Sequelize…
16 Apr 2019
You know how some blogs have a section after reading an article that says "Related Posts" or "You might also like" (hint: check the bottom…
10 Apr 2019
A design principle from Extreme Programming (XP) that states that a programmer shouldn't add any functionality until it's actually necessary…
9 Apr 2019
Here's a really silly example. If you don't like it, well- damn. If you do, tell me about it. Pokemon Example w/ TypeScript Let's say you…
Wikipedia says an Anemic Domain Model "is the use of a software domain model where the domain objects contain little or no business logic…
By data integrity, we mean "what shape is this data allowed to take?”, “what methods can be called and at which point?", “what are the…
7 Apr 2019
Also from the Domain-Driven Design with TypeScript article series. In Domain-Driven Design, Value Objects are one of two primitive concepts…
6 Apr 2019
Originally published here April 2019, with discussions on Hackernews and Reddit. Have you heard of that little programming language called…
24 Jan 2019
The name kinda makes sense. It's called a concrete class because: it can't be extended/subclassed by another class it has complete methods…
The enemy of well-designed software is coupling. When large bodies of code are tightly coupled, they become ultimately unchangable and…
30 Jul 2018
I mentioned that we have options when writing asynchronous code in JavaScript. For a good explaination on the history of Asynchronous…
17 Jul 2018
The problem This morning, I took a look at the current student signup flow that I coded over at Univjobs. When I opened up the dropdown list…
19 Jun 2018
Originally published June 18th, 2018. I've re-written the way I do SEO in my blog currently to be a lot more clean in 2019. You can view the…
16 Nov 2017
It's not every day that you see a tilde in JavaScript. I was taking a look through the source code for the Twit NPM library when I was…
30 May 2016
I come from a Java background. When I was first learning Node.JS and JavaScript, I had what I thought was a decent level of understanding in…
29 Jan 2016
Asterisk is an open source framework for building communications applications. Run on Linux, it can be used to set up a PBX (Private Branch…