And when the contract ends, the permanent guys have to sort out the mess the contractor made.
I have seen terrible disasters developed by every single sort of person. The issue normally comes when we as developers seem more interested in doing "clever" things at the expense of making sure we code for maintainability and support ability.
Combine the above with a large part of our community being terrible at communicating and you have a recipe for confusion and chaos.
[looks at current codebase]
> at the expense of making sure we code for maintainability and support ability
[cries, etc.]
(The current codebase is a masterpiece of cleverness - a single person's homegrown ORM and ObjectModel in Perl. Unfortunately that also means it's an overly complex, horribly unreadable, utterly unmaintainable piece of crap.)