Performance engineering for Web applications must take into account both the development and runtime information about the target system and its environment. At development time, the architects have to choose from many architecture styles and consider all performance requirements across a multitude of workloads. At runtime, an Autonomic Manager has to compensate for the changing operating and environment conditions not accounted for at the design time and make decisions about changes in the architecture so the performance requirements are met. This paper proposes a formal framework called Software Performance for Autonomic Computing for making decisions with regard to a possible set of candidate architectures: usage scenarios are criteria according to which architectures are evaluated; actual performance metrics, such as response time or throughput, are obtained by solving performance models and then matched against the performance requirements; performance requirements are defined by modeling user satisfaction with a utility function. Criteria can be weighted to reflect their importance. The framework can be used both at design and run time. Copyright © 2012 John Wiley & Sons, Ltd.