There is a wealth of project management practices like SCRUM, TDD, Agile (which SCRUM is) and so on, but the focus is always on doing something yesterday. A lot of the code that I see nowadays, is written to solve a problem and not necessarily for maintainability.

 

In almost all cases I start off blaming the poor calibre of developer that wrote the code, but inevitably realise that they were given 10 minutes to write a complicated module, hence why the code is the way it is.

 

Some developers check code in every once in a while that works, and generally needs minor bug fixes if any at all, but the agile process says check code in often. I know developers that say they have fixed an issue, but for several weeks later they are still updating the code they wrote - was the problem really ever fixed, or was it brushed underneath the carpet?

 

Obviously larger companies like Microsoft are advertised as cultivating environments where developers can produce the highest quality code, but there are deadlines there as well.

 

I also find the a lot of places don't really understand the management systems they are employing, take SCRUM for instance which comes from a sport called Rugby. It is more about management having a daily meeting so they can appraise their boss (micro management, that's what it is) that they spoke with the developement team and are at state x, y or z, but it is rarely ever about teamwork. The only team thing that happens is that people are in the same boardroom at the same time.