Against the Stack
Every six months someone publishes a guide to the modern web development stack. It is always the same guide. Pick a framework. Add a bundler. Wire up a type system. Choose a CSS solution. God no, not that one! Configure your linting. Set up CI. Deploy to a managed platform that charges by the build minute.
The guide is 12,000 words long. It has a table of contents. There are affiliate links, and you need to subscribe on medium to see the bottom third…
By the time you finish reading it, the framework has released a major version and the guide is already wrong.
It doesn’t need to be like this. There is a different way to build things on the internet. It has been available the entire time. You write HTML. You write CSS. You put the files somewhere they can be served.
This is not nostalgic. Fewer moving parts means fewer things that break. You spend more time writing and less time debugging your bullshit.
The stack is a solution to a problem most of us don’t have.
This site is built with a Python script and pandoc. The Python script is about two hundred lines. It has no dependencies outside the standard library. It calls pandoc to convert markdown to HTML and assembles pages from flat template files. I can do this from any computer that has an internet connection.
The pandoc binary is large for a single executable. It does one thing. It does it correctly. It has a command-line interface. It will probably do the same thing it does now ten years from now.
The HTML output is readable by any browser built in the last 30 years. The CSS is a flat file with no preprocessor. Time is a flat circle with an continuous preprocessor.
Nothing here requires Node.js. You could read this with wget.
The case for the stack is that it scales. True enough. It also requires three engineers to maintain the build configuration and a fourth to update the dependencies when a zero-day drops in a package four levels deep in the tree that nobody has heard of.
Most things don’t need to scale. They need to work, keep working, and be readable by the person who wrote them when that person comes back two years later.
This site’s entire build system:
# TODO: insert this when you get the repos worked out
Two hundred lines total. No lock file. No node_modules.
No CI pipeline to maintain.