Skip to content

Simple Made Easy

Simple Made Easy

Rich Hickey discusses simplicity, why it is important, how to achieve it in design and how to recognize its absence in the tools, language constructs and libraries.


The complexity …

The complexity created by a programmer is in inverse proportion to their ability to handle complexity.

– Kent Beck


You know you ar…

You know you are working on clean code when each routine you read turns out to be pretty much what you expected. You can call it beautiful code when the code also makes it look like the language was made for the problem.

– Ward Cunningham


Isn’t it Obvious?

Isn’t it Obvious?

Design Principles

  • Obvious Functionality
  • Framework Independence
  • Extreme Testability
  • Maintenance Minded

Obvious Functionality

When looking at the app directory, it should be obvious what kinds of things the application does. This architecture highly values the “glance factor” of the application structure as well as being obvious in where to find things while working with the project.

Framework Independence

Your application does not need to be a web app, api app, desktop app, or console app. It also doesn’t need to be a MySQL, MongoDB, or SQLServer app. Your app is just a set of data structures and functionality related to those data structures. How your app delivers your app or stores data are implementation details.

Implementation details can and should change based on your implementation needs, your app logic shouldn’t have to change when your implementation requirements do.

Extreme Testability

This is a TDD biased structure. Each layer and pattern is designed with testing in mind. More importantly, we designed this architecture so that testing would be easier for developers, which should lead to more testing and better software quality.

Maintenance Minded

When given the choice between short term productivity or long term maintenance, we believe that the right decision is long term maintenance. Many decisions have been made that are counterintuitive from a short term productivity standpoint, but allow for much easier maintenance. Obviousness, framework independence, and testability all work together to make the day to day maintenance more enjoyable.


There are two …

There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.

– C.A.R. Hoare (British computer scientist, winner of the 1980 Turing Award)