<?xml version="1.0" encoding="UTF-8"?>
<org.eclipse.epf.uma:ContentDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:org.eclipse.epf.uma="http://www.eclipse.org/epf/uma/1.0.6/uma.ecore" xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.1" xmi:id="-I4IbR1GW6IFBCdq9SiMUsw" name="core_principle_balance,_ssG6MMvpEdqukPpotm3DYg" guid="-I4IbR1GW6IFBCdq9SiMUsw" changeDate="2007-07-03T16:54:43.871+0330" changeDescription="Removed metaphoric photo Removed open_up from page name." version="0.02">
  <mainDescription>&lt;h1>&#xD;
    Introduction&#xD;
&lt;/h1>&#xD;
&lt;p>&#xD;
    Systems are rarely all things to all people. Often, attempts to make them so are wasteful, and result in bloated&#xD;
    systems.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    To be successful, stakeholders and the project participants must converge on a clear understanding and agreement of&#xD;
    these three factors:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
    &lt;li>&#xD;
        Problem to be solved&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Constraints placed on the development team (cost, schedule, resources, regulations, and so on)&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Constraints placed on the solution&#xD;
    &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
    The challenge for all project participants is creating a solution that maximizes the value delivered to the&#xD;
    stakeholders, subject to the constraints. Balance is about making the critical, cost-benefit trade-offs between desired&#xD;
    features and the subsequent design decisions that define the architecture of the system.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Discovering the balance point is challenging, elusive, and ongoing, because the balance point is dynamic. As the system&#xD;
    evolves, stakeholder needs change, new opportunities appear, risks are resolved, new risks appear, and the development&#xD;
    team discovers new realities about the system. Change happens throughout the development cycle. Stakeholders&#xD;
    and team members must be prepared to re-evaluate commitments, reset expectations, and adjust plans&#xD;
    accordingly as the system evolves.&#xD;
&lt;/p>&#xD;
&lt;h1>&#xD;
    Practices&#xD;
&lt;/h1>&#xD;
&lt;h2>&#xD;
    Know your audience&#xD;
&lt;/h2>&#xD;
&lt;blockquote>&#xD;
    &lt;p>&#xD;
        You cannot know how to make effective trade-offs if you do not know who the stakeholders are and what they really&#xD;
        want.&#xD;
    &lt;/p>&#xD;
    &lt;p>&#xD;
        Get to know your stakeholders. Better yet, work closely with them to ensure that you know their needs. Start&#xD;
        by identifying all stakeholders, and then maintain open and frequent communication and collaboration between them&#xD;
        and the development team.&#xD;
    &lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;h2>&#xD;
    Separate the problem from the solution&#xD;
&lt;/h2>&#xD;
&lt;blockquote>&#xD;
    &lt;p>&#xD;
        Too often, we run headlong into a solution without understanding the problem. After all, we are taught how to solve&#xD;
        problems, not how to define problems, so that's easier. However, this limits your understanding of the problem,&#xD;
        imposes artificial constraints, and makes it difficult to balance trade-offs, or to even know what the&#xD;
        trade-offs are.&#xD;
    &lt;/p>&#xD;
    &lt;p>&#xD;
        Make sure that you understand the problem before you define the solution. By clearly separating the problem (what&#xD;
        the customer needs) from the solution (what the system must do), it is easier to maintain the proper focus, and&#xD;
        easier to accommodate alternate ways of solving the problem.&#xD;
    &lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;h2>&#xD;
    Create a shared understanding of the domain&#xD;
&lt;/h2>&#xD;
&lt;blockquote>&#xD;
    &lt;p>&#xD;
        Domain experts often have limited technical expertise; developers, architects, and testers often have limited domain&#xD;
        expertise; and reviewers and other stakeholders often have limited time to commit to the project and learn the&#xD;
        problem domain. As a result, people often have an inconsistent or poor understanding of the problem domain, which&#xD;
        causes communication problems and increases the likelihood of delivering poor value to the stakeholders.&#xD;
    &lt;/p>&#xD;
    &lt;p>&#xD;
        Enhance and share all parties’ understandings of the domain. A concise and shared understanding of the problem&#xD;
        domain enhances communication and project effectiveness. Start by defining the problem in the Vision document. As&#xD;
        your understanding increases, capture key domain concepts and terminology in the Glossary to ensure a consistent,&#xD;
        shared use of the language of the domain.&#xD;
    &lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;h2>&#xD;
    Use scenarios and use cases to capture requirements&#xD;
