<?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.3/uma.ecore" xmi:id="-X7QSjItNBz7w8603yBCv0Q" name="abstract_away_complexity,_we3F4ACpEdu8m4dIntu6jA" guid="-X7QSjItNBz7w8603yBCv0Q" changeDate="2006-08-15T11:08:20.212-0700">
  <mainDescription>&lt;p&gt;
    Software&amp;nbsp;development is a pursuit characterized by complexity. This can take many forms, for example,
    accommodating complex requirements, technology or team dynamics. Being able to elevate the level of abstraction helps
    us manage this complexity and make tractible progress in the face of an inherently difficult task.
&lt;/p&gt;
&lt;p&gt;
    There are a number of strategies available to help abstract away complexity. Here are some suggestions.
&lt;/p&gt;
&lt;h4&gt;
    Leverage Patterns
&lt;/h4&gt;
&lt;p&gt;
    Patterns help us take advantage of proven techniques for solving common problems. We can benefit from the experience of
    seasoned practioners and avoid &quot;re-inventing the wheel.&quot; The use of patterns is a crucial aspect of an
    architecture-centric approach to development, helping to reduce the novelty and diversity of a solution and thereby
    improving quality.
&lt;/p&gt;
&lt;p&gt;
    See &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup_basic/guidances/concepts/patterns,_0YJvUMlgEdmt3adZL5Dmdw.html&quot; guid=&quot;_0YJvUMlgEdmt3adZL5Dmdw&quot;&gt;Patterns&lt;/a&gt;&amp;nbsp;for more information.
&lt;/p&gt;
&lt;h4&gt;
    Architect with Components and Services
&lt;/h4&gt;
&lt;p&gt;
    This strategy helps manage software complexity through&amp;nbsp;partioning&amp;nbsp;a system into a set of loosely-coupled and
    highly-cohesive subsystem. This approach has a number of benefits, including the ability to organise the team around a
    set of smaller, more manageable objectives; and the ability to subsitute parts of the system without disturbing the
    overall cohesion of the system. Exposing services encourages re-use thorough making the functionality of the system
    easier to comprehend. Focusing on services makes it possible to understand what the system does from a technical
    perspective without having to necessarily understand the details of how the system works.
&lt;/p&gt;
&lt;p&gt;
    See &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup_basic/guidances/concepts/component,_0YP18MlgEdmt3adZL5Dmdw.html&quot; guid=&quot;_0YP18MlgEdmt3adZL5Dmdw&quot;&gt;Component&lt;/a&gt;&amp;nbsp;for more information.
&lt;/p&gt;
&lt;h4&gt;
    Actively Promote Reuse
&lt;/h4&gt;
&lt;p&gt;
    Incorporating existing software into an overall architecture helps to reduce cost and improve quality by reusing proven
    working software rather than developing from scratch. It also helps to&amp;nbsp;reduce the burden of maintenance by
    eliminating duplication in the software estate. Although often difficult to manage, a well-executed re-use strategy can
    reap signifcant benefits for a project and/or enterprise.
&lt;/p&gt;
&lt;h4&gt;
    Model Key Perspectives
&lt;/h4&gt;
&lt;p&gt;
    Modeling helps to raise the level of abstraction by simplifying complex ideas into pictures. Good models are able to
    convey information that helps the team visualize, specify, construct and document software. The Unified Modeling
    Language provides an industry standard approach to software modeling that is widely used across the industry.
&lt;/p&gt;
&lt;p&gt;
    When applying this strategy, a number of techniques can be employed.
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;
        &lt;strong&gt;Identify the key perspectives&lt;/strong&gt; - Focus on modeling the things that count. Few (if any) projects
        benefit from modeling the entire design to an excrutiating level of detail. Make sure that you understand why you
        are modeling something and who will benefit from it.
    &lt;/li&gt;
    &lt;li&gt;
        &lt;strong&gt;Sketch the design&lt;/strong&gt; - Not all models need to be detailed, complete and presented in a software
        modeling tool. It is often perfectly acceptable (if not desirable) to produce hand-drawn sketches on paper or
        around a whiteboard when exploring and communicating the architecture and design with your team. You can use a
        digital camera or electronic whiteboard to capture these diagrams and share them. For many small projects, this is
        often all you need.&amp;nbsp; See &lt;a  href=&quot;http://www.agilemodeling.com&quot; &gt;www.agilemodeling.com&lt;/a&gt; for more
        information.
    &lt;/li&gt;
    &lt;li&gt;
        &lt;strong&gt;Agree on a standard notation&lt;/strong&gt; - In a team environment it is naturally important that others can
        understand your diagrams without too much explanation. Choosing a standard notation will enable others to quickly
        comprehend your diagrams without ambiguity. The Unified Modeling Language is an example of a widely understood
        notation.
    &lt;/li&gt;
    &lt;li&gt;
        &lt;strong&gt;Visualize the code&lt;/strong&gt; - Many software development tools allow you to view the code as models, making
        it easier to comprehend static and dynamic aspects of a complex code base.
    &lt;/li&gt;
    &lt;li&gt;
        &lt;strong&gt;Document key architectural perspectives&lt;/strong&gt; - Even if you choose to model very little&amp;nbsp;your
        design, it is often advantageous to produce diagrams communicating the key architectural aspects of the system.
        Conveying the &quot;big picture&quot; to the rest of the team will help them understand the overall approach and develop
        cohesive software.
    &lt;/li&gt;
    &lt;li&gt;
        &lt;strong&gt;Use a Model-Driven Development approach&lt;/strong&gt; - This approach takes formal and complete models and
        applies a series of defined transformations, ultimately resulting in the generation of working software.&amp;nbsp;This
        technique&amp;nbsp;offers a number of benefits, with reported success stories. See &lt;a  href=&quot;http://www.omg.org/mda&quot; &gt;www.omg.org/mda&lt;/a&gt; for more information.
    &lt;/li&gt;
&lt;/ul&gt;</mainDescription>
</org.eclipse.epf.uma:ContentDescription>
