I'd been flicking through Paul Graham's Hackers & Painters over the weekend when I came to this paragraph:
Not every kind of hard is good. There is good pain and bad pain. You want the kind of pain you get from going running, not the kind you get from stepping on a nail. A difficult problem could be good for a designer, but a fickle client or unreliable materials would not be.
Strangely enough I was trying to explain the same thing last week.
It's all about your perspective.A difficult problem could be good for a designer, but a fickle client or unreliable materials would not be.
The Mac benefits from one of the most obstinate bosses on the planet, Steve Jobs. At one point (as documented in the PBS documentary, "Revenge of the Nerds"), Andy Hertzfeld (?) was goaded into reducing the startup time of the 128K mac by six seconds. In the end, Andy felt that the end result was better, but only thanks to a fickle boss.
Seymour Cray built the world's fastest computers by using cheap, reject transistors. They were too unreliable to use in the machines of the day, but through hard work and perserverance, Cray figured out how to underpower them and get them to work reliably where every other designer of the day threw them out as unreliable components that didn't perform to spec.
Both of these individuals clearly fit Graham's definition of "great hackers", so you can play whatever semantic wordgames you want to categorize these situations as either "difficult problems good for a designer", or "fickle clients and unreliable materials."
A more mundane example: at $WORK, our publishing system has to render a few dozen kinds of links into our content. The rules vary by product, subscription, time of day, phase of the moon, and distance of Cassini-Huygens to Titan. On the one hand, you can look at this as a fickle customer with bizarre and arbitrary demands that just get more and more complicated over time. For the most part, we did the standard fickle-customer song-and-dance, bit the bullet and moved on.
I'm in the middle of rearchitecting that system, based on the requirements as they exist today, not as they were envisioned years ago. So, while there are ~one dozen rules to paint a link, there are only ~one dozen rules to paint a link (and hundreds of links to paint, each one painted multiple times). In this light, this same problem is a good-pain-for-a-designer problem. And, yes, I've split out the dozen or so rules from the hundreds of so instances, so now it's easy to add another dozen types of links.