As a broad principle, nail down the APIs. Use existing standards if possible. If you've got a reasonably clean design (not always possible), you have a chance of taking the problem on piece by piece. Alternatively, if the APIs are well defined, it shows that the designers were actually thinking seriously about things.
I get quite upset about "architects" who haven't done enough time at the codeface, and seem to think that drawing meaningless blobs is fine; but also get upset at engineers who don't think about the architecture (and maintainability, and testability) as they develop.
Cohesion and coupling aren't dirty words, Blackadder. Now, Crevice...