It's surprising how often poor design stems from shortsightedness. "Oh, we never expected it would be used for that."
For example, at a previous employer, Jandel Scientific, we had a product called SigmaScan. It was a cutting-edge scientific application that allowed users—in our case, research scientists—to do cutting-edge image analysis on photos and scanned images: real lab-coat work like counting cell populations, biopsy and serial section area measurements, and the like. So we were very surprised to find out that one of our customers was a roofing contractor who used the product to do area measurements from scanned blueprints for faster and more accurate estimates.
All too often, I've been in design meetings where people only consider the few use cases that they've been presented, and they don't extend their perspective to other, plausible, cases. They target their specific need, and get done with it.
This may be great for delivering on deadlines, but terrible for the long term viability. This is the sort of stuff future generations of developers refer to as "The Sins of Our Forefathers."
True, without discipline, it's possible to over-generalize and produce something that's one notch above useless. But with discipline, it's possible to produce something that meets not just current needs, but keeps its usefulness at those key moments when you're looking to grow your market into previously untapped areas. Sure, there's a continuum of generalization versus practicality involved, but it's a discipline worth developing that produces something that handles known use cases and anticipates probable cases—at least just a short way down the road.