Blogs

Short form notes, thoughts, ideas & answers to frequently asked questions


How to Find and Kill a Background Node Process
Last updated Nov 3rd, 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…

98% of Developers Use React as a Framework, Not a Library
Last updated Sep 4th, 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…

What Is Hashing?
Last updated May 10th, 2022

Hashing is a technique used to convert a key into another value (typically for cryptographic or data storage purposes). It works by running…

JavaScript forEach | Looping Through an Array in JS
Last updated May 3rd, 2022

For many developers, JavaScript acts as introduction to the functional programming paradigm. And if you've never encountered callback…

Is DDD Overrated? | Domain-Driven Design
Last updated Apr 8th, 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…

Update: I'm Teaching Software Design & Architecture Full-time @ khalilstemmler.com
Last updated Apr 6th, 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…

Hash Tables | What, Why & How to Use Them
Last updated Jan 19th, 2022

On this site, we're primarily concerned with software design, architecture, and the many problems that occur later on in your developer…

When to Use TypeScript Abstract Classes
Last updated Jan 9th, 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…

Camel Case vs. Snake Case vs. Pascal Case — Naming Conventions
Last updated Dec 21st, 2021

The tldr Naming conventions dictate the way you write names (for methods, folders, variables and so on). The three most common are camel…

How to use Prettier with ESLint and TypeScript in VSCode
Last updated Dec 19th, 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…

Existential State Machines
Last updated May 24th, 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…

What Would Albert Camus Think About Software Development?
Last updated Apr 26th, 2021

Albert Camus was a French philosopher most well known for his ideas about absurdism. Sometimes regarded as an existentialist philosopher…

Transcribing Video With DDD Discussion | Domain Driven Design w/ TypeScript
Last updated Feb 22nd, 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…

5 Ways to Manage Lambda Cold Starts
Last updated Jun 27th, 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…

The Three Responsibilities of a Client-Side State Management Solution
Last updated May 14th, 2020

Historically, when starting on a new React project, we’ve had to design and implement the state management infrastructure from scratch in a…

Enforcing Coding Conventions with Husky Pre-commit Hooks
Last updated Mar 10th, 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…

How to use ESLint with TypeScript
Last updated Feb 26th, 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…

Deploying Serverless GraphQL APIs with TypeScript on Netlify
Last updated Feb 23rd, 2020

Deploying a Serverless GraphQL API with TypeScript is essentially the same as deploying one with JavaScript. The only difference is in the…

Nested GraphQL Resolvers & Separating Concerns
Last updated Feb 22nd, 2020

Unfortunately, in GraphQL, you can't nest operations to apply better grouping (namespacing / separation of concerns) to your services. Here…

How to Build a Compiler?
Last updated Feb 17th, 2020

Today, in the Advanced JavaScript Developers group, someone asked the question: Musing from a Noob: so if you were to write a translator…

Ensuring Sequelize Hooks Always Get Run
Last updated Feb 2nd, 2020

Intro In "Decoupling Logic with Domain Events [Guide] - Domain-Driven Design w/ TypeScript", we use Sequelize Hooks to decouple business…

Domain-Driven GraphQL Schema Design using Event Storming
Last updated Jan 31st, 2020

Introduction Designing your GraphQL schema is a potentially expensive task. It's potentially expensive because if we respect the principles…

Decade in Review | 2010-2020
Last updated Jan 2nd, 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…

How Apollo REST Data Source Deduplicates and Caches API calls [Deep Dive]
Last updated Dec 14th, 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…

Static Factory Methods | Object-Oriented Programming w/ TypeScript
Last updated Nov 21st, 2019

Go read "When to Use a Private Constructor | Object-Oriented Programming w/ TypeScript". You'll use static factory methods for the same…

When to Use a Private Constructor | TypeScript OOP
Last updated Nov 21st, 2019

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…

Brutalist Web Design
Last updated Nov 5th, 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…

How to Setup a TypeScript + Node.js Project
Last updated Aug 29th, 2019

We talk about a lot of advanced Node.js and TypeScript concepts on this blog, particularly Domain-Driven Design and large-scale enterprise…

What's Unscalable about JavaScript? | TypeScript OOP
Last updated Aug 21st, 2019

Microsoft called TypeScript JavaScript that scales... what's so unscalable about JavaScript? With respect to software development, there are…

All about TypeScript Static Members | TypeScript OOP
Last updated Jul 7th, 2019

In Object-Oriented Programming, we write a lot of classes. Classes contain properties (methods and attributes) which hold variables and…

Where Do Domain Events Get Created? | Domain Driven Design w/ TypeScript
Last updated Jul 4th, 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…

TypeScript & JavaScript Getters and Setters: Are they useless?
Last updated Jul 1st, 2019

Join the discussions on Hackernews and Reddit. Getters and setters (also known as accessors) were introduced to JavaScript when ECMAScript…