1. In a computing environment, a method comprising, determining subsystems of a system corresponding to an application, based on characteristics of each subsystem including availability, reliability, redundancy, statefulness or performance, and any combination of availability, reliability, redundancy, statefulness or performance, identifying a known design pattern that matches the characteristic or characteristics for each subsystem, and providing a design of the system by coupling the subsystems corresponding to each subsystem's design pattern and associating the characteristic or characteristics for each subsystem with that subsystem.