<?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>Reflections on Software Engineering &#187; Architecture</title>
	<atom:link href="http://neverletdown.net/topics/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://neverletdown.net</link>
	<description>by Michael Keeling</description>
	<lastBuildDate>Fri, 16 Jul 2010 04:37:34 +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>Improvisational Architecture</title>
		<link>http://neverletdown.net/2010/07/improvisational-architecture/</link>
		<comments>http://neverletdown.net/2010/07/improvisational-architecture/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 04:30:14 +0000</pubDate>
		<dc:creator>Michael Keeling</dc:creator>
				<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Big Design Up Front]]></category>
		<category><![CDATA[emergent design]]></category>
		<category><![CDATA[improvisation]]></category>
		<category><![CDATA[jazz]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[xp2010]]></category>

		<guid isPermaLink="false">http://neverletdown.net/?p=370</guid>
		<description><![CDATA[If you were to go to two improvisational jazz performances, even two concerts by the same band, you&#8217;d hear different music at each show.  The thrill of experiencing something unique, as it is created, without any kind of real plan or rehearsal, is both exciting and entertaining.  Sometimes the music is so spectacular [...]]]></description>
			<content:encoded><![CDATA[<p>If you were to go to two improvisational jazz performances, even two concerts by the same band, you&#8217;d hear different music at each show.  The thrill of experiencing something unique, as it is created, without any kind of real plan or rehearsal, is both exciting and entertaining.  Sometimes the music is so spectacular you feel like you&#8217;re witnessing a miracle.  Other times the group can&#8217;t seem to get it together and the show is one long, painful indulgence in artistic expression.  No matter the outcome, what you hear during that performance will never be experienced again.</p>
<p>Music has always served as a great metaphor for thinking about software development.  At XP2010 during one of the most original key notes I&#8217;ve ever seen, <a title="Wikipedia Entry about Bjørn Alterhaug" href="http://no.wikipedia.org/wiki/Bj%C3%B8rn_Alterhaug">Bjørn Halterhaug</a> and <a title="Wikipedia article about John Pål Inderberg" href="http://en.wikipedia.org/wiki/John_P%C3%A5l_Inderberg">John Pål Inderberg</a>, professors of musicology and improvisation respectively, from the University of Technology and Science in Trondheim, Norway and both veteran jazz musicians, discussed, through music and words how they approach improvisational jazz, the mechanics for making it work, and the general implications on collaboration among artists.  It&#8217;s tempting to romanticize improvisational jazz as a truly spontaneous creation but this isn&#8217;t exactly how it works in reality.  For any improvisational jazz band to be successful <a title="The seven characteristics of jazz improvisation." href="http://hhgttg.de/blog/?p=85">its members must exhibit seven key characteristics</a>.</p>
<ol>
<li>Provocative Competence Interrupting Habit Patterns</li>
<li>Embracing Errors as a Source of Learning</li>
<li>Minimum Structures that allow Maximum Flexibility</li>
<li>Distributed Task: Continual Negotiation toward Dynamic Synchronisation</li>
<li>Reliance of Retrospective Sense Making as Form</li>
<li>Hanging out: Membership in Communities of Practice</li>
<li>Alternating between Soloing and Supporting</li>
</ol>
<p>I propose that these seven characteristics apply directly to how teams who espouse emergent design should approach software architecture.</p>
<p><a href="http://www2.imm.dtu.dk/~hub/"><img src="http://neverletdown.net/images/jazz-xp2010-keynote.jpg" alt="XP2010 Keynote: Bjørn Alterhaug and John Pål Inderberg improvising jazz music on stage." /></a></p>
<h4>Music and Design</h4>
<p>Experienced musicians have an attenuated ear which enables them to hear music in ways that novices can&#8217;t.  Drawing on a well-developed playbook of clichés, an expert in the standup bass for example can not only follow the minimally, well-defined structure of a song but also weave pleasing bass licks into the musical ramblings of his band mates, adjusting his actions based on the paths his band mates choose with appropriate responsiveness as the song develops.  Part of it is musical maturity, a taste or style developed over years of playing, part of it is also trust both in himself as a musician but also in the rest of the group, that they too will not overreact to mistakes and are also able to follow a musical flow as it develops.</p>
<p>Well-defined but minimalist structure.  Contrast this with the music played by a symphony which is also well-defined but has explicit and detailed structure.</p>
<p>When I hear this I immediately think of architecture as seen through the lens of agile software processes which advocate strongly for emergent design.  <strong>Agile software development processes and agile culture in general strongly encourages teams to become improvisational architects.</strong> Create a minimalist, well-defined design of the system and then allow the developers to evolve the system, creating the design as they develop, playing off the code written by their fellow teammates as the system emerges.  The romantic view of this is appealing to some: &#8220;Let&#8217;s go have a code jammin&#8217; session, you dig?&#8221;  But the results of an emergent design can be just as varied as improvisational jazz bands; some designs are elegant and spectacular successes, some designs are flaming piles of disaster, most turn out somewhere in between &#8211; usually good enough for customers who aren&#8217;t paying too much and who expected a somewhat unpredictable but functionally adequate outcome.</p>
<p>So if you enjoy the thrill of experiencing once-in-a-lifetime moments of creation, the outcome of which can never be predicted or known ahead of time, then emergent design is probably right up your alley.  As demonstrated by the near exclusive emphasis on code and shipping, many agile developers fancy themselves as code jammin&#8217;, improvisational architects.</p>
<p>The exact opposite of emergent design, of course, is the easy to hate (and rightly so) enemy of creating things that actually work, Big Design Up Front, where a heavy cost is levied against a project in the beginning without producing any usable code whatsoever.  Sticking with the music metaphor, the well-defined, explicit, and detailed structures of a symphony might take a composer months or even years to create.  But in exchange for this planning you get a piece of music that is guaranteed to be executed (for all intents and purposes) in a nearly identical way in every performance in which it is played.  I am not saying you should use a Big Design Up Front approach, in reality, even Mozart tried out music and made incremental deliveries to his sponsors as he wrote.</p>
<p>While certainly a degree of improvisation happens when we develop software, customers paying for software usually expect more predictability in the outcome.  So, while it might be ok to spend 30 bucks for a fun first date with a girl at a jazz club &#8211; if only for the experience of it &#8211; when I pay 100 bucks a ticket to see the symphony play Mozarts&#8217;s Requiem, I would be more than a little disappointed, angry, and confused if the first chair violinist &#8220;felt a groove&#8221; in the middle of the second movement and began jamming.  The greater the cost of a project, the more highly valued predictability in it will be.</p>
<h4>Who can be an Improvisational Architect?</h4>
<p>Mozart was a true genius, a master of composition.  To play Mozart, you need to be well practiced but you don&#8217;t need to have his level of genius.  On the other hand, most members of a great improvisational jazz group must be experienced musicians &#8211; experienced in composition as well as technical playing ability.  Even then, a great group will usually avoid disaster but occasionally it will still happen because of the nature of improvisation.</p>
<p>In my experience, teams that plan to allow their designs to emerge do an ok job of providing the minimal structure that is essential for evolving a design.  But only a few developers have the necessary experience and background to truly improvise a design.  The implication?  <strong>Most teams are terrible at improvising architecture because they have neither a solid enough understanding of the core fundamentals for software architecture nor the experience with using architectural design to reason about a system.</strong></p>
<p>I believe that most of the seven characteristics of improvisation are deeply ingrained in agile culture, but agile teams often fail to fully embrace all seven characteristics of improvisation when designing a software system.  A team without the experience, who doesn&#8217;t understand design cliché&#8217;s (architectural styles and patterns) will have an unpredictable outcome when allowing the design of a system to emerge as the system is developed.  <strong>This is something the agile community must work to resolve.</strong></p>
<h4>Bonus</h4>
<p><a href="http://blog.coryfoy.com/">Cory Foy</a> was thinking ahead and had the foresight to record video of the performance/keynote.  It comes in 6 parts.</p>
<ul>
<li><a href="http://vimeo.com/12261921">Part 1 &#8211; introduction number</a></li>
<li><a href="http://vimeo.com/12261626">Part 2 &#8211; introduction to improvisational jazz, link to XP, perspectives and group dynamic, a glimpse of how they teach jazz and improvisation</a></li>
<li><a href="http://vimeo.com/12261727">Part 3 &#8211; Second number, application of theory discussed in part 2</a></li>
<li><a href="http://vimeo.com/12261664">Part 4 &#8211; Beginning to introduce the idea of minimalist structures, awesome body percussion number</a></li>
<li><a href="http://vimeo.com/12261822">Part 5 &#8211; communication, the seven characteristics of improvisational jazz, demonstration of &#8220;minimal structure for maximum flexibility&#8221;</a></li>
<li><a href="http://vimeo.com/12260590">Part 6 &#8211; closing remarks and the final number</a></li>
</ul>
<p>Ingvald Skaug was also inspired by this talk and wrote <a href="http://skaug.no/ingvald/2010/06/kanban-agile-jazz.html">an interesting essay which explains kanban as agile jazz</a>.  Check it out for a process perspective on the idea of &#8220;minimal structure for maximum flexibility.&#8221;  If you believe <a href="http://en.wikipedia.org/wiki/Conway's_Law">Conway&#8217;s Law</a>, then it isn&#8217;t coincidence that we would apply the characteristics of improvisation in jazz to both process and design.</p>
]]></content:encoded>
			<wfw:commentRss>http://neverletdown.net/2010/07/improvisational-architecture/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Exploring Archetypes of Architects</title>
		<link>http://neverletdown.net/2009/10/exploring-archetypes-of-architects/</link>
		<comments>http://neverletdown.net/2009/10/exploring-archetypes-of-architects/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 17:56:17 +0000</pubDate>
		<dc:creator>Michael Keeling</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[architect]]></category>
		<category><![CDATA[OOPSLA]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://neverletdown.net/?p=115</guid>
		<description><![CDATA[During a brainstorming session in a recent OOPSLA workshop I participated in we were discussing what qualities make for a &#8220;good&#8221; architect in an agile world.  I jotted down this list during the discussion based on the group brain dump.  Some archetypes are &#8220;good&#8221; while others are &#8220;bad&#8221; but I don&#8217;t think any [...]]]></description>
			<content:encoded><![CDATA[<p>During a brainstorming session in a <a href="http://mysite.verizon.net/dennis.mancl/oopsla09/">recent OOPSLA workshop I participated in</a> we were discussing what qualities make for a &#8220;good&#8221; architect in an agile world.  I jotted down this list during the discussion based on the group brain dump.  Some archetypes are &#8220;good&#8221; while others are &#8220;bad&#8221; but I don&#8217;t think any of them necessarily describe the perfect architect.  When you&#8217;re designing software, what kind of architect are you?  What kind do you prefer to work with?</p>
<p><strong>The Megalomaniac Architect</strong>:  &#8220;You will implement the system as I have designed it because I am the most important person on this team, the project will fail without me, and I am the only one smart enough to know everything that needs to be known!&#8221;</p>
<p><strong>The Benevolent Dictator</strong>:  &#8220;Implement the system precisely as I have designed it and I will make your work easier.&#8221; [via Dennis Mancl]</p>
<p><strong>The &#8220;Everything’s a Nail!&#8221; Architect</strong>:  All problems can be solved by a single tool, idea, or way of thinking.  He’s got a hammer…and everything he sees is a nail.</p>
<p><strong>The Diva</strong>: &#8220;I’m the architect of this system!  Are you questioning my ability to design?  If you’re not going to appreciate my talents, maybe I’ll just go to another team.&#8221;</p>
<p><strong>The Magician</strong>: Excellent at high level abstraction, vague on how the design actually achieves architectural drivers.</p>
<p><strong>The Over-Accommodating Architect</strong>: &#8220;You want that change?  No problem.&#8221;  There are no trade-offs to consider when making architectural decisions.</p>
<p><strong>The Chess Master</strong>:  To achieve victory, it is simply a matter of being able to see enough moves ahead.  Every element in the architecture can be strategically placed in a perfect position to checkmate your opponent:  requirements changes.</p>
<p><strong>The PowerPoint Architect</strong>: &#8220;Architecture is just pretty pictures!&#8221;</p>
<p><strong>The Ninja</strong>: Infiltrates a project from the outside, crafts an amazing design, then disappears into the shadows before anyone realizes he’s gone.  Ninjas do not suffer fools and their designs are technically correct, thorough, and beyond your ability to comprehend.</p>
<p><strong>The Navigator</strong>: Creates a map (with legend) and uses it to plot a course through implementation, testing, and deployment.</p>
<p><strong>The Movie Producer</strong>:  Leads the team indirectly by providing technical design support.  [<a href="http://rhinoresearch.com/blog">via George Fairbanks</a>]</p>
<p><strong>The Coach</strong>: Teaches the team about architectural practices and concepts as well as the design.</p>
<p><strong>The Puppeteer</strong>:  Able to manipulate multiple levels of abstraction simultaneously to design the architecture, the Puppeteer effortlessly manages the various threads influencing the design (commonly known as architectural drivers).</p>
<p><strong>The Seasoned Veteran</strong>:  He’s tried a lot of things and is pretty good at all of them including programming, design, processes, and management.  Thanks to his experience, having walked 10,000 miles, he understands the role of architecture across the lifecycle, has seen many different situations, and is an excellent technical practitioner. [<a href="http://www.amazon.com/gp/product/0201485672?ie=UTF8&#038;tag=nevletdowdotn-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0201485672">via Bill Opdyke</a>]</p>
<p><strong>The Long-Bearded Wise Man</strong>:  A little philosophical but always willing to share an enlightened thought that will help resolve whatever concerns are ailing the project, though somewhat indirectly.</p>
<p><strong>The Team Captain</strong>:  A bona fide member of the team, playing on the field with everyone else, leading the team from the field.</p>
<p><strong>The Design Evangelist</strong>:  Excited about the architectural drivers and architecture to the point of near fanaticism.   His enthusiasm for architecture and the system’s design is infectious and helps maintain conceptual integrity of the system.</p>
<p><strong>The Student</strong>:  Takes time to learn about the problem domain and the customer’s needs to the greatest extent possible so that he understands and solves the right problems. [<a href="http://www.instantiated.ca/">via Gail Harris</a>]</p>
<p>What other archetypes have you worked with?  Which archetypes do you think might combine to make the perfect software architect?</p>
]]></content:encoded>
			<wfw:commentRss>http://neverletdown.net/2009/10/exploring-archetypes-of-architects/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
