<?xml version="1.0"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ode - a simple personal publishing platform for the web</title>
        <link>http://ode-is-simple.com/home/news/presentations/</link>
        <description>Ode is simple! (Simple means that you know how it works.)</description>
        <language>en</language>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>
        <generator><!-- name="generator" content="ode/1.2.1" --></generator>
        <managingEditor>rob@ode-is-simple.com (Rob Reed)</managingEditor>
        <webMaster>rob@ode-is-simple.com (Rob Reed)</webMaster>

		<atom:link href="http://ode-is-simple.com/home/index.rss2" rel="self" type="application/rss+xml" />


        <item>
            <title>Project presentation with notes</title>
            <link>http://ode-is-simple.com/home/news/presentations/arch_doc_model</link>
            <description><![CDATA[ <div class="slide">
    <div class="slide_title">
        <h2>&nbsp;</h2>
        <h1>A general model for writing architecture documentation</h1>
    </div>
    <div class="slide_body">
        <h2>Rob Reed</h2>
        <h3>Sept 30, 2009</h3>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Introduction</h1>
    </div>
    <div class="slide_body">
        <p>
            "Mine is an architecture documentation project"
        </p>
        <ul>
            <li>
                That's still true, but the emphasis and scope of what I'm doing is significantly different.
            </li>
        </ul>
        <p>
            I started with the goal of completing what I called a 'case study'.
        </p>
            <ul>
                <li>
                    Writing the architecture documentation for another project of mine (Ode).
                </li>
            </ul>
        <p>Something was missing</p>
        <ul>
            <li>
                I didn't know how to apply the theory to my existing project.
            </li>
            <li>
                More generally, I was missing an approach to applying what I believe is a strong theoretical framework to the job of putting together the architecture documentation for any one specific project.
            </li>
        </ul>
        <p>
            What I came up with is a general model for writing architecture documentation.
        </p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>What is documentation?</h1>
    </div>
    <div class="slide_body">
        <p>Early in the semester we were asked to read the prologue to the book "Documenting Software Architectures: Views and Beyond", which presented this list of 'Rules for sound documentation':</p>

        <p>Note: This is review, what is new is the question...</p>

        <p>Documentation should:</p>

        <ul class="condensed_list">
            <li>Be written from the reader's point of view</li>
            <li>Avoid unnecessary repetition</li>
            <li>Avoid ambiguity</li>
            <li>Use a standard organization</li>
            <li>Record rationale</li>
            <li>Be kept current but not too current</li>
            <li>Be reviewed for fitness of purpose</li>
        </ul>
        <p>Are these rules enough?</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>What is architecture documentation?</h1>
    </div>
    <div class="slide_body">        
        <p>Again, from the book "Documenting Software Architectures: Views and Beyond" we have this definition</p>
        <blockquote>
            Architecture is what makes the sets of parts [of a system] work together as a successful whole. Architecture documentation is what tells the developers how to make it so.
        </blockquote>
        <p>
            We are told that architecture documentation should be:
        </p>
        <ul class="condensed_list">
            <li>Abstract -- to be quickly understood</li>
            <li>Detailed -- to serve as a blue-print for construction</li>
            <li>Informative enough -- to serve as a basis for analysis</li>
            <li>Prescriptive -- prescribing what should be true</li>
            <li>Descriptive -- describing what is true</li>
        </ul>
        <p>
            And that it should serve as:
        </p>
        <ul class="condensed_list">
            <li>A means of education</li>
            <li>A primary vehicle for communication among stakeholders</li>
            <li>The basis for system analysis</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Architecture documentation cont.</h1>
    </div>
    <div class="slide_body">
        <p>
            The "IEEE Recommended Practice for Architecture Description and Software-Intensive Systems"
            (IEEE Std 1471-2000)
        </p>
        <p>
            presents four scenarios "intended to suggest the range of uses of the recommended practice"
        </p>
        <ol>
            <li>Architecture of single systems which deals with new system construction 
            Note: This is the situation where we want to create the architecture description for a system which does not yet exist and then use the description to guide development</li>
            <li>Iterative Architecture where the architecture, delivered systems, and stakeholders co-evolve 
             In this case the architecture description and the architecture are constructed together such that the current system is described by the current documentation both of which may change going forward.</li>
            <li>Architecture of existing systems which is relevant when there has been development without a corresponding architectural description Note: What's described here is the situation where we have a system, and so an architecture, but not the architecture documentation which either doesn't exist or can't be used (because it can't be found for example) so we work backwards to build the description from the architecture itself, after which we can use the new documentation to reason about and maybe decide that we need make changes to the architecture.</li>
            <p>This is the situation that describes what I proposed to do, that create the architecture documentation for an existing system.</p>
            <li>Evaluation, the purpose of which is to include the quality of architectural description and predict the quality of systems based on that description. Note: The key ideas here is evaluation. We evaluate the quality of the documentation and based on that evaluation make judgements about systems based on the documentation.</li>
        </ol>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Those requirements are a pretty tall order</h1>
    </div>
    <div class="slide_body">
        <p>Requirements</p>
        <ul>
        <li>We must be abstract and detailed</li>
        <li>'informative enough'</li>
        <li>prescriptive and descriptive</li>
        <li>allow for education, communication, and analysis,</li>
        </ul>

        <p>Accomplishing all of this is no small feat.</p>

        <p>These scenarios...</p>
        <ul>
            <li>
                speak to the importance of architecture documentation as a persistent influence.
            </li>
        </ul>
        <ul>
            <li>
                suggest that architecture documentation can be introduced at any point in the life cycle of an architecture.
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Fundamental architecture documentation concepts</h1>
    </div>
    <div class="slide_body">
        <p>All of these figure prominently into my approach and the resulting model.</p>
        <p>Note: We have been introduced to many ideas about software architecture and architecture documentation throughout the course of the semester.</p>

        <p>And there are many details that fill out the broad conceptual framework, but here is my list of fundamental concepts... without which we cannot hope to do an adequate job with architecture documentation.
        (followed by the contents of the slide)</p>
        <p>This is my list of critically important concepts:</p>
        <ul>
            <li>The concept of the view;</li>
            <li>The role of architecture in suppressing information not relevant to the task at hand;</li>
            <li>A commitment to representing the interests of stakeholders;</li>
            <li>The idea that the architecture documentation and the architecture itself exist and are maintained together throughout the entire life cycle of the architecture;</li>
            <li>The importance of considering elements which are included as part of the architecture and its environment, at any point in the life-cycle. And to do so in such a way that these elements are fixed (i.e. dependable or unchanging) with respect to the architecture.</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>The value of documentation</h1>
    </div>
    <div class="slide_body">
        <p>If one thing is clear from what we've discussed in this class it's that the work we set out to do is difficult and it isn't getting any easier.</p>
        <p>For all of the problems we had with the autonomous computing paper, here is a quote from the article that no one was bothered by enough to refute:</p>
        <blockquote>
            Computing systems' complexity appears to be approaching the limits of human capability, yet the march toward increased interconnectivity and integration rushes ahead unabated.
        </blockquote>
        <p>Though not the answer to all of our software complexity woes, we can</p>
        <p>Note: If we're willing to entertain the idea that autonomous computing is a potential long term solution to the complexity problem,
        and if the authors of that paper are correct that the realization of their vision will require</p>

        <p>"a concerted, long-term, worldwide effort by researchers in a diversity of fields"</p>

        <p>We had better learn to tolerate complexity</p
        <ul>
            <li>better manage the problem today</li>
            <li>and lay the groundwork for future innovation</li>
        </ul>
        <p>by improving the tools and techniques we use to document software systems.</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>The challenges of documentation</h1>
    </div>
    <div class="slide_body">
    <p>Note: I'll warn you that there are several slides dealing with problems associated with documentation because</p>

    <ol>
    <li>1. There are a lot of problems.</li>
    <li>2. We must be familiar with the problems if we hope to develop a successful approach</li>
    </ol>

    <p>I have no doubt that we'll all recognize these problems so it shouldn't take long to get through them...
   </p>
    <p>
        Easier doesn't necessarily mean easy.
    </p>
    <p>We have few well established patterns for dealing with documentation.</p>
    <p>There are many questions that must be answered before we can hope to do an adequate job with architecture documentation.</p>
    <ul>
        <li>Where to begin?</li>
        <li>How do we manage this wealth of documentation that is being, or has already been generated by others involved in the system?</li>
        <li>How do we describe the documentation itself (i.e. how do we document the documentation)?</li>
    </ul>
    <p>
        These are not the only challenging questions.
    </p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>The problem with a multiple document approach</h1>
    </div>
    <div class="slide_body">
        <p>The existence of multiple documents</p>
        <ul>
            <li>Risks fracturing the attention of people involved in the system;</li>
            <li>Allows for the possibility of parts of the documentation disappearing;</li>
            <li>Can lead to disagreement or confusion about what has been done and what still needs to be accomplished.</li>
        </ul>
        <p>It is not uncommon to find ourselves in a situation where we have multiple and competing documents, or multiple versions of the same document.</p>
        <ul>
            <li>
                Leads to misunderstanding, misrepresentation, and ultimately architectural confusion (i.e. confusion about what the architecture is).
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>The problem with a single document approach</h1>
    </div>
    <div class="slide_body">
        <p>A one document approach may be interpreted as a single task.</p>
        <ul>
            <li>The work may be assigned to one person or group.
                <ul>
                    <li>May require an unreasonable amount of time and effort to put together</li>
                    <li>Documentation is often either neglected or passed along to a separate group, who are not necessarily the best people for the job.</li>
                </ul>
            </li>
        </ul>
        <p>Writers of technical documentation are often detached or isolated from the development groups.</p>
        <ul>
            <li>Often leads to misunderstanding and inconsistencies between the documentation and the implementation itself.</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>More challenges</h1>
    </div>
    <div class="slide_body">
        <p>Although the architecture documentation should prescribe how the system should work, if it does not adequately describe the current behavior, it may be regarded as irrelevant
        <ul>
            <li>This may instead describe a broken implementation which doesn't agree with the intended architecture.</li>
        </ul>
        <p>We are often unrealistic about the investment required and as a result do not set aside adequate resources for documentation.</p>
        <p>The ability to write documentation well is a skill that not everyone involved in the development of software possesses, or practices.</p>
        <ul>
            <li>The emphasis of documentation in education, or lack thereof, may be an important factor.</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Still more challenges</h1>
    </div>
    <div class="slide_body">
        <p>We said early in the semester that software development is essentially linear, and that this may contribute to our inability to properly specify complex architectures.</p>
        <p>Note: Taking into consideration modern development environment, and techniques, hundreds and thousands of developers working on the same system simultaneously and independently, and collaborating with teams that may be separated gegraphically, I don't know that it's true that software and software development is strictly linear.</p>
        <ul>
            <li>Documentation has remained stubbornly linear (whether or not this is true of software development)</li>
            <li>Even with architecture description languages, (a la UML), our diagrams are typically one of a linear set of ideas bound together that must be considered from beginning to end to be understood.</li>
        </ul>
        <p>Lastly, we may want to question some of the the assumptions that underlie the stated goals of architecture documentation.</p>
        <ul>
            <li>Is it appropriate to expect any one person, or small group, to anticipate or be capable of adequately representing the unique and often divergent concerns of all stakeholders?</li>
            <li>Do we expect the architect to write the architecture documentation?
                <ul>
                    <li>Is this reasonable given the unsettled role of the architect?</li>
                </ul>
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Solutions to these problems</h1>
    </div>
    <div class="slide_body">
        <p>How might we address some of these problems?</p>

        <p>In my estimation must be able to:</p>

        <ul>
            <li>Compose documentation (i.e. produce many views of a single document);</li>
            <li>Note:To minimize problems with either single and multiple document approaches and afford the flexibility necessary to allow for the flexible definition and representation of views.</li>
            <li>Bridge architecture and implementation level documentation;</li>
            <li>Note: To avoid the sort of architectural confusion that results when the architecture description does not agree with implementation level details.And to expose these inconsistencies, something which is important to the architect - even if the the details of implementation alone are not.</li>
            <li>Minimize the effort required to produce the architecture documentation by incorporating work which has already been done;</li>
            <li>Establish a connection between the the architecture and the architecture documentation;</li>
            <li>Involve everyone in the documentation effort, such that the collected knowledge about the architecture is reflected in the documentation;</li>
            <li>Explore nonlinear approaches to documentation, so that we can preserve detailed knowledge about the architecture without exposing an overwhelming amount of information;</li>
            <li>Pursue an approach that is flexible and adaptable enough to accommodate the potentially unique and varied concerns of existing stakeholders as well as meet the needs of new stakeholders.</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>My approach to the project</h1>
    </div>
    <div class="slide_body">
        <p>My approach to the project was straightforward.</p>
        <p>I started early in the semester with the work I knew how to do, not knowing a lot about architecture concepts and architecture description at the time.</p>
        <ul>
            <li>
                This involved producing and pulling together a wealth of documentation.
            </li>
        </ul>
        <p>Note: Literally hundreds of pages of documentation for ode alone not including other elements of the environment (libraries, services, protocols, etc.)</p>
        <p> Next, I identified what I considered to be critical concepts in the current thinking about architecture documentation.</p>
        <p>Finally, I needed a method which would allow me apply the concepts.</p>
        <ul>
            <li>What I came up with, and what I've been working on since, is a general "model" for pursuing architecture documentation.</li>
        <ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>A picture of the model</h1>
    </div>
    <div class="slide_body">
        <div class="center_me">
            <img src="/images/ode_blog/2010/2010_01/arch_doc_model_picture_labeled.jpg" title="Architecture Documentation Model" />
        </div>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Documentation components introduced</h1>
    </div>
    <div class="slide_body">
        <p>Borrowing concepts from component-based software engineering, we create a set of <em>documentation components</em></p>
        <p>These include a wide variety of architectural elements related to the architecture</p>
        <p>Anything we want to</p>
        <ul>
            <li>represent in one or more views of the architecture documentation.</li>
            <li>describe in greater detail</li>
        </ul>
        <p>Each documentation object is essentially a package of progressively more detailed versions of the documentation for one element of the architecture.</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Documentation component browser</h1>
    </div>
    <div class="slide_body">
        <p>Imagine that all of these documentation components arranged in a grid</p>
        <ul>
            <li>That grid, which I'm calling a <em>documentation component browser</em>, defines the scope of the architecture.</li>
        </ul>
        <p>Note: I am aware that this slide takes a turn toward the discussion of a possible implementation but it is a useful mechanism/vehicle to help understand how this model might work (I hope)
        and this is where I'm headed at the moment.</p>
        <p>I don't lean too heavily on a discussion of the implementation, just this slide and the next.</p>
        <p>The browser allows us to:</p>
        <ul>
            <li>Navigate any of the individual documentation objects</li>
            <li>Define, edit or delete documentation objects</li>
            <li>Filter the collection of documentation objects based on associated attributes or metadata</li>
            <li>Search over the entirety of the architecture documentation</li>
            <li>Select from a list of views to highlight only those components that are included in the view</li>
            <li>Create new views and assign documentation components to views</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Composing views</h1>
    </div>
    <div class="slide_body">
        <p>The browser does not show connections between documentation components.</p>
        <ul>
            <li>Doing so would violate the key concept that views hide documentation that is not relevant to the task at hand (and lead to confusion).</li>
        </ul>
        <p>We need another interface for composing views.</p>
        <p>When we select any view (from an collection of views available in the browser), The documentation components of that view are highlighted.<p>
        <p>If we choose to compose the view the browser's grid drops away.
        <ul>
            <li>Leaving only the components of the view
                <ul>
                    <li>which we can then manipulate by connecting and rearranging them for example.</li>
                </ul>
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Views</h1>
    </div>
    <div class="slide_body">
        <p>By connecting the documentation components, we specify relationships among the documentation, in a way that is similar to what you might think of doing with an abstract ADL.</p>
        <ul>
            <li>The purpose is to allow us to reason about a system that either we intend to build, or one which already exists.</li>
        </ul>
        <p>A view is a physical document in the sense that it can be printed, copied and shared.</p>
        <ul>We define a single architecture document and use it to hide, selectively expose, and manipulate what may be hundreds, or thousands source documents.</ul>
        <ul>
            <li>From this one document we can produce many more, each with a narrower focus, and each potentially tailored to the needs of a particular stakeholder.</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>More about connections</h1>
    </div>
    <div class="slide_body">
        <p>The model supports two approaches to documenting relationships in the architecture.</p>
        <ol>
            <li>We can include relationships among the documentation components, and then compose the components using only 'dumb' connections (which indicate nothing more an ordering over the documentation).
                <ul>
                    <li>With this approach, we can take advantage of the expressive power of our components as packaged abstractions.</li>
                </ul>
            </li>
            <li>Note: to describe complex connections at whatever level of detail is required</li>
            <li>We can also choose not include relationships among the documentation components and instead deal with them as part of composition...
                <ul>
                    <li>in which case we need a more robust collection of graphical objects and tools for composing documentation components.</li>
                </ul>
            </li>
        </ol>
        <p>This is a decision for the architect</p>
        <ul>
            <li>If connections are very complex then we may choose the former approach.</li>
            <li>In an environment where a description language like UML is already commonly used, then it may be more appealing to deal with connections as part of the composition</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>More about stakeholders</h1>
    </div>
    <div class="slide_body">
        <h2>Who are these stakeholders?</h2>
        <p>They may be roles, or individuals (i.e. specific people) involved with the architecture.</p>
        <ul>
            <li>There may be many such stakeholders, with narrowly defined concerns.</li>
        </ul>
        <p>Is it possible to anticipate the needs of all of these stakeholders?</p>
        <ul>
            <li>No, I would argue that it's not.</li>
            <li>A better approach is to allow stakeholders to generate their own views that meet their unique needs.
                <ul>
                    <li>in addition to a set of stock views which are composed by the architect herself.</li>
                </ul>
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>More about documentation components</h1>
    </div>
    <div class="slide_body">
        <p>They are reusable.</p>
        <ul>
            <li>Each is one of a library of components.</li>
            <li>Documentation components can appear in the browser, in one or more views, or part of another component's abstraction hierarchy.</li>
        </ul>
        <p>Is everything a documentation component?</p>
        <ul>
            </li>No. Consistent with other ideas about architecture documentation, there are both architecture and implementation level details.
                <ul>
                    <li>Architectural level details are represented as documentation components.</li>
                    <li>Implementation level details are simply graphical, or textual descriptions of some part of a system.
                        <ul>
                            <li>These appear (only) as part of the abstraction hierarchy for some architectural element and lack details of their own.</li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Advantages of this model</h1>
    </div>
    <div class="slide_body">
        <p>The approach is intended to be nonlinear, flexible, and adaptive.</p>
        <p>To this end it:</p>
        <ul>
            <li>Defines the scope of an architecture including the environment (as described by the IEEE recommended practice)</li>
            <li>Allows for composing documentation in response to the needs of the stakeholders</li>
            <li>Bridges between what is typically considered architecture and implementation level documentation.</li>
            <li>Is general purpose enough to work with many different styles of architecture.</li>
            <li>Emphasizes the key concepts of architecture documentation (already discussed).</li>
            <li>Is implementable and adoptable now.</li>
            <li>Does not introduce a lot of overhead beyond what is necessary to realize an architectural vision of the system.</li>
            <li>Is easy to understand.</li>
        </ul>
        <p>Note: You may recognize that many of these advantages answer/address the problems of documentation discussed earlier and correspond the proposed solutions which I've also talked about earlier in this presentation.</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Advantage: The model is adoptable now</h1>
    </div>
    <div class="slide_body">
        <h2>The model is adoptable now</h2>
        <p>After reading the Rapide paper, the class talked about whether the strategy epitomized by that language is adoptable</p>
        <ul>
            <li>given the current culture and prevailing approaches to the job of software engineering.</li>
        </ul>
        <p>Can we pursue architecture-based approaches without architects?</p>
        <ul>
            <li>I would suggest that the answer is no, and that this is a fundamental disconnect between what we suppose we must do to be successful, and what we are capable of achieving based solely on theoretical or technical progress.</li>
        </ul>
        <p>In comparison, I believe that the modest idea I'm proposing is adoptable now because it reflects the developer-driven organizational style that currently dominates software projects.</p>
        <ul>
            <li>
                What's more, this model can serve as a bridge to a potential future when the field may be more architecturally driven.
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Other advantages</h1>
    </div>
    <div class="slide_body">
        <p>Because it is a documentation model it does not place any restrictions on or make any assumptions about the system itself.</p>
        <ul>
            <li>A potentially promising solution may not be worth considering if it reduces an experienced development team to a group of novices.</li>
        </ul>
        <p>Documentation can serve as a path toward architectural change.</p>
        <ul>
            <li>It's reasonable to think that an architectural approach to documentation may lead to interest in architectural approaches to building systems.</li>
        </ul>
        <p>Documentation bridges architecture and implementation level details, serving as a medium for communication between stakeholders.</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Other advantages 2</h1>
    </div>
    <div class="slide_body">
        <p>The model addresses common logistical issues related to maintenance of documentation.</p>
        <ul>
            <li>We are asking everyone involved in maintaining the documentation to do a reasonable amount of work, and to be responsible for parts of the system they are familiar with.</li>
        </ul>
        <p>The model introduces only a minimal amount of overhead.</p>
            <ul>
                <li>The model takes advantage of implementation level documentation but does not burden the architect with implementation level details.</li>
            </ul>
            <p>Information that is not included in the documentation takes on an active meaning.</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Current and future work</h1>
    </div>
    <div class="slide_body">
        <h2>Current work</h2>
        <p>I'm continuing to refine the model by building a 'prototype' that works roughly as described.</p>
        <ul>
            <li>This means that I'm cobbling something together to play with these ideas more.</li>
            <li>I expect that this prototype will be fairly limited in its usefulness, except that hopefully it will help me work out some of the details.</li>
        </ul>
        <h2>Future work</h2>
        <p>Ultimately the end result of this may be the development of a set of tools for creating, manipulating and presenting architecture documentation in a way that is consistent with the model as described.</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Fin</h1>
    </div>
    <div class="slide_body">
        <p>Thank you</p>
    </div>
</div>
 ]]></description>
            <pubDate>Tue, 15 Apr 2008 11:23:54 EDT</pubDate>
            <guid>http://ode-is-simple.com/home/news/presentations/arch_doc_model</guid>
            <!-- <guid>http://ode-is-simple.com/home/2008/04/15/11/23/54/</guid> -->
        </item>


        <item>
            <title>Project presentation with notes</title>
            <link>http://ode-is-simple.com/home/news/presentations/arch_doc_model_for_ode-is-simple2010_0331</link>
            <description><![CDATA[ <div class="slide">
    <div class="slide_title">
        <h2>&nbsp;</h2>
        <h1>A general model for writing architecture documentation</h1>
    </div>
    <div class="slide_body">
        <h2>Rob Reed</h2>
        <h3>Sept 30, 2009</h3>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Introduction</h1>
    </div>
    <div class="slide_body">
        <p>
            Software architecture documentation (and Ode)
        </p>
        <p>
            "This presentation describes some principles and introduces a general model for architecture documentation."
        </p>
        <p>
        I started with the goal of writing the documentation for another Ode ([ode-is-simple.com](http://ode-is-simple.com "Official site for Ode at ode-is-simple.com")).
        </p>
        <p>Something was missing</p>
        <ul>
            <li>
                I didn't know how to apply the theory to my existing project.
            </li>
            <li>
                More generally, I was missing an approach to applying the strong theoretical framework that can be found in literature to the job of putting together the architecture documentation for any one specific project.
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>What is documentation?</h1>
    </div>
    <div class="slide_body">
        <p>The prologue to the book "[Documenting Software Architectures: Views and Beyond](http://www.amazon.com/Documenting-Software-Architectures-Views-Beyond/dp/0201703726 "Book page at amazon.com")", presents this list of 'Rules for sound documentation':</p>

        <p>Documentation should:</p>

        <ul class="condensed_list">
            <li>Be written from the reader's point of view</li>
            <li>Avoid unnecessary repetition</li>
            <li>Avoid ambiguity</li>
            <li>Use a standard organization</li>
            <li>Record rationale</li>
            <li>Be kept current but not too current</li>
            <li>Be reviewed for fitness of purpose</li>
        </ul>

        <p>A question I asked myself: Are these rules enough?</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>What is architecture documentation?</h1>
    </div>
    <div class="slide_body">        
        <p>Again, from "Documenting Software Architectures: Views and Beyond" we have this definition</p>
        <blockquote>
            Architecture is what makes the sets of parts [of a system] work together as a successful whole. Architecture documentation is what tells the developers how to make it so.
        </blockquote>
        <p>
            We are told that architecture documentation should be:
        </p>
        <ul class="condensed_list">
            <li>Abstract -- to be quickly understood</li>
            <li>Detailed -- to serve as a blue-print for construction</li>
            <li>Informative enough -- to serve as a basis for analysis</li>
            <li>Prescriptive -- prescribing what should be true</li>
            <li>Descriptive -- describing what is true</li>
        </ul>
        <p>
            And that it should serve as:
        </p>
        <ul class="condensed_list">
            <li>A means of education</li>
            <li>A primary vehicle for communication among stakeholders</li>
            <li>The basis for system analysis</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Architecture documentation cont.</h1>
    </div>
    <div class="slide_body">
        <p>
            The "IEEE Recommended Practice for Architecture Description and Software-Intensive Systems" (IEEE Std 1471-2000)
        </p>
        <p>
            presents four scenarios "intended to suggest the range of uses of the recommended practice"
        </p>
        <ol>
            <li>Architecture of single systems which deals with new system construction 
            Note: This is the situation where we want to create the architecture description for a system which does not yet exist and then use the description to guide development</li>
            <li>Iterative Architecture where the architecture, delivered systems, and stakeholders co-evolve 
             In this case the architecture description and the architecture are constructed together such that the current system is described by the current documentation both of which may change going forward.</li>
            <li>Architecture of existing systems which is relevant when there has been development without a corresponding architectural description Note: What's described here is the situation where we have a system, and so an architecture, but not the architecture documentation which either doesn't exist or can't be used (because it can't be found for example) so we work backwards to build the description from the architecture itself, after which we can use the new documentation to reason about and maybe decide that we need make changes to the architecture.</li>
            <p>This is the situation that describes what I proposed to do, that create the architecture documentation for an existing system.</p>
            <li>Evaluation, the purpose of which is to include the quality of architectural description and predict the quality of systems based on that description. Note: The key ideas here is evaluation. We evaluate the quality of the documentation and based on that evaluation make judgements about systems based on the documentation.</li>
        </ol>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Those requirements are a pretty tall order.</h1>
    </div>
    <div class="slide_body">
        <p>Requirements</p>
        <ul>
        <li>We must be abstract and detailed</li>
        <li>'informative enough'</li>
        <li>prescriptive and descriptive</li>
        <li>allow for education, communication, and analysis,</li>
        </ul>

        <p>Accomplishing all of this is no small feat.</p>

        <p>These scenarios...</p>
        <ul>
            <li>
                speak to the importance of architecture documentation as a persistent influence.
            </li>
        </ul>
        <ul>
            <li>
                suggest that architecture documentation can be introduced at any point in the life cycle of an architecture.
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Fundamental architecture documentation concepts</h1>
    </div>
    <div class="slide_body">
        <p>All of these figure prominently into my approach and the resulting model.</p>

        <p>Note: There are many details that fill out the broad conceptual framework, but here is my list of fundamental concepts... without which we cannot hope to do an adequate job with architecture documentation.
        (followed by the contents of the slide)</p>

        <p>This is my list of critically important concepts:</p>

        <ul>
            <li>The concept of the view;</li>
            <li>The role of architecture in suppressing information not relevant to the task at hand;</li>
            <li>A commitment to representing the interests of stakeholders;</li>
            <li>The idea that the architecture documentation and the architecture itself exist and are maintained together throughout the entire life cycle of the architecture;</li>
            <li>The importance of considering elements which are included as part of the architecture and its environment, at any point in the life-cycle. And to do so in such a way that these elements are fixed (i.e. dependable or unchanging) with respect to the architecture.</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>The value of documentation</h1>
    </div>
    <div class="slide_body">

        <p>If one thing is clear it's that the work we set out to do is difficult and it isn't getting any easier.</p>

        <p>Consider this quote from the paper !GET THE TITLE autonomous computing paper!:</p>

        <blockquote>
            Computing systems' complexity appears to be approaching the limits of human capability, yet the march toward increased interconnectivity and integration rushes ahead unabated.
        </blockquote>

        <p>If we're willing to entertain the idea that autonomous computing is a potential long term solution to the complexity problem, and if the authors of that paper are correct that the realization of their vision will require</p>

        <p>"a concerted, long-term, worldwide effort by researchers in a diversity of fields"</p>

        <p>We had better learn to tolerate complexity</p
        <ul>
            <li>better manage the problem today</li>
            <li>and lay the groundwork for future innovation</li>
        </ul>
        <p>How? By improving the tools and techniques we use to document software systems.</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>The challenges of documentation</h1>
    </div>
    <div class="slide_body">
    <p>Note: I'll warn you that there are several slides dealing with problems associated with documentation because</p>

    <ol>
    <li>1. There are a lot of problems.</li>
    <li>2. We must be familiar with the problems if we hope to develop a successful approach</li>
    </ol>

    <p>I have no doubt that we'll all recognize these problems, so it shouldn't take long to get through them...
   </p>

    <p>
        Easier doesn't necessarily mean easy.
    </p>

    <p>We have few well established patterns for dealing with documentation.</p>

    <p>There are many questions that must be answered before we can hope to do an adequate job with architecture documentation.</p>

    <ul>
        <li>Where to begin?</li>
        <li>How do we manage this wealth of documentation that is being, or has already been generated by others involved in the system?</li>
        <li>How do we describe the documentation itself (i.e. how do we document the documentation)?</li>
    </ul>

    <p>
        These are not the only challenging questions.
    </p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>The problem with a multiple document approach</h1>
    </div>
    <div class="slide_body">

        <p>The existence of multiple documents</p>

        <ul>
            <li>Risks fracturing the attention of people involved in the system;</li>
            <li>Allows for the possibility of parts of the documentation disappearing;</li>
            <li>Can lead to disagreement or confusion about what has been done and what still needs to be accomplished.</li>
        </ul>

        <p>It is not uncommon to find ourselves in a situation where we have multiple and competing documents, or multiple versions of the same document.</p>

        <ul>
            <li>
                Leads to misunderstanding, misrepresentation, and ultimately architectural confusion (i.e. confusion about what the architecture is).
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>The problem with a single document approach</h1>
    </div>
    <div class="slide_body">
        <p>A one document approach may be interpreted as a single task.</p>

        <ul>
            <li>The work may be assigned to one person or group.
                <ul>
                    <li>May require an unreasonable amount of time and effort to put together</li>
                    <li>Documentation is often either neglected or passed along to a separate group, who are not necessarily the best people for the job.</li>
                </ul>
            </li>
        </ul>

        <p>Writers of technical documentation are often detached or isolated from the development groups.</p>

        <ul>
            <li>Often leads to misunderstanding and inconsistencies between the documentation and the implementation itself.</li>
        </ul>

    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>More challenges</h1>
    </div>
    <div class="slide_body">
        <p>Although the architecture documentation should prescribe how the system should work, if it does not adequately describe the current behavior, it may be regarded as irrelevant

        <ul>
            <li>This may instead describe a broken implementation which doesn't agree with the intended architecture.</li>
        </ul>

        <p>We are often unrealistic about the investment required and as a result do not set aside adequate resources for documentation.</p>

        <p>The ability to write documentation well is a skill that not everyone involved in the development of software possesses, or practices.</p>

        <ul>
            <li>The emphasis of documentation in education, or lack thereof, may be an important factor.</li>
        </ul>

    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Still more challenges</h1>
    </div>
    <div class="slide_body">
        <p>Software development is not as linear as it once was, and that this may contribute to our inability to properly specify complex architectures.</p>
        <ul>
            <li>Taking into consideration modern development environment, and techniques, hundreds and thousands of developers working on the same system simultaneously and independently, and collaborating with teams that may be separated gegraphically.</li>
        </ul>
        <p>Unfortunately</p>
        <ul>
            <li>Documentation has remained stubbornly linear (whether or not this is true of software development)</li>
            <li>Even with architecture description languages, (a la UML), our diagrams are typically one of a linear set of ideas bound together that must be considered from beginning to end to be understood.</li>
        </ul>
        <p>Lastly, we may want to question some of the the assumptions that underlie the stated goals of architecture documentation.</p>
        <ul>
            <li>Is it appropriate to expect any one person, or small group, to anticipate or be capable of adequately representing the unique and often divergent concerns of all stakeholders?</li>
            <li>Do we expect the architect to write the architecture documentation?
                <ul>
                    <li>Is this reasonable given the unsettled role of the architect?</li>
                </ul>
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Solutions to these problems</h1>
    </div>
    <div class="slide_body">
        <p>How might we address some of these problems?</p>

        <p>In my estimation must be able to:</p>

        <ul>
            <li>Compose documentation (i.e. produce many views of a single document);</li>
            <li>Note:To minimize problems with either single and multiple document approaches and afford the flexibility necessary to allow for the flexible definition and representation of views.</li>
            <li>Bridge architecture and implementation level documentation;</li>
            <li>Note: To avoid the sort of architectural confusion that results when the architecture description does not agree with implementation level details.And to expose these inconsistencies, something which is important to the architect - even if the the details of implementation alone are not.</li>
            <li>Minimize the effort required to produce the architecture documentation by incorporating work which has already been done;</li>
            <li>Establish a connection between the the architecture and the architecture documentation;</li>
            <li>Involve everyone in the documentation effort, such that the collected knowledge about the architecture is reflected in the documentation;</li>
            <li>Explore nonlinear approaches to documentation, so that we can preserve detailed knowledge about the architecture without exposing an overwhelming amount of information;</li>
            <li>Pursue an approach that is flexible and adaptable enough to accommodate the potentially unique and varied concerns of existing stakeholders as well as meet the needs of new stakeholders.</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>My approach to the problem</h1>
    </div>
    <div class="slide_body">
        <p>My approach to the project was straightforward.</p>
        <p>I started producing and pulling together a wealth of documentation for Ode.</p>

        <p> Next, I identified what I considered to be critical concepts in the current thinking about architecture documentation.</p>

        <p>Finally, I needed a method which would allow me apply the concepts.</p>

        <ul>
            <li>What I came up with, and what I've been working on since, is a general "model" for pursuing architecture documentation.</li>
        <ul>

    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>A picture of the model</h1>
    </div>
    <div class="slide_body">
        <div class="center_me">
            <img src="/images/ode_blog/2010/2010_01/arch_doc_model_picture_labeled.jpg" title="Architecture Documentation Model" />
        </div>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Documentation components introduced</h1>
    </div>
    <div class="slide_body">
        <p>Borrowing concepts from component-based software engineering, we create a set of <em>documentation components</em></p>
        <p>These include a wide variety of architectural elements related to the architecture</p>
        <p>Anything we want to</p>
        <ul>
            <li>represent in one or more views of the architecture documentation.</li>
            <li>describe in greater detail</li>
        </ul>
        <p>Each documentation object is essentially a package of progressively more detailed versions of the documentation for one element of the architecture.</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Documentation component browser</h1>
    </div>
    <div class="slide_body">
        <p>Imagine that all of these documentation components arranged in a grid</p>
        <ul>
            <li>That grid, which I'm calling a <em>documentation component browser</em>, defines the scope of the architecture.</li>
        </ul>
        <p>Note: I am aware that this slide takes a turn toward the discussion of a possible implementation but it is a useful mechanism/vehicle to help understand how this model might work (I hope)
        and this is where I'm headed at the moment.</p>
        <p>I don't lean too heavily on a discussion of the implementation. (It's just this slide and the next.)</p>
        <p>The browser allows us to:</p>
        <ul>
            <li>Navigate any of the individual documentation objects</li>
            <li>Define, edit or delete documentation objects</li>
            <li>Filter the collection of documentation objects based on associated attributes or metadata</li>
            <li>Search over the entirety of the architecture documentation</li>
            <li>Select from a list of views to highlight only those components that are included in the view</li>
            <li>Create new views and assign documentation components to views</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Composing views</h1>
    </div>
    <div class="slide_body">
        <p>The browser does not show connections between documentation components.</p>
        <ul>
            <li>Doing so would violate the key concept that views hide documentation that is not relevant to the task at hand (and lead to confusion).</li>
        </ul>
        <p>We need another interface for composing views.</p>
        <p>When we select any view (from an collection of views available in the browser), The documentation components of that view are highlighted.<p>
        <p>If we choose to compose the view the browser's grid drops away.
        <ul>
            <li>Leaving only the components of the view
                <ul>
                    <li>which we can then manipulate by connecting and rearranging them for example.</li>
                </ul>
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Views</h1>
    </div>
    <div class="slide_body">
        <p>By connecting the documentation components, we specify relationships among the documentation, in a way that is similar to what you might think of doing with an abstract ADL.</p>
        <ul>
            <li>The purpose is to allow us to reason about a system that either we intend to build, or one which already exists.</li>
        </ul>
        <p>A view is a physical document in the sense that it can be printed, copied and shared.</p>
        <ul>We define a single architecture document and use it to hide, selectively expose, and manipulate what may be hundreds, or thousands source documents.</ul>
        <ul>
            <li>From this one document we can produce many more, each with a narrower focus, and each potentially tailored to the needs of a particular stakeholder.</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>More about connections</h1>
    </div>
    <div class="slide_body">
        <p>The model supports two approaches to documenting relationships in the architecture.</p>
        <ol>
            <li>We can include relationships among the documentation components, and then compose the components using only 'dumb' connections (which indicate nothing more an ordering over the documentation).
                <ul>
                    <li>With this approach, we can take advantage of the expressive power of our components as packaged abstractions.</li>
                </ul>
            </li>
            <li>Note: to describe complex connections at whatever level of detail is required</li>
            <li>We can also choose not include relationships among the documentation components and instead deal with them as part of composition...
                <ul>
                    <li>in which case we need a more robust collection of graphical objects and tools for composing documentation components.</li>
                </ul>
            </li>
        </ol>
        <p>This is a decision for the architect.</p>
        <ul>
            <li>If connections are very complex then we may choose the former approach.</li>
            <li>In an environment where a description language like UML is already commonly used, then it may be more appealing to deal with connections as part of the composition</li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>More about stakeholders</h1>
    </div>
    <div class="slide_body">
        <h2>Who are the stakeholders?</h2>
        <p>They may be roles, or individuals (i.e. specific people) involved with the architecture.</p>
        <ul>
            <li>There may be many such stakeholders, with narrowly defined concerns.</li>
        </ul>
        <p>Is it possible to anticipate the needs of all of these stakeholders?</p>
        <ul>
            <li>No, I would argue that it's not.</li>
            <li>A better approach is to allow stakeholders to generate their own views that meet their unique needs.
                <ul>
                    <li>This is in addition to a set of stock views which are composed by the architects.</li>
                </ul>
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>More about documentation components</h1>
    </div>
    <div class="slide_body">
        <p>They are reusable.</p>
        <ul>
            <li>Each is one of a library of components.</li>
            <li>Documentation components can appear in the browser, in one or more views, or part of another component's abstraction hierarchy.</li>
        </ul>
        <p>Is everything a documentation component?</p>
        <ul>
            </li>No. Consistent with other ideas about architecture documentation, there are both architecture and implementation level details.
                <ul>
                    <li>Architectural level details are represented as documentation components.</li>
                    <li>Implementation level details are simply graphical, or textual descriptions of some part of a system.
                        <ul>
                            <li>These appear (only) as part of the abstraction hierarchy for some architectural element and lack details of their own.</li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Advantages of this model</h1>
    </div>
    <div class="slide_body">
        <p>The approach is intended to be nonlinear, flexible, and adaptive.</p>
        <p>To this end it:</p>
        <ul>
            <li>Defines the scope of an architecture including the environment (as described by the IEEE recommended practice)</li>
            <li>Allows for composing documentation in response to the needs of the stakeholders</li>
            <li>Bridges between what is typically considered architecture and implementation level documentation.</li>
            <li>Is general purpose enough to work with many different styles of architecture.</li>
            <li>Emphasizes the key concepts of architecture documentation (already discussed).</li>
            <li>Is implementable and adoptable now.</li>
            <li>Does not introduce a lot of overhead beyond what is necessary to realize an architectural vision of the system.</li>
            <li>Is easy to understand.</li>
        </ul>
        <p>Note: You may recognize that many of these advantages answer/address the problems of documentation discussed earlier and correspond the proposed solutions which I've also talked about earlier in this presentation.</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Advantage: The model is adoptable now</h1>
    </div>
    <div class="slide_body">
        <h2>The model is adoptable now</h2>
        <p>There are quite a few proposed strategies for dealing with the need for architecture documentation.
        <p>A key question that must be asked when evaluating any of these approaches:<p>
        <ul>
            <li>Is the strategy put forward adoptable (given the current culture and prevailing approaches to the job of software engineering)?</li>
        </ul>
        <p>In other words, can we pursue architecture-based approaches without architects?</p>
        <ul>
            <li>I would suggest that the answer is no, and that this is a fundamental disconnect between what we suppose we must do to be successful, and what we are capable of achieving based solely on theoretical or technical progress.</li>
        </ul>
        <p>In comparison, I believe that the modest idea I'm presenting is adoptable now because it reflects the developer-driven organizational style that currently dominates software projects.</p>
        <ul>
            <li>
                What's more, this model can serve as a bridge to a potential future when the field may be more architecturally driven.
            </li>
        </ul>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Other advantages</h1>
    </div>
    <div class="slide_body">
        <p>Because it is a documentation model it does not place any restrictions on or make any assumptions about the system itself.</p>
        <ul>
            <li>A potentially promising solution may not be worth considering if it reduces an experienced development team to a group of novices.</li>
        </ul>
        <p>Documentation can serve as a path toward architectural change.</p>
        <ul>
            <li>It's reasonable to think that an architectural approach to documentation may lead to interest in architectural approaches to building systems.</li>
        </ul>
        <p>Documentation bridges architecture and implementation level details, serving as a medium for communication between stakeholders.</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Other advantages 2</h1>
    </div>
    <div class="slide_body">
        <p>The model addresses common logistical issues related to maintenance of documentation.</p>
        <ul>
            <li>We are asking everyone involved in maintaining the documentation to do a reasonable amount of work, and to be responsible for parts of the system they are familiar with.</li>
        </ul>
        <p>The model introduces only a minimal amount of overhead.</p>
            <ul>
                <li>The model takes advantage of implementation level documentation but does not burden the architect with implementation level details.</li>
            </ul>
            <p>Information that is not included in the documentation takes on an active meaning.</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Current and future work</h1>
    </div>
    <div class="slide_body">
        <h2>Current work</h2>
        <p>I'm continuing to refine the model by building a 'prototype' that works roughly as described.</p>
        <ul>
            <li>This means that I'm cobbling something together to play with these ideas more.</li>
            <li>I expect that this prototype will be fairly limited in its usefulness, except that hopefully it will help me work out some of the details.</li>
        </ul>
        <h2>Future work</h2>
        <p>Ultimately the end result of this may be the development of a set of tools for creating, manipulating and presenting architecture documentation in a way that is consistent with the model as described.</p>
    </div>
</div>

<div class="slide">
    <div class="slide_title">
        <h1>Fin</h1>
    </div>
    <div class="slide_body">
        <p>Thank you</p>
    </div>
</div>
 ]]></description>
            <pubDate>Tue, 15 Apr 2008 11:23:54 EDT</pubDate>
            <guid>http://ode-is-simple.com/home/news/presentations/arch_doc_model_for_ode-is-simple2010_0331</guid>
            <!-- <guid>http://ode-is-simple.com/home/2008/04/15/11/23/54/</guid> -->
        </item>


    </channel>
</rss>

