<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>traceinthesand.com Blog &#187; Uncategorized</title>
	<atom:link href="http://traceinthesand.com/blog/index.php/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://traceinthesand.com/blog</link>
	<description>Musing about architecture, architecting and architects</description>
	<lastBuildDate>Sun, 28 Nov 2010 16:48:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Architecture Documentation: Courage to Fly in the Face of Convention</title>
		<link>http://traceinthesand.com/blog/2006/08/25/architecture-documentation-courage-to-fly-in-the-face-of-convention/</link>
		<comments>http://traceinthesand.com/blog/2006/08/25/architecture-documentation-courage-to-fly-in-the-face-of-convention/#comments</comments>
		<pubDate>Fri, 25 Aug 2006 20:48:51 +0000</pubDate>
		<dc:creator>Ruth</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://traceinthesand.com/blog/2006/08/25/architecture-documentation-courage-to-fly-in-the-face-of-convention/</guid>
		<description><![CDATA[I have learned what I know about good architecture from working with good architects, many of whom have set the bar for excellence in architecture documentation. That said, I am too often caused to lament that the only thing harder than getting engineers to read the architecture documentation is getting architects to write it!. So why bother? [...]]]></description>
			<content:encoded><![CDATA[<p align="left"><font face="Arial" size="2">I have learned what I know about good architecture from working with good architects, many of whom have set the bar for excellence in architecture documentation. That said, I am too often caused to lament that the only thing harder than getting engineers to read the architecture documentation is getting architects to write it!. So why bother? Who cares? It is only going to get out-of-date. It takes work, and isn&#8217;t that time better spent coming up with better solutions to the challenges we face? Or better still, writing code, which is the ultimate in system documentation&#8211;right??? </font></p>
<p align="left"><font face="Arial" size="2">An architectural decision that isn&#8217;t written down has a lifespan of, let&#8217;s see, what is the memory span of a goldfish? Actually, it turns out that a <a href="http://nootropics.com/intelligence/smartfish.html">goldfish memory span</a> is not just a few seconds as previously thought. And we&#8217;re even smarter than goldfish. Can&#8217;t we just rely on our individual and group memory? Well, we have all been in the situation where a decision we thought we made yesterday, is still under debate today, and we have to persuade and coax, inform and influence, brow-beat and defend all over again. </font></p>
<p align="left"><font face="Arial" size="2">Writing the decision down doesn&#8217;t get us entirely away from this perpetual churn, but it does help. We get sign-off on the decision. Once that is achieved, we can demand that only counter-arguments that have a strong link to architectural requirements can be <a href="http://www.bredemeyer.com/HotSpot/20040428EASoapBox.htm">brought up in contention</a> with the decision.</font></p>
<p align="left"><font face="Arial" size="2">Still, the half-life of an architectural decision depends very much on the authority vested in the architects, and how this authority is formally and informally reinforced in the organization. And it depends on what the architects do to communicate the decision, and what support and follow-through they apply.</font></p>
<p align="left"><font face="Arial" size="2">So, if we cowtail to the push-back against architecture documentation from extreme agilists, and our own disinclination to write down architecture decisions and thinking that went into them, then we are sending the message that the &#8220;architecture&#8221; is not a set of decisions but just a fluid initial starting point that we expect everyone to remold and reshape actively and without constraint&#8211;or restraint.</font></p>
<p align="left"><font face="Arial" size="2">In some situations this may be just fine. If we are working on a novel system, without precedent in our experience and in the collective experience of our industry (so we can&#8217;t hire in the experience we need), then it would be foolhardy to create an architecture specification early on and expect to live by it through the life of the system. </font></p>
<p align="left"><font face="Arial" size="2">Architecture is intended to constrain&#8211;and enable, but the price is that we must constrain; that&#8217;s what decisions do. Once made, they have eliminated some alternatives we might otherwise have picked. Yes, like <a href="http://sethgodin.typepad.com/seths_blog/2006/07/no_stoplights.html">stop lights</a>, they enable and constrain. So, is it reasonable to constrain (and enable) ourselves early on in the project? W</font><font face="Arial" size="2">hile we are always pushing boundaries beyond what we already know, we are generally also working with a good deal of experience to leverage. To the extent that we can create an architecture that we can validate and build confidence that it will serve us through the first release, and prepare us well for subsequent releases, we should do due diligence when it comes to documenting our architecture. </font></p>
<p align="left"><font face="Arial" size="2">But what is architecture documentation? In good part, the architecture documentation consists of the very models we use to think through and make the architecture decisions. In short, much of the work is already done, assuming that we use models to visualize and evaluate architectural approaches. The diligence part has to do with:</font></p>
<ol type="i">
<li>
<p align="left"><font face="Arial" size="2">making sure we write down the thinking behind the models</font></p>
</li>
<li>
<p align="left"><font face="Arial" size="2">keeping the models (and supporting explanations) up-to-date</font></p>
</li>
</ol>
<p align="left"><font face="Arial" size="2">Architecture documentation explains and justifies the decisions that embody the architecture. So we need to articulate the reasoning, tracing the decisions back to the requirements that drove them, keeping track of alternatives we weighed but ruled out and why (so we don&#8217;t have to make the same arguments again and again), and writing down assumptions we made (so if these assumptions are invalidated, we know we have to revisit the decision). </font></p>
<p align="left"><font face="Arial" size="2">When we do this, we also help educate the engineering community, sharing the experiences that shaped our decisions. By documenting our reasoning like this, we make our knowledge explicit and shareable. Further, it makes us more careful, because we leave a record that can be assessed and debated. </font></p>
<p align="left"><font face="Arial" size="2">One of the things we have to do as architects is figure out where to push back against the status quo, to lead out of the rut we are in to a better way of doing things; a better way that enhances our community&#8217;s quality of life. And we have to figure out which battles just aren&#8217;t worth it, because it takes energy and passion to lead these changes, and some changes are more important than others. </font></p>
<p align="left"><font face="Arial" size="2">For the things that we see rising above this cut-line, we need to do what it takes to be effective. We must not allow ourselves to be lulled by the cries of &#8220;it&#8217;s all going to change anyway&#8221; to escape the effort it takes to write good documentation for architecturally-significant decisions. If we want these decisions to impact the behavior of people implementing them, we need to do our part in communicating them. </font></p>
<p align="left"><font face="Arial" size="2">The architecture decisions must be recorded, so we have a ready reference that doesn&#8217;t depend on us being always in the room, ready to explain and defend each decision. The decisions must be communicated and understood. It is worth it, if the architecture decisions are worth it. So the decisions must be strategic and <a href="http://www.bredemeyer.com/pdf_files/MinimalistArchitecture.PDF">minimalist</a>, and relevant. As soon as they are not, we must be on hand to adapt the architecture decision set.</font></p>
<p align="left"><font face="Arial" size="2">Once written down, to be sure not everyone who should read the various architecture documents, will read them. But those that do will have a much better understanding of the architecture, and the rationale for the decisions it encompasses. Good models and well-written explanations get right into the head of the reader in a personal and effective way. The reader can engage, backtrack, hold an internal dialog with the material until it is well understood, or at least clear where the questions are. Each reader will be better positioned to explain to their  peers and reports what the architecture means, in the narrow direct sense and in the broader sense of its intent. This very effectively expands your capacity to champion and explain architecture decisions and catch misunderstandings and misapplication of the architecture.</font></p>
<p align="left"><font face="Arial" size="2">All this presumes that you and your team can come up with an architecture. It does not presume that you make every architectural decision in advance of all coding. Not at all! But when you have a complex organizational setting (large number of developers, distributed teams, etc.), then you need to do more of the architecture work upfront, and document AS YOU GO, not afterwards! There never is an &#8220;afterwards&#8221; and even if there was, you&#8217;ll have forgotten much of the rationale, if not many of the important decisions. Besides, though we need architecture documentation to help us with system evolution, we need architecture to create a system that addresses our architecturally significant requirements in the first place. </font></p>
<p align="left"><font face="Arial" size="2">Early on, figure out what the architecturally significant uncertainties and risks are, and figure out what you must do to resolve these risks. Leaving them until &#8220;you must deal with them&#8221; is risky business. Then work quickly, with a focus on architectural priorities, to get a minimalist set of architecture decisions explored, validated (through models, reviews and assessments, simulations, mock-ups, and early, focused development of critical pieces of the code) <em>and documented</em>!</font></p>
<p align="left"><font face="Arial" size="2">The bottom line: No architecture documentation &#8211;> no architecture; no architecture and we rely on organic people-intensive communication processes that, on average, don&#8217;t scale too well. No architecture + big project &#8211;> <a href="http://www.bredemeyer.com/Architect/WhitePapers/SoftwareFailures.htm">project wipe-out</a>. </font></p>
<p align="left"><strong><font face="Arial" size="2">Other Perspectives on Architecture Documentation</font></strong></p>
<p align="left"><font face="Arial" size="2">For Architecture Documentation:</font></p>
<ul>
<li>
<p align="left"><font face="Arial" size="2"><a href="http://www.oreillynet.com/xml/blog/2006/03/documenting_your_software_arch.html">Documenting your Software Architecture</a>, by Jim Alateras on March 15, 2006</font></p>
</li>
<li>
<p align="left"><font face="Arial" size="2"><a href="http://softarc.blogspot.com/2006/06/why-documentation-matters-intent-and.html">Why Documentation Matters</a>, by Frank Kelly, posted on June 15, 2006</font></p>
</li>
</ul>
<p align="left"><font face="Arial" size="2">On-the-fence about Architecture Documentation:</font></p>
<ul>
<li>
<p align="left"><font face="Arial" size="2"><a href="http://www.agilemodeling.com/essays/agileArchitecture.htm">Agile Architecture Modeling</a>, by Scott Ambler, last updated on April 29, 2006</font></p>
</li>
</ul>
<p align="left"><font face="Arial" size="2">Creating Architecture Documentation:</font></p>
<ul>
<li>
<p align="left"><font face="Arial" size="2"><a href="http://www.bredemeyer.com/architecture_documentation_action_guides.htm">Software Architecture Documentation</a>, by Ruth Malan and Dana Bredemeyer, March 2003</font></p>
</li>
<li>
<p align="left"><font face="Arial" size="2"><a href="http://www.bredemeyer.com/ArchitectingProcess/SWAActionGuideTOC.htm"><em>Software Architecture Action Guide Book</em></a> (draft), by Ruth Malan, and Dana Bredemeyer, 2006</font></p>
</li>
<li>
<p align="left"><font face="Arial" size="2"><a href="http://www.bredemeyer.com/pdf_files/MinimalistArchitecture.PDF">Less is More with Minimalist Architecture</a>, by Ruth Malan and Dana Bredemeyer, published in IEEE&#8217;s <em><a href="http://www.computer.org/itpro/">IT Professional</a></em>, September/October 2002.</font></p>
</li>
<li>
<p align="left"><font face="Arial" size="2"><a href="http://www.architecture.external.hp.com/Download/download.htm">A Template for Documenting Software Architectures</a>, by Mike Ogush, Derek Coleman, and Dorothea Beringer, March 2000</font></p>
</li>
<li>
<p align="left"><font face="Arial" size="2"><a href="http://www.win.tue.nl/~mchaudro/sa2004/Kruchten4+1.pdf">Architectural Blueprints &#8211; The 4+1 View Model of Software Architecture</a>, by Philippe Kruchten  </font></p>
</li>
<li>
<p align="left"><font face="Arial" size="2"><a href="http://standards.ieee.org/reading/ieee/std_public/description/se/1471-2000_desc.html">IEEE Std 1471-2000 IEEE Recommended Practice for Architectural Description of Software-Intensive Systems</a></font></p>
</li>
<li>
<p align="left"><font face="Arial"><a href="http://www.sei.cmu.edu/publications/documents/00.reports/00sr004.html"><font size="2">Software Architecture Documentation in Practice: Documenting Architectural Layers</font></a><font size="2">, by Felix Bachmann, Len Bass, J. Carriere, P. Clements, D. Garlan, J. Ivers, R. Nord, and R. Little, 2000</font></font></p>
</li>
<li>
<div id="contentAll">
<div id="contentArticle">
<div id="firstCol">
<h1><span style="font-weight: 400"><font face="Arial" size="2"><a href="http://www.awprofessional.com/articles/article.asp?p=30695&#038;rl=1">Architecture Documentation — Choosing the Views</a>, by Paul Clements, Jan 31, 2003.</font></span></h1>
</div>
</div>
</div>
</li>
</ul>
<p align="left"><font face="Arial" size="2">See also <a href="http://www.bredemeyer.com/Books/SoftwareArchitectureBooks.htm">Software Architecture Books</a> and <a title="Architecture Documentation" href="http://www.ruthmalan.com/Journal/2006JournalApril.htm#Documentation">Architecture Documentation (links)</a> in my Trace in the Sand Architecture Journal</font></p>
<p align="left"><font face="Arial" size="2">[8/25/06: Had to republish this post so the sidebars would show up.]</font></p>
<p align="left"><font face="Arial" size="2">[9/16/06: Arnon Rotem-Gal-Oz is blogging on the <a href="http://www.ddj.com/blog/architectblog/archives/2006/09/the_software_ar.html">Software Architecture Document</a> -- on 9/12/06. See also Deliverables sections of our Software Architecture Action Guide book chapters on <a href="http://www.bredemeyer.com/pdf_files/ActionGuides/MetaArchitectureActionGuide.PDF">Meta</a>, <a href="http://www.bredemeyer.com/pdf_files/ActionGuides/ConceptualArchitectureActionGuide.PDF">Conceptual</a> and (soon) Logical Architecture.]</font></p>
]]></content:encoded>
			<wfw:commentRss>http://traceinthesand.com/blog/2006/08/25/architecture-documentation-courage-to-fly-in-the-face-of-convention/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.451 seconds -->

