That doesn't mean that it can't be management and the developer's fault, mind you.

For example, many years back I took over the DBA position from another guy that had a breakdown and they let him go (I mean change the locks and keep an eye out sort of thing - crazy, am I right?).

The company had a database driven product that saw regular updates. The updates could take several hours or take what seemed like forever. They were usually run overnight. Management had accepted that this was the way it was. Customers were informed that this was the way it was. The support staff, sales people, even the person that did the documentation - everybody accepted that this was the way it was.

Problem.

The guy that had been maintaining the update script for the databases...well, with every single update - he added the new stored procedures, dropped old ones, changes to indexes, dropped indexes, tables, fields, etc, etc, etc, etc, etc.

Problem.

He never removed any of the old changes.

If you ran that script, you could be adding and dropping things dozens of times that no longer existed in the current version of the software. Procedures would run to update the same information over and over...and over...and over. If something went wrong during the running of that script, God only knew just how broken the database could end up and it could take days to fix the issues.

He thought he was doing his job fine. Management thought he was doing his job fine. Everybody, both at the company and the customers thought everything was fine.

It wasn't...

Another example of things along those lines, would be the folks that never document anything - they figure that if nobody knows how to fix it, they have a greater sense of job security. Heh, doesn't work that way. So you might get a replacement in or somebody else might take over that aspect of the code. Do they document? Nope, they may only half understand what's there - write patched code to get things working - and of course, everything's a pile of puked up spaghetti at this point.

Management should enforce the documentation. Developers should be documenting from the start.

There's just too many times that an emergency happens, things are quickly patched, with the idea that somewhere down the line it will be documented and patched correctly... that just never happens.

As an aside though, lol - I'm not sure I'll ever forget the guy that left comments about how he hated the other developers on the team in his code mixed in with liberal comments including Bible verses. Yeah, he didn't last long...