Understanding Simplicity is a new, in-progress series of ebooks/guides with a strong focus on simplicity and clarity.
The first guide in the series has a few different, but interconnected goals - we are going to create an elegant, general-purpose build tool and use it to build an example website.
By going through this whole process, we are going to explore many important topics like combining imperative and functional programming (i.e. by isolating the imperative parts into the outer shell, and keeping our inner core pure), creating a flexible, storage-agnostic architecture, and writing clean and testable code in general.
We're going to explore this through an example of building a website (a fairly typical website built from the collections of pages, articles, or other types of documents), but to make things more interesting, we are going to add a few requirements:
- it should be as fast as possible - both the server and client side (i.e. TTFB (Time To First Byte) and TTI (Time To Interactive) should be as low as possible)
- it should be able to be generated at build time, run time, or a combination of both
- it should be storage-agnostic (i.e. it should be able to use the filesystem or any kind of database as storage)
- it should be SEO-friendly and use progressive enhancement instead of a graceful degradation approach
- it should have no or only minimal external dependencies
- we should have the full control over the whole process
We are going to build everything from the scratch, and try to keep the whole architecture as clean and flexible as possible.