Components and Granularity - Fundamentals of Software Architecture | Lucent