<?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.4/uma.ecore"
     xmlns:epf="http://www.eclipse.org/epf"
    epf:version="1.2.0" xmi:id="-X7QSjItNBz7w8603yBCv0Q"
    name="abstract_away_complexity,_we3F4ACpEdu8m4dIntu6jA" guid="-X7QSjItNBz7w8603yBCv0Q"
    changeDate="2007-02-07T16:14:04.351-0800" version="1.0.0">
  <mainDescription>&lt;p>&#xD;
    Software&amp;nbsp;development is a pursuit characterized by complexity. This can take many forms, such as accommodating&#xD;
    complex requirements, technology, or team dynamics. Elevating the level of abstraction helps you manage this complexity&#xD;
    and make measurable progress, despite the inherent difficulty of the task.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Suggestions for several strategies that help abstract away complexity follow.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Leverage patterns&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Patterns help you take advantage of proven techniques for solving common problems. You can benefit from the experience&#xD;
    of seasoned practitioners and avoid &quot;re-inventing the wheel,&quot; as the saying goes. The use of patterns is a crucial&#xD;
    aspect of an architecture-centric approach to development, because it helps reduce the novelty and diversity of a&#xD;
    solution, thus improves quality.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    See &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/concepts/pattern_10BE6D96.html&quot; guid=&quot;_0YJvUMlgEdmt3adZL5Dmdw&quot;>Concept: Pattern&lt;/a>&amp;nbsp;for more information.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Design the architecture with components and services&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    This strategy helps manage software complexity through&amp;nbsp;partitioning&amp;nbsp;a system into a set of loosely coupled&#xD;
    and highly cohesive subsystems. The benefits of this approach include the ability to organize the team around a set of&#xD;
    smaller, more manageable objectives, and the ability to substitute parts of the system without disturbing the overall&#xD;
    cohesion of the system. Exposing services encourages re-use by making the functionality of the system easier to&#xD;
    comprehend. Focusing on services makes it possible to understand what the system does from a technical perspective&#xD;
    without necessarily having to understand the details of how the system works.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    See &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/concepts/component_CB167D48.html&quot; guid=&quot;_0YP18MlgEdmt3adZL5Dmdw&quot;>Concept: Component&lt;/a>&amp;nbsp;for more information.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Actively promote reuse&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Incorporating existing software into an overall architecture helps reduce cost and improve quality by reusing proven&#xD;
    working software, rather than developing from scratch. It also helps reduce the burden of maintenance by eliminating&#xD;
    duplication in the software. Although often difficult to manage, a project or enterprise can reap significant benefits&#xD;
    from a well-executed re-use strategy.&#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>
