So here is a scary thought; architecture is controlled by the one who last writes the code. In the physical world, an architect designs a solution and as the product (tool, car, house, nuclear power plant) is being constructed, any number of audits are completed to ensure that what was designed is what is actually being built.
Financial institutions often provide funding for new office buildings sometimes costing hundreds of millions of dollars. The developer does not receive a check for the full amount, rather he gets an amount sufficient for digging a hole. The bank then sends smart people to determine if the hole is suitable for the proposed building, and only if so is the next round of funding/approval given.
This is not so true in the digital world, at least not in the majority of corporate development centers. A well architected solution is given to a developer (this is a topic into and of itself!) who then proceeds to write code. Now if the digital world mimicked the physical world, we'd ask the developers to construct an object model which could be compared to the original architecture for validation. Then, the developer(s) would have to construct, in the case of Java, Java Interfaces for all of the to-be-derived classes, and again, there'd be an audit. Digitally, we let the developer go until they have a functional system, albeit incomplete. We then test the functionality to determine progress, and rarely if ever re-examine the actual architecture as coded. Therefore, the architecture is under the control of the person who last wrote the code.
What techniques do you employ to ensure that developers are coding as intended by the architect? Code reviews are seldom consistently used, and corporate time lines are so tight that adding addition delay into a project doesn't seem acceptable. How do you validate and verify?