Indications that you need to sub-divide a service into components: - Quality of service requirements - - are there large variations in response times - ...in transaction processing times - The business might treat categories of customer differently - We should actually sub-divide our sales service into RegularCustomers component and StrategicCustomers component - These things can start to show up when the business starts asking you to treat something (like a customer) in little different ways throughout the system.  You end up with a bunch of if statements asking the same question.   - - Ask the business if this is really a new business component - Fork the code base and let them grow apart.  This is liberating as you don't have to maintain both component requirements in one code base. - More examples - - Airlines - business vs economy class - Shipping - frozen goods vs regular toilet paper - Billing - charging credit cards vs invoicing