I have spent quite some hours building open source software. With that, a lot of things have gotten easier over time. For example, setting up tests, CI, documentation, and websites has gotten much easier. However, interface design somehow not. I already asked about it 3 years ago. If anything, it has gotten worse since I nowadays realize more how important it is to get the design right. Especially once libraries become more and more used, there is a real cost to introduce breaking changes.
But today I had a little breakthrough in figuring out why it's so hard. I realized that designing an interface is about finding a balance between "tightening" everything to provide something useful, but at the same time you want to "loosen" things to be future-proof and flexible. It's, in my opinion, a weird balance that is hard to grab; like walking on loose sand.
To see whether my observation made sense, I asked a reasoning model about it. The reason I asked a reasoning model is that they tend to also evaluate the other side of an argument whereas normal LLMs just agree with most statements you make.
DeepSeek R1 had some great thoughts about interface design. After a bit of back and forth, this was the response:
Great library design is a tricky balance: you need to create something focused and useful now by adding clear structure and smart defaults that help users solve problems quickly, but you also have to leave room for flexibility so it can adapt to future needs you can’t predict. It’s like building guardrails that guide people without trapping them—offering strict patterns for common tasks but allowing escapes or customization for edge cases. This balance feels unstable because what works today might not tomorrow, as technology and user needs change. The best libraries solve today’s problems simply while staying open enough to grow, bend, or connect with the unknown challenges of tomorrow.