Businesses are inherently complex with many interrelated parts. This complexity can be managed by applying principles of minimalism and containment at different levels of software architecture. At the lowest levels, pure functions are used to contain complex business logic. At higher levels, services isolate complexity by having single responsibilities and well-defined external contracts. The overall system complexity is managed through infrastructure as code, standard service templates, and evolving the system into platforms and products over time. By separating concerns and containing complexity at each level, complex systems can be understood and evolved.