Geographical distribution definitely affects code quality. Additionally, when the Architects are not geographically located in the same place as the developers - implementations are not true reflections of the design/vision. So yes, distributed models definitely introduce noise into the process. However, most projects don’t require pinpoint execution and you can get away with some dilution as long as teams communicate, proper checkpoints are enforced and effective reasoning is the basis of compromise.
Also, don’t break the project up into tier-specific teams - this will only promote dilution and confusion. Each development team should be responsible for their vertical functions and be able to execute across all tiers of the project. This gives you some fail-over when life/politics/economy intervenes with the implementation as you can introduce new functionality to a team familiar with all aspects of the architecture. Learning a new technology tier and its dependencies and interactions however, is not so simple, especially with distance.
If the project is small enough and the execution window isn’t absurd - we generally prefer keeping Architecture/Business-Analysts on one shore (the clients) and the entire Development team on another shore (whether the shore is 200 miles or 9000 miles away is irrelevant). The Architects regularly visit the offshore group, interact with them personally - especially at the beginning of the project when the vision and expectations need to be set. Depending on time and budget, we sometimes send our Business Analysts for brief visits as well. Don’t ever blind-side your developers - having them in-step with the vision is the key to successful execution.
It was a thought provoking topic from Vikas, I hope they write a follow-up article on distributed development done right some day.