System interface design — a craft ⚒️ and an art 🎨. Needs: rigor, iteration, experience, time, feedback, creativity, taste. The urge to hide complexity. The urge to write lovely, precise docs. To simplify even further. To make this fun to consume. The desire to create something beautiful.
(Note: I originally tweeted this in November 2021.)
Interfaces are everywhere between systems. I have HTTP APIs in mind while writing this, but also configuration interfaces, (standard) library APIs, remote procedure APIs in general, and also graphical or textual interfaces. Make them nice!
As I see it, interface design relates to minimalism like other arts do: “perfection is achieved when there is nothing left to take away.” But it is not easy to find the optimum. I like to take inspiration from physics: Maximizing simplicity requires identification of the fundamental degrees of freedom (that then need to be exposed). Removing variables. Identifying invariants, and working with them. This kind of thinking can make an interface justifiably beautiful.
I believe that only few tech companies
- have that understanding entangled in their culture
- understand which kind of people are good at doing this kind of work
- give those people the time and space
- understand the exponentialism involved
What might appear as a little too much work initially will yield the big, delicious fruits later. People love beauty; beauty helps with exponential growth.
A relevant aspect in all this is to allow for the interface to evolve, based on new insights and feedback. This might involve using a deprecation concept and/or related — rigorous — kind of thinking.
Overall, this approach is not slow. An interface is an opportunity. To separate beauty from somewhat-ugly. To your users, you show a wall of art. Behind the wall: this is where one can deposit the dead bodies. They can be cleaned up later, as time allows.