It starts with the requirements for the product or service. Our Client will tell us what they want in a product and we capture this in a set of requirements.
We then take these requirements and identify and define the necessary modules and components, and place these in a coherent architecture.
We then examine the modules and define the interactions (interfaces) between them.
In a relatively simple design this can be straight forward. In more complex products it is likely to be more iterative; as we learn more through designing the system, we might need to further clarify the requirements.
Sometimes we might suggest adjusting the product requirements to accommodate a module or component that we have identified would make the design more effective and enhance the product.