Home About Consultancy Socials

Chukwuemeka Nelson Nwauche

June 26, 2025

Article Response 22 (Cognitive Code Load)

Is this the right way to approach the uncertainty of a new system? It's enormously difficult to elicit the right logical boundaries in the beginning. The key is to make decisions as late as you can responsibly wait, because that is when you have the most information on which to base the decision. By introducing a network layer up front, we make our design decisions hard to revert right from the start. The team's only justification was: "The FAANG companies proved microservices architecture to be effective". Hello, you got to stop dreaming big.

The Tanenbaum-Torvalds debate argued that Linux's monolithic design was flawed and obsolete, and that a microkernel architecture should be used instead. Indeed, the microkernel design seemed to be superior "from a theoretical and aesthetical" point of view. On the practical side of things - three decades on, microkernel-based GNU Hurd is still in development, and monolithic Linux is everywhere. This page is powered by Linux, your smart teapot is powered by Linux. By monolithic Linux.

Article 

In this article, the authors grapple with something that any dev with a few years of experience has had to deal with which is cognitive load. The author defines cognitive load as "how much a developer needs to think in order to complete a task." 

This is a perfect definition and in the article they dive into the details of what that means exactly and give some very, very valuable prescriptions on how to deal with it. There is a lot of meat on the bones of this article with a lot of juicy tangents so I really suggest reading the linked articles and posts within it. 

One thing I want to touch on that they bring up is the age old debate of Monolith vs Microservices. IMO the comparison is incomplete without specifiying the maturity of the system in question. When you take the maturity of the system into account, anyone in their right senses will readily acknowledge that the only valid design for a new system is a Monolith. There a lot of reasons why but they all boil down to "Unknown Unknowns" or put another way "You don't know what you don't know". 
 
Microservices are for when the system is mature. Maturity means different things to different people but for the sake of this post let's assume it means that all the requirements have been met and new requirements can be satisfied without large codebase changes. 

Even for mature systems, I still tend to prefer Monoliths (see Shopify and the Linux Kernel) but at that point it becomes a matter of prefence rather than common sense. So the next time someone brings up this debate, you can reframe things, help them gain a better understanding and hopefully point them to this blog post :).

Thanks for reading and as always, all comments, critiques and questions are highly appreciated. Here's a link to the previous article response.

© 2025 3commaass.com. All rights reserved.