Featured Series

Modular by Design: Crafting Evolvable Architectures
A series on the principles and practices of building modular, maintainable, and adaptable software …

Architecture: From Patterns to Practice
A comprehensive series exploring the journey of a software architect, from understanding core …
Posts

Why Is AI Code Suddenly “Hard to Debug”?
Debugging is easy when someone carries the mental model. With AI, nobody does.

Agile in Theory, Waterfall in Interviews
Why our system design interviews don’t reflect how real systems are built and what we should test …

Teaching the AI to Code (and Accidentally Becoming Better Engineers)
The best practices we used to skip are suddenly back, not for us, but for the AI

The Real Bottleneck Isn’t Code
If you're not building the same thing in your minds, you'll spend even more time fixing what …

Driving AI Code: Why Test-Driven Development is Essential in the LLM Era
Exploring how Large Language Models (LLMs) are transforming coding and the essential role of …

Modularity Through The Ages
A look at the history of software architecture, from RPCs to microservices, and the timeless …

Polymorphism, Dynamic Dispatch, and Visitor
Exploring polymorphism, dynamic dispatch, and the Visitor pattern in object-oriented programming, …

Achieving Modularity
Stop just talking about modularity and start achieving it. This guide introduces effective technique …

SOLID fp
Exploring how the SOLID principles, often discussed in OOP, apply to Functional Programming, …

Design Principles and Design Patterns
Design principles are high-level guidelines for designing software, while design patterns are …

Struggles Of A Newcomer To FP
One of the challenges that I faced earlier on with FP is coming up with non-imperative solutions...

Monomorphism, Polymorphism, and Higher Ranked Types.
An explanation of Monomorphism, Polymorphism, and Higher Ranked Types in Haskell.

Expressiveness
Exploring the concept of expressiveness in programming languages, comparing Haskell, Java, and …

Taming Complexity: A Guide to Imperative, Object-Oriented, and Functional Programming
In the realm of software development, complexity is the root cause of majority of problems. This …

GADTs To Eliminate Runtime Checks
Generalised Algebraic Data Types (GADTs) generalises ordinary Algebraic Data Types(ADTs) by …