I have some “grand theories” of software engineering: I think there are two tribes of engineers that complexify things or simplify things, and they are in eternal conflict.
Complexify: Jamstack, headless, Contentstack, Contentful, DXP, DAM, micro-services.
Simplify: WordPress, Simplenote, Day One, djbdns, SQLite.
Not enough engineers have studied under the code of Daniel J. Bernstein.
I guess kind of what I’m getting at is there is an aesthetics to engineering and code.
I’ve had the chance to do The Code Retreat exercise a few times. It is great for developing an eye for simplification. The idea is that a group of people codes the same program (usually Game of Life) repeatedly in iterations, improving the design each time. Each 45-minute round ends with deleting the code and a group discussion of the learnings, before starting again with added requirements.
It really helped me develop a spidey sense for over-abstraction. It’s much easier to add abstractions than to remove unnecessary ones.
WordPress and SQLite are the two greatest cornerstones of simplification. Copy WordPress files into a folder, spin up the servers, and you’re online in no time. Include a single .c file in the second, and you have your database.
Software and libraries nowadays are striving to incorporate more complexity to remain at the forefront of innovation. See Docker, Swift, Zoom. Just for citing three.
Do one thing, and be the *best* at it. That’s what software should do.
Complexity is what happens when designers don’t think things through, when they just fling a lot of features into the pot. This is how you get mal-features such as Postscript code embedding and the SQL semicolon problem that create needless vulnerabilities.
Technical debt is a kind of entropy. It’s downstream of stupidity.
The problem is, most people don’t think things through. Normies don’t like to think.