It's certainly true that we seem to place little emphasis on the design of the actual code. I suppose since our testing is typically focussed on the functionality, we may tolerate poorly structured code and since individual developers in my limited experience, are usually free to structure their code as they see fit, we tend to rely largely on unit testing and reviews to detect defects.
We've used buddying as a means of picking up on poorly structured code and to encourage refactoring, following design patterns where appropriates, etc, though it's early days really.
If I can parody what can happen (though of course in our ideal worlds it doesn't - I don't want to get it in the neck :)) :
We start with a nice clean design, well-structured, high cohesion, low coupling, clear interfaces, clear linear dependencies, etc.
Then we discover part way through development the need for another component, or it might just be an uncontrolled bright idea. Rather than rework the design (business pressure is typically blamed), we "extend" an interface that results in widespread rework amongst dependent components. We try to fix the problem at the code level rather than at the design level because we fool ourselves into thinking it's easier, quicker and cheaper.
To respond to the changes in interfaces, we "move" some functionality into more convenient components thereby decreasing cohesion and increasing coupling, oh and in the process invalidate a whole swathe of tests which we haven't time to rewrite.
Once we have produced something that just works (no really, it only just works), we try to get together a set of tests that focus on the high risk areas, except that now we're not so sure which those are.
The resulting code which started clean can end up in a mess, very difficult to maintain.
Part of the reason this can happen is that we might have coding guidelines and standards, but they are sometimes thought of as low priority. I can agree with that on the level of things like naming conventions and layout (which are of lower importance) but I think we lose the focus on properly defined interfaces, clear design of classes, etc.
Coding style is quite a personal thing though so the trick is influencing the parts that matter most without restricting the creative scope of the developer. We try to avoid arguments about coding style but pick up on design patterns, refactoring, scope and security, etc, using a buddy system. It's early days but we are starting to pick out some strategies.
One thing we struggle with is continuous integration. If we were more disciplined in the construction of software, no doubt we'd have less integration issues. I'm interested in the tried and true approaches to constructing quality code. What would be the top three?