The Primary Objective of Software Design: Minimizing Total Cognitive Load
Over my half-career in software development, I've started to collect some insights (or at least opinions) about how software can be built so that it is easy to maintain, use, and extend. Usually we hear of principles such as modularity, abstraction, loose coupling, and separation of concerns, and each of these is important to strive for. But I've found that behind all of these, there is a single, unifying principle – the reduction of cognitive load. In this post I talk about what I've come to think of as the primary objective of software design: minimizing total cognitive load of all future users and maintainers of your software.
