
Computer science is an oxymoron. Every day software developers make decisions that are based as much on personal preference as on computer theory. Here's one example.
In software, there's an inverse relationship between flexibility and usability.
Have you ever been asked to make your software more configurable? "Customer A loves the product but can you just tweak this one thing for Customer B?"
I once wrote a program that had a billion command-line options. It started out with two or three, but as more features and flexibility were requested, the "man page" continued to grow. The project was eventually transfered to an ambitious new hire who decided to clean house and start from scratch.
That was four years ago. Today the re-invented tool is twice as complicated as its predecessor.
It's natural for software to become more flexible as it matures, particularly when it's used by multiple .
One way to make software more flexible is to "externalize" the code by providing a scripting interface. Now your software can do anything without ever having to recompile.
Customer: Can your product do X?So there you are scripting code for Customer A one day, Customer B the next, spending your days enjoying mind numbing job security. Hmm. I thought scripting was supposed to simplify things.
You: Sure! All you have to do is tweak the Velocity/Javascript/Python code in your config file!
Customer: Um, what?
OK, what about a UI? Customers can do that by themselves, right? Surfacing advanced configuration through a user interface in a way that balances configurability with usability is a real challenge. Most often functionality is limited in the name of simplicity.
Is it possible to design a product that is too flexible? Absolutely, and striking the right balance is an art not a science.
I never was very good in art...

1 comment:
haha, I love it
Post a Comment