Components are software building blocks that allow us to assemble a system in such a way that any of these parts can be changed and rebuilt
without requiring the entire system to be rebuilt.
System factored into policy, implementation, and utility components