A Hacker's Guide to Project Management, Second Edition

Components, layers and services are related architectural models. They are all ways of getting the benefits of good modularity throughout your design:
Separation of Concerns - you split the system up into sections which different people, with different skills, can work on. For example, someone concentrates on the database design, and someone else focuses on the business rules,
Exchangeability - you create a structure in which one part can be swapped out with another, as long as they both support the same interfaces. This makes maintenance a lot easier,
Separate Evolution - parts of the system may change at different speeds. For example, the user interface may change very frequently, but the database design may be very stable. Because of exchangeability, they can change separately without affecting one another,
Portability - you change some fundamental part of the system s technology. If all the technology-specific parts of your system are hidden behind a component s interface, then all you have to change is that component,
Hiding details and dependencies - details, such as the ability to work with a number of different data sources, can be hidden behind a standard interface,
Reuse - if part of the system does a job which many other systems or parts need, then a single component or service can be shared between them,
Sourcing flexibility - you can obtain different parts of the system in different ways, as long as the...