My book on Node.js / TypeScript software design and architecture just pre-launched 📕 (%33 off)!

SOLID: The Software Design & Architecture Handbook

Presale $29.99

I'm Khalil. I teach advanced TypeScript & Node.js best practices for large-scale applications. Learn to write testable, flexible, and maintainable software.


I create courses, books, and articles for aspiring developers on Enterprise Node.js, Domain-Driven Design, GraphQL, and writing testable, flexible JavaScript.


Recent Articles

view all

Non-Functional Requirements (with Examples)
Non-functional requirements are quality attributes that describe how the system should be. They judge the system as a whole based ...
4 Principles of Object-Oriented Programming
The four principles of object-oriented programming (abstraction, inheritance, encapsulation, and polymorphism) are features that -...
Is DDD Overrated? | Domain-Driven Design
DDD is one particular approach to software design. While highly influential and transformational for developers new to software de...
How to Test Code Coupled to APIs or Databases
In the real-world, there's more to test than pure functions and React components. We have entire bodies of code that rely on datab...
How to Mock without Providing an Implementation in TypeScript
Having to provide an implementation everytime you create a test double leads to brittle tests. In this post, we learn how to creat...
When to Use Mocks: Use Case Tests
Mocking gets a pretty bad rap. However, if you're building an application using object-oriented programming and you're making use ...
Why I Recommend a Feature-Driven Approach to Software Design
Features represent the essential complexity of software design. It's the complexity that can't be avoided. Everything else — the l...
Enforcing Coding Conventions with Husky Pre-commit Hooks
In this guide, we'll learn how to setup Husky to prevent bad git commits and enforce code standards in your project.
Domain-Driven GraphQL Schema Design using Event Storming
A GraphQL schema is a declarative, self-documenting, organization-wide API. It's pretty important to spend a little bit of time on...
How Apollo REST Data Source Deduplicates and Caches API calls [Deep Dive]
Apollo's REST Data Source does a lot more than you'd think behind the scenes, and that's why it's recommended instead of using a w...
How to Setup a TypeScript + Node.js Project
In this guide, we walk through the process of creating a TypeScript project from scratch with cold-reloading, and scripts for buil...
Where Do Domain Events Get Created? | Domain Driven Design w/ TypeScript
In this post, I explain how good ol' fashioned encapsulation + TypeScript getters and setters enable us to effectively create Doma...

My book on Node.js / TypeScript software design and architecture just pre-launched 📕 (%33 off)!

SOLID: The Software Design & Architecture Handbook

Presale $29.99



Recent Blogs

view all
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…



Recently Edited Wikis

view all

Coupling, Cohesion & Connascence
Last updated Sep 8th, 2021
The foundational measurements of structural software quality
Test Doubles
Last updated Sep 7th, 2021
A test double is a generic term to refer to any object that stands in for a production one during testing