"An idiot admires complexity, a genius admires simplicity"
-- Terry Davis, Creator of TempleOS
I really hate when something is unnecessarily complex, it could be a guide, a piece of software, or just about any machine or tool. It fucks with my mind and makes me leave it entirely.
The Cognitive Cost
Complexity has a hidden cost. A cognitive cost. Every extra menu, extra setting, extra step needed to accomplish a task adds to the cognitive cost, they take away your attention from your primary task and can cause you to completely wreck your flow. Constantly having to stop just to cater to a complex tool, configuration or to look at some documentation will quickly turn into a big fucking headache.
Staying in the Zone
When I'm programming I don't want to think about my tooling, I want to think about the problem I'm solving. Every time I need to search through documentation, change a config file, or find out how to
Programming already requires a crazy amount of information in your head. When I have to think about the state of a tool, I lose some of the valuable information in my head.
I greatly value tools that value my time and disappear when i'm using them. The best tool isn't the one I think about the most, its the one I forget it's even there.
Simple by Design
A well designed simple system says more than a complex, requires more brain power system. A simple designed system is often the result of well thought out and difficult engineering. Anyone can make a tool, but to design that tool to be simple for the user requires extra thought, extra effort, and better engineering.
git is a powerful tool, but is daunting and complicated especially for new users, whereas command line tools like grep and fzf are stupidly easy to use and grant users a huge amount of power while feeling natural and obvious to use.
Displaced Effort
Complexity is a burden that has to live somewhere, the question is to whom that burden belongs to. If a tool is complex to use for users, that is because the developer decided its not worth their time to go through the difficulty of engineering a tool to be simpler for users at the cost of the user's experience. The opposite can also be said, if a developer designed a tool that is simple for the user to use, then the burden of complexity is put upon the developer. Designing a simple tool often requires complexity under the hood, complexity that the developer has to deal with.
Imagine a slop coded website, it's really ugly and has a horrible user experience. The developer probably spent no effort trying to make it, so now the burden of complexity is placed on the users using the website. On the other hand, if a developer cares deeply about simplicity and user experience, they would sit down, carefully design the user interface, test it, and then publish it. It's more complex for the developer, but it becomes simple for the user.
Simplicity as a Philosophy
Simplicity is more than just a preference. It's something that lives within me and something that I want to carry into my day to day life.
Complexity doesn't just disappear. Someone has to deal with it, but when I'm building something, I would rather sacrifice my time and my sanity to design a better simpler tool for the user by dealing with the complexity my self.
That's what makes simplicity so beautiful to me. A simple tool isn't just a basic or primitive tool, It can be extremely sophisticated underneath, but all of that complexity has been dealt with and organized into something that feels natural to use.
Building something complex is easy. Building something simple is hard.