Actual code reviews, experienced architect(s) that actually understand the whole project, and paired development.  Not being afraid to refactor... creating componentized pieces that can live in separate codebases if possible.