Any software project with any level of complexity is generally built on some sort of architecture. This architecture is effectively the design vision of the system. It provides a high-level design view of how the system will be put together and how it fulfills requirements at that level.
It's one thing to simply document or communicate a system's architecture; it's another thing to base an architecture on sound practices that re-use tried-and-true techniques, practices, and technologies among others.
For the most part, this chapter deals with low-level architecture practices and details some of the practices that are generally accepted in the industry that I frequently see people having problems with, or "forgetting the principles" behind them. After a brief list of terms, we'll look at the recommended practices involving the following topics:
Decoupling
Data-based applications
Distributed architecture