I create courses, resources, 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

Two Categories of Tests: High Value vs. Typical Tests
It's critical to build a foundational understanding of the different types of tests before investing a ton of time into writing th...
Using Builders to Model Complex Test States
Setting up test cases can be extremely challenging. Especially when running E2e tests. In this letter, we learn how to use builder...
How to Improve Legacy Code w/ Characterization Tests
Just like entropy, the natural state of the universe, code has a tendency towards disorder over time. Tests act as a sort of "entr...
The Metaphysical Mental Models: Abstraction & The Feedback Loop
The metaphysical mental models describe how we solve problems and bring ideas to life. They are 1) Abstraction, and 2) The Feedbac...
Why You Have Spaghetti Code
Code that gets worse instead of better over time results from too much divergence & little convergence.
Reality → Perception → Definition → Action (Why Language Is Vital As a Developer)
As developers, we are primarily abstractionists and problem decomposers. Our task is to use language to decompose problems, turnin...
The Code-First Developer
As you improve as a developer, you tend to move through the 5 Phases of Craftship. In this article, we'll discuss the first phase:...
"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 ...
Responsibility-Driven Design
Responsibility-Driven Design is the influential object-oriented design method that presents an effective way to turn requirements ...
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...
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".
Collaboration
Last updated Aug 4th, 2022
An interaction between objects or roles (or both)