Dependability requirements such as safety and availability often conflict with one another making the development of dependable systems challenging. It is not always possible to design a system that fulfils all of its dependability requirements and consequently, it is necessary to identify conflicts early in the development process and to optimize the architectural design with regard to dependability and cost. This paper first provides an overview of fifteen different approaches to optimizing system designs at an architectural level. Then an abstract method is proposed that synthesises the main points of the different approaches to yield a generic approach that could be applied across a wide variety of different system attributes