Rewording the Design Principles: Pave the Cowpaths and Don't Reinvent the Wheel

   It seems that there are still quite a few people that misunderstand
and object to the pave the cowpaths principle and I believe this is 
because the current wording is quite vague:

   "When a practice is already widespread among authors, consider
    adopting it rather than forbidding it or inventing something new."

I get the impression that some people have interpreted that as meaning 
we should adopt existing markup usage literally, whereas it's actually 
more about analysing people's behaviour and then designing features 
based on what they are trying to do and how they are trying to do it.

In a sense, it is analogous to Desire Lines

A desire line is, for example, a dirt path formed by people cutting 
across the grass instead of following the pavement around it, which 
eventually leaves a dirt track.  Landscapers don't look at that 
situation and decide that it would be a good idea to build dirt paths 
everywhere.  Rather, they look at it and decide that it would be a good 
idea to pave it.  So people can still do what they want to do - in this 
case, take a short cut - but they no longer have to walk through mud on 
a rainy day to do it.

There are similar problems with the wording of Don't Reinvent the Wheel:

   "If there's already a widely used and implemented technology
    covering particular use cases, consider specifying that
    technology in preference to inventing something new for the
    same purpose. Sometimes, though, new use cases may call for
    a new approach instead of more extensions on an old approach."

That wording doesn't work well when existing solutions have, for 
example, proven to be harmful, overly complex or far too limited to 
address the use cases properly.  There are some cases where it is better 
to invent a new solution than attempt to recover some poor makeshift 
solution, and the principle should make allowances for that clearer.

e.g. Replacing the datetime-design-pattern that abuses <abbr> with the 
new <time> element.

These are my proposed revisions to those two principles:

Don't Reinvent the Wheel

   Evaluate the success and failure of existing solutions. For those
   that have proven reasonably successful in terms of benefits, usage
   and implementation, consider adopting, retaining and/or improving
   upon them in preference to dismissing and inventing new features.

Pave the Cowpaths

   Investigate existing practices and design or adopt features that
   meet the desires of authors.  Where possible, solutions should
   leverage the existing techniques and skill sets of authors which
   will help promote the adoption of new features.

Lachlan Hunt

Received on Monday, 13 August 2007 18:26:46 UTC