Start with the business workflow
Identify the actions customers and staff need to complete. Write down expected traffic, response times, data ownership, and recovery requirements. A clear set of constraints is more useful than choosing a fashionable architecture first.
Keep boundaries clear
Separate presentation, application rules, and persistence. Define API contracts and validation at the boundary. Start with a modular application; split services only when independent scaling or ownership justifies the operational cost.
Build for failure
Set timeouts on external requests, make retryable actions idempotent, and send slow work to background jobs. Test restoration from backup, not just backup creation. Provide useful error states so customers can recover.
Measure before scaling
Track response time, error rates, queue depth, and database queries. Load-test the critical journey with realistic data. Add indexes, caching, or capacity in response to a measured bottleneck and verify the effect.