← Back to context

Comment by DonaldFisk

7 years ago

John Ousterhout: "It's more important for a module to have a simple interface than a simple implementation."

Richard P. Gabriel in http://dreamsongs.com/WIB.html : "Simplicity -- the design must be simple, both in implementation and interface. It is more important for the interface to be simple than the implementation."

Ousterhout here is advocating The Right Thing, as opposed to Worse is Better. Unfortunately Worse is Better has become the dominant approach and it will be difficult to change that.

> Unfortunately Worse is Better has become the dominant approach and it will be difficult to change that.

That's because "Worse is Better" provides revenue out of the gate. Design and performance doesn't sell, it just raises costs and causes churn. And so long as your features are bringing in more customers and revenue than you churn, nobody cares.

Yes, it will cause blowback later, when you have a feature-rich product that is unacceptably slow, or new features cost too much to be released on time, but that future may be years away, a timeframe you can't (or aren't allowed to) think about when investors are pushing hard for user and/or revenue growth.

Of course, those years later, it will probably be faster to pivot to a new bit of software written with a "Worse is Better" mindset and start the cycle again.

No, he's advocating simplicity. The problem is that "really does what's needed" beats "simple" every time. And the other problem is that the person designing the module often has an incomplete idea of what's actually needed, which makes it really easy to design something that is simple but incomplete, and therefore more beautiful than useful. I think that much of the war between "worse is better" and "the right thing" is exactly this - worse is better if it actually does what's needed, and "the right thing" that doesn't actually meet the user's needs isn't actually the right thing.

So, absolutely, work for simple interfaces. Absolutely, try to do the right thing rather than just creating a ball of mud. But the real world is a messy place, and your code needs to handle some of that mess in order to actually be useful rather than merely an entry in the museum of beautiful design.