Corey Haines is well known for championing the intensive software practice events known as coderetreat. He shares his experiences from these sessions of the practice of simply designing software in the book Understanding the 4 Rules of Simple Design.
The four rules, originated by Kent Beck in the late 90s, are expressed concisely by Corey as follows:
Corey has observed patterns that have emerged from solutions to Conway’s Game of Life during many coderetreat sessions and he relates these back to the four rules.
Examples include the strategy of reification to eliminate knowledge duplication and noticing how the resultant classes act as behavior attractors. There are many more nuggets in Corey’s book so, rather than listing them here, I encourage you to read the book.
Naturally, Corey is not the only software luminary, other than Kent Beck, to have written about the four rules of simple design. Indeed, Corey refers to two fascinating articles by Joe Rainsberger that have influenced his thinking.
I like the way Joe expands upon these rules in a practical sense and distills them to their essence. As Joe concludes, good simple design practice boils down to this:
Remove duplication and improve names in small cycles.
That sounds like good advice to me.