I help coders become master the essential 80-20 of software design, architecture & testing. Learn to write scalable testablesoftware.

Mostly using TypeScript & Node.js, I create courses, books, and articles on advanced front-end and back-end topics like front-end architecture, Domain-Driven Design, effective object-oriented design, and Enterprise Node.js.

Recent Articles, letters & posts

view all

"Tests Are a Waste of Time"
Oh, boy.
3 Steps to Solve Most Design Problems | How to Find Abstractions Effectively
You can solve nearly any design problem by getting clear on the responsibilities, assigning them to appropriate roles, and figurin...
Object Stereotypes
The six object stereotypes act as building blocks - stereotypical elements - of any design.
98% of Developers Use React as a Framework, Not a Library
React is a view layer library but most developers use it as a framework. Let's look into why that is and the implications of it.
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 ...
What are Dependencies, Composition, Delegation, and Aggregation in Object-Oriented Programming?
The four principles of object-oriented programming (abstraction, inheritance, encapsulation, and polymorphism) are features that -...
Responsibility-Driven Design
Responsibility-Driven Design is the influential object-oriented design method that presents an effective way to turn requirements ...
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...
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...

Recent Blogs

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

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

Recently Edited Wikis

view all

Stateful Tests
Last updated Nov 26th, 2022
Stateful tests are tests against state machines. Ask: "are we testing a transition from one state to another?" or are we just testing "input/output".
Last updated Aug 4th, 2022
An interaction between objects or roles (or both)