Can Vs. Should

Recently a support request for WordPress came up on the wp-hackers email list I subscribe to that reminded me of one of the big delimas of programming (and frankly much of life): If you can do something, should you do it? There is a big, and valuable, movement in web design called contingency design. This design approach says, “Given Murphy’s Law of things going wrong, what can we do to prevent that from happening?” In general this is a good principle. However, it is not a law. You need to find areas that are useful for your time, things that help where 90% of the people will need it. In programming misconfigured machines can cause ‘bugs’ that are really just the result of a misconfiguration. In design it is possible to spend extra hours working on things that do not help the end user because only 1 person in 10,000 will ever do what it is you’re working on and they don’t need to do it.

This is basically an issue of prioritization and evaluation of what is vital and what is extraneous. Sometimes in interface design choices are made that make the development process quick, however, the end user is not thought of. In this case usability is so bad users might not use the feature at all. In other cases users might misconfigure the software simply because the interface is poor. Make priority judgments based on:

  • Quality
  • Cost
  • Time

Note:Thanks David O’Hara for showing me this ‘triangle of evaluation’
Realize that you usually can’t have something that is of the the utmost quality in a very small amount of time, or that if you design something that takes more time to develop because of quality needs, the cost will go up.

Just because you can do something doesn’t mean you should do something.