Sort of a followup to Fowler/MonolithFirst.
Many programmers believe you need to add core abstractions to your program to make it ‘extensible.’ Must a simple program which just does its job with no extensibility is the easiest to extend.
To extend a program with existing abstractions, you often need to rework the existing abstractions to add a new one. Sometimes this abstractions impose unnecessary constraints on your design. This is unfortunate when the abstractions weren’t necessary to begin with.
When you extend a program which is written simply with no indirection, you’ll often be adding an indirection on top of existing code. This is much easier and cleaner.
Lifted from a different draft post
- Software should be stable first, and readable second. All else is ancillary
- Simple software is readable
- Simple software is easy to reason about
- Easier to catch bugs early
- Easier to test
- Easier to debug
- Simple software is easier to reuse
- Simple software is easier to refactor
- Simple software is easier to extend