&lt;/h2>&#xD;
&lt;blockquote>&#xD;
    &lt;p>&#xD;
        Many companies still document requirements as a list of declarative statements, which are sometimes called the&#xD;
        ”shall statements.” These lists are often difficult for stakeholders to understand, because they require the end&#xD;
        user to read through and mentally translate the list into a visualization of how the requirements will interact&#xD;
        with the system.&#xD;
    &lt;/p>&#xD;
    &lt;p>&#xD;
        Make use of scenarios and use cases to capture functional requirements in a form that is easy for stakeholders&#xD;
        to understand. Nonfunctional requirements, such as performance, stability, or usability requirements, are important&#xD;
        and can be documented as supporting requirements, using traditional techniques.&#xD;
    &lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;h2>&#xD;
    Establish and maintain agreement on priorities&#xD;
&lt;/h2>&#xD;
&lt;blockquote>&#xD;
    &lt;p>&#xD;
        Making poor decisions in deciding what to develop next can result in wasted effort, delivering capabilities that&#xD;
        are never used, or identifying problems late in the project (resulting in delays and even project failure).&#xD;
    &lt;/p>&#xD;
    &lt;p>&#xD;
        Prioritize requirements for implementation by regularly working with the stakeholders during product evolution.&#xD;
        Make choices that deliver value and reduce risks, while building a system that can evolve.&#xD;
    &lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;h2>&#xD;
    Make trade-offs to maximize value&#xD;
&lt;/h2>&#xD;
&lt;blockquote>&#xD;
    &lt;p>&#xD;
        Cost-benefit trade-offs cannot be made independent of the architecture. Requirements establish the benefits of the&#xD;
        system to the stakeholder, while architecture establishes the cost. The cost of a benefit may influence the&#xD;
        stakeholder's perceived value of the benefit.&#xD;
    &lt;/p>&#xD;
    &lt;p>&#xD;
        Work with the stakeholders and team members to prioritize requirements and develop candidate&#xD;
        architectures to implement those solutions. Use the candidate architectures to evaluate the cost of the benefits.&#xD;
        Candidate solutions are considered at a high level when determining architectural feasibility. Different&#xD;
        architectural perspectives can result in different assessments of cost versus benefit. The candidate&#xD;
        architecture that provides the most coverage at the lowest cost is selected for further development.&#xD;
    &lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;h2>&#xD;
    Manage scope&#xD;
&lt;/h2>&#xD;
&lt;blockquote>&#xD;
    &lt;p>&#xD;
        Change is inevitable. Although change presents opportunities to enhance stakeholder value, unconstrained change&#xD;
        will result in a bloated, deficient system and unmet stakeholder needs.&#xD;
    &lt;/p>&#xD;
    &lt;p>&#xD;
        Manage change while maintaining agreements with the stakeholders. Modern processes always manage change,&#xD;
        continually adapting to changes in the environment and stakeholder needs, assessing the impact of changes, making&#xD;
        trade-offs, and re-prioritizing work. Stakeholder and developer expectations must be realistic and aligned&#xD;
        throughout the development lifecycle.&#xD;
    &lt;/p>&#xD;
&lt;/blockquote>&#xD;
&lt;h2>&#xD;
    Know when to stop&#xD;
&lt;/h2>&#xD;
&lt;blockquote>&#xD;
    &lt;p>&#xD;
        Over-engineering a system not only wastes resources, but also leads to an overly complex system.&#xD;
    &lt;/p>&#xD;
    &lt;p>&#xD;
        Stop developing the system when the desired quality is achieved. Remember that “Quality is conformance to the&#xD;
        requirements” &lt;a href=&quot;./../../../openup/guidances/supportingmaterials/references_6CCF393.html#CRO79&quot; guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[CRO79]&lt;/a>. This is what gives a sense of closure to the practice. Separate the&#xD;
        problem from the solution, ensuring that the solution does, indeed, solve the problem. After the critical&#xD;
        requirements are implemented and validated, the system is ready for stakeholder acceptance.&#xD;
    &lt;/p>&#xD;
&lt;/blockquote></mainDescription>
</org.eclipse.epf.uma:ContentDescription>
