The really Bad Thing about not thinking about the
application, is that every time you add something, something
else will inevitably break. It's like those squishy tubes
that you sqeeze and they fly out of your hand...an endless process of adding in kludges.

h0mee and I were driving around one night discussing breakage,
and came to the conclusion that It's All About The Data.
Knowing your data will be the difference between breakage, non-breakage;
a maintenence nightmare, and a maintenence pleasure. For example,
in Programming Pearls, in the first column, Bentley (the author)
discusses an old school problem of sorting thousands of 1-800 numbers
using about a megabyte of memory. They ran into some Really Bad time-space issues with certain algorithms, so they used a bitmap vector
to map the data. It was a novel solution because it was engineered to the
data. The problem is maintaning a symbiotic relationship between data
and algorithm whilst preventing breakage. Verily, this is very difficult.