In response to Fuzzy's post on accidental architecture, I couldn't help but think about a wonderful concept that Cam coined once called "Legacy Theory"
Legacy applications are applications that you have to work with because they're part of what I call the "solutionscape" - the list of systems that assist a business to function. Typically, in any given solutionscape, there's a couple of systems that are old and weird, and you have to architect your sexy new systems around them, because they are so precious to the business that the business can't imagine life without them. When I worked at the ATO, there was this enormous legacy overhead of the massive DB2 mainframes that have been processing Australia's tax returns for the last twenty years (sometimes properly!). Suggesting an architecture that didn't involve these systems was crazy - it would never work - because nobody would ever let you build such a system. That was "The way we do things around here."
Enter legacy theory. I can't quite remember the details, but an old colleague in the public service used to tell a mildly entertaining story about an experiment with monkeys.
The white coated, bespectacled scientists would put a delicious looking banana on a hook in a cage, and then put five monkeys in the cage. Anytime a monkey would try to eat the banana, the scientists would hose the crap out of all the monkeys with a firehose. After a while, the monkeys learned to stop trying to eat the banana. Hardly surprising, but the weird thing is, that they'd then swap a monkey out, and replace him with a monkey who had never seen the banana before. When the new guy tries to grab the banana, all the other monkeys jumped on him, and beat the snot out of him, because they didn't want to get hosed. SO, then the scientists gradually replaced monkeys until there were no original monkeys left. Still, every new monkey that tried to grab the tasty banana would get beaten up. None of the monkeys had ever been hosed. They just knew that was " The way we do things around here."
Sometimes you'll realise that what you're really doing is working with legacy theory in action. We should probably actively try fix the problem, rather than working around stale solutions.
Then again, you may just end up getting hosed...