Developing software involves making hundreds, even thousands, of decisions. Decisions in the context of software systems are hard to make, as the information available is incomplete, uncertain and dynamically changing. Even worse, these decisions are often impacted by conflicting objectives, restricting constraints and stakeholder preferences.