<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Mike MacDonagh&#039;s Blog</title>
	<atom:link href="http://mikemacd.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikemacd.wordpress.com</link>
	<description>Somewhere in the overlap between software development, process improvement and psychology</description>
	<lastBuildDate>Tue, 18 Jun 2013 12:34:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mikemacd.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Mike MacDonagh&#039;s Blog</title>
		<link>http://mikemacd.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mikemacd.wordpress.com/osd.xml" title="Mike MacDonagh&#039;s Blog" />
	<atom:link rel='hub' href='http://mikemacd.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Reduce waste: Visualise the value stream</title>
		<link>http://mikemacd.wordpress.com/2013/02/26/reduce-waste-visualise-the-value-chain/</link>
		<comments>http://mikemacd.wordpress.com/2013/02/26/reduce-waste-visualise-the-value-chain/#comments</comments>
		<pubDate>Tue, 26 Feb 2013 21:47:44 +0000</pubDate>
		<dc:creator>mikemacd</dc:creator>
				<category><![CDATA[software development, methods and tools]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[business change]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[kpi]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[process_improvement]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[sla]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software-development]]></category>
		<category><![CDATA[systems thinking]]></category>
		<category><![CDATA[value chain]]></category>
		<category><![CDATA[variance]]></category>
		<category><![CDATA[visualisation]]></category>

		<guid isPermaLink="false">http://mikemacd.wordpress.com/?p=1281</guid>
		<description><![CDATA[A big thing in software process improvement (urgh) is reducing waste.  A great idea, but how do you identify waste? One powerful method that I use is value stream visualisation. There&#8217;s a number of ways of getting information about the value stream ranging from physically walking the chain to simply asking people. Sounds simple doesn&#8217;t it? [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1281&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>A big thing in software process improvement (<a title="I’m coming out as not-Agile and not post-Agile" href="http://mikemacd.wordpress.com/2012/09/03/im-coming-out-as-not-agile-and-not-post-agile/">urgh</a>) is reducing waste.  A great idea, but how do you identify waste?</p>
<p>One powerful method that I use is value stream visualisation. There&#8217;s a number of ways of getting information about the value stream ranging from <a title="Understand the software value chain by walking it" href="http://mikemacd.wordpress.com/2012/12/18/understand-the-software-value-chain-by-walking-it/">physically walking the chain</a> to simply asking people.</p>
<p>Sounds simple doesn&#8217;t it? But one of the best sources of information about wasteful processes and ways of working in a team is simply asking the team what they feel they shouldn&#8217;t be spending time on. By freeing up people to actually do their job they can reduce waste and improve productivity. One method I use is to ask each team member to identify a list of n items that they have to spend time on that they think are either entirely or partially wasteful. Basically a list of their impediments. I then anonymize the list look for commonality and then the top few are a reasonable target for improvement.</p>
<p>Alternatively actually walking the path of a piece of work through an organisation can really open the eyes to the sheer number of people and unnecessary waiting involved in some wasteful processes&#8230;</p>
<p>Anyway, having got some data I find it useful to visualise it in terms of waiting time and doing time. In Lean-speak cycle time is the time it takes to actually do something, lead time is the time it takes from the request being made to it finally being delivered. In many tasks the lead time far outstrips the cycle time, visualising it can make that very clear.</p>
<p><a href="http://mikemacd.files.wordpress.com/2013/02/low_lead_time.png"><img class=" wp-image-1284 alignleft" style="margin-left:5px;margin-right:5px;" alt="Low Lead time" src="http://mikemacd.files.wordpress.com/2013/02/low_lead_time.png?w=58&#038;h=34" width="58" height="34" /></a> For example, a task with has a lead time of 5 days might actually be made up of 2 days waiting time before it actually gets picked up and the cycle time of 3 days starts.</p>
<p><a href="http://mikemacd.files.wordpress.com/2013/02/big_lead_time.png"><img class=" wp-image-1285 alignleft" style="margin-left:5px;margin-right:5px;" alt="Large lead time" src="http://mikemacd.files.wordpress.com/2013/02/big_lead_time.png?w=102&#038;h=30" width="102" height="30" /></a>If you look at all of the tasks in your value chain you might find that many of them look more like this, with very large wasteful waiting times. There are many reasons why there might be a large waiting time, typically the team doing the tasks is over-subscribed, or a team might be protecting it&#8217;s <a href="http://en.wikipedia.org/wiki/Service-level_agreement">SLAs</a>, <a href="http://en.wikipedia.org/wiki/Performance_indicator">KPIs</a> or other <a href="http://en.wikipedia.org/wiki/Three-letter_acronym">TLAs</a>. These problems can have significant effects when looking at the system as a whole.</p>
<p>Even more interesting is looking at how these tasks might fit together in a value stream. If we imagine a business function that involves a request moving through a bunch of tasks across a number of teams that have different waiting and doing times a simple sequence of tasks, with a little buffering between them from the Project Manager to allow for schedule variance naturally, might end up looking like this:</p>
<p style="text-align:center;"> <a href="http://mikemacd.files.wordpress.com/2013/02/sequential_value_chain_arrows1.png"><img class="aligncenter  wp-image-1291" alt="sequential_value_chain_arrows" src="http://mikemacd.files.wordpress.com/2013/02/sequential_value_chain_arrows1.png?w=559&#038;h=206" width="559" height="206" /></a></p>
<p style="text-align:left;">Here we have 26 days of actual work spread over almost 60 days (12 weeks) of elapsed time = 40% waste. Even if the person planning the work is willing to accept some risk and try to optimise their workflow a bit without improving the waste inherent in the tasks involved there&#8217;s still a lot of waste in the system.</p>
<p style="text-align:left;"><a href="http://mikemacd.files.wordpress.com/2013/02/parallel_value_chain_arrows1.png"><img class="aligncenter size-full wp-image-1292" alt="parallel_value_chain_arrows" src="http://mikemacd.files.wordpress.com/2013/02/parallel_value_chain_arrows1.png?w=630"   /></a></p>
<p style="text-align:left;">By visualising the value stream in this way we can see straight away (apologies to red/green colour blind folks) that there&#8217;s a lot of red, a lot of waste. In many cases planners aren&#8217;t willing to accept the risks inherent in overlapping activities as shown here, or aren&#8217;t even aware that they can leading to the more sequential path shown above. The result is a minimum time that it takes a request to get done, based on the impedence of the current value chain of, in this case, 38 days before we even start thinking about actually doing any work.</p>
<p style="text-align:left;">Surely that&#8217;s not right.</p>
<br />Filed under: <a href='http://mikemacd.wordpress.com/category/software-development-methods-and-tools/'>software development, methods and tools</a> Tagged: <a href='http://mikemacd.wordpress.com/tag/agile/'>agile</a>, <a href='http://mikemacd.wordpress.com/tag/business-change/'>business change</a>, <a href='http://mikemacd.wordpress.com/tag/kanban/'>kanban</a>, <a href='http://mikemacd.wordpress.com/tag/kpi/'>kpi</a>, <a href='http://mikemacd.wordpress.com/tag/lean/'>lean</a>, <a href='http://mikemacd.wordpress.com/tag/management/'>management</a>, <a href='http://mikemacd.wordpress.com/tag/planning/'>planning</a>, <a href='http://mikemacd.wordpress.com/tag/process/'>process</a>, <a href='http://mikemacd.wordpress.com/tag/process_improvement/'>process_improvement</a>, <a href='http://mikemacd.wordpress.com/tag/sketch/'>sketch</a>, <a href='http://mikemacd.wordpress.com/tag/sla/'>sla</a>, <a href='http://mikemacd.wordpress.com/tag/software/'>software</a>, <a href='http://mikemacd.wordpress.com/tag/software-development/'>software-development</a>, <a href='http://mikemacd.wordpress.com/tag/systems-thinking/'>systems thinking</a>, <a href='http://mikemacd.wordpress.com/tag/value-chain/'>value chain</a>, <a href='http://mikemacd.wordpress.com/tag/variance/'>variance</a>, <a href='http://mikemacd.wordpress.com/tag/visualisation/'>visualisation</a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1281&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikemacd.wordpress.com/2013/02/26/reduce-waste-visualise-the-value-chain/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/4d2f742e138474d59582386916e36d8e?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">mikemacd</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2013/02/low_lead_time.png" medium="image">
			<media:title type="html">Low Lead time</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2013/02/big_lead_time.png" medium="image">
			<media:title type="html">Large lead time</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2013/02/sequential_value_chain_arrows1.png" medium="image">
			<media:title type="html">sequential_value_chain_arrows</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2013/02/parallel_value_chain_arrows1.png" medium="image">
			<media:title type="html">parallel_value_chain_arrows</media:title>
		</media:content>
	</item>
		<item>
		<title>What is &#8220;good&#8221; software architecture or design?</title>
		<link>http://mikemacd.wordpress.com/2013/02/18/what-is-good-software-architecture-or-design/</link>
		<comments>http://mikemacd.wordpress.com/2013/02/18/what-is-good-software-architecture-or-design/#comments</comments>
		<pubDate>Mon, 18 Feb 2013 11:29:09 +0000</pubDate>
		<dc:creator>mikemacd</dc:creator>
				<category><![CDATA[software development, methods and tools]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[architecture practices]]></category>
		<category><![CDATA[cognitive science]]></category>
		<category><![CDATA[component based development]]></category>
		<category><![CDATA[components]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[extreme programming]]></category>
		<category><![CDATA[good architecture]]></category>
		<category><![CDATA[intentional]]></category>
		<category><![CDATA[mechanisms]]></category>
		<category><![CDATA[modular]]></category>
		<category><![CDATA[post-agile]]></category>
		<category><![CDATA[problem solving]]></category>
		<category><![CDATA[sketching]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software-development]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://mikemacd.wordpress.com/?p=1276</guid>
		<description><![CDATA[Architecture is a fine balance between a subtle science and exact art that combines cognitive problem solving, technical direction and expressing abstract views to aid common understanding. Design is similarly an inexact science which is inextricably linked to Architecture. As a result it&#8217;s quite hard to define what makes a &#8220;good&#8221; architecture or design. There [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1276&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a title="What is enough agile architecure?" href="http://mikemacd.wordpress.com/2012/09/26/what-is-enough-agile-architecure/">Architecture</a> is a fine balance between a subtle science and exact art that combines cognitive problem solving, technical direction and expressing abstract views to aid common understanding. Design is similarly an inexact science which is inextricably linked to Architecture. As a result it&#8217;s quite hard to define what makes a &#8220;good&#8221; architecture or design.</p>
<p>There are high numbers of design and architecture practices ranging from the purely transformational to the evolutionary and emergent (both manual and automated) but there seems to be some heuristic consistency between these various practices and the approaches of the traditional, agile and<a title="I’m coming out as not-Agile and not post-Agile" href="http://mikemacd.wordpress.com/2012/09/03/im-coming-out-as-not-agile-and-not-post-agile/"> post-agile</a> movements.</p>
<p>Initially I saw the simple descriptions of that makes for &#8220;good&#8221; design from from Ron Jeffries and Kent Beck in <a href="http://xprogramming.com/classics/expemergentdesign/">Xtreme Programming</a>. I like the style and direction of this kind of description so here&#8217;s my take on the characteristics that make for &#8220;good&#8221; design or architecture:</p>
<ul>
<li><a title="Intentional vs. Emergent Architecture" href="http://mikemacd.wordpress.com/2013/02/04/intentional-vs-emergent-architecture/">Intentional</a> structure and behaviour</li>
<li>Highly modular: consisting of separate services, components, classes, objects or modules
<ul>
<li>Elements are highly cohesive</li>
<li>Elements are loosely coupled</li>
<li>Elements have low algorithmic complexity</li>
</ul>
</li>
<li>Avoids duplication</li>
<li>Well described elements: modular elements have simple expressive meaningful name enabling readers to quickly understand their purpose, similar to <a href="http://www.cleancoders.com/">code cleanliness</a> we should strive for design cleanliness</li>
<li>Runs and passes all defined tests or acceptance criteria</li>
<li><a title="Lightweight architecture sketch in a single diagram" href="http://mikemacd.wordpress.com/2012/09/24/lightweight-architecture-sketch-in-a-single-diagram/">Lightweight documentation</a></li>
</ul>
<br />Filed under: <a href='http://mikemacd.wordpress.com/category/software-development-methods-and-tools/'>software development, methods and tools</a> Tagged: <a href='http://mikemacd.wordpress.com/tag/agile/'>agile</a>, <a href='http://mikemacd.wordpress.com/tag/architecture/'>architecture</a>, <a href='http://mikemacd.wordpress.com/tag/architecture-practices/'>architecture practices</a>, <a href='http://mikemacd.wordpress.com/tag/cognitive-science/'>cognitive science</a>, <a href='http://mikemacd.wordpress.com/tag/component-based-development/'>component based development</a>, <a href='http://mikemacd.wordpress.com/tag/components/'>components</a>, <a href='http://mikemacd.wordpress.com/tag/design/'>design</a>, <a href='http://mikemacd.wordpress.com/tag/extreme-programming/'>extreme programming</a>, <a href='http://mikemacd.wordpress.com/tag/good-architecture/'>good architecture</a>, <a href='http://mikemacd.wordpress.com/tag/intentional/'>intentional</a>, <a href='http://mikemacd.wordpress.com/tag/mechanisms/'>mechanisms</a>, <a href='http://mikemacd.wordpress.com/tag/modular/'>modular</a>, <a href='http://mikemacd.wordpress.com/tag/post-agile/'>post-agile</a>, <a href='http://mikemacd.wordpress.com/tag/problem-solving/'>problem solving</a>, <a href='http://mikemacd.wordpress.com/tag/sketching/'>sketching</a>, <a href='http://mikemacd.wordpress.com/tag/software/'>software</a>, <a href='http://mikemacd.wordpress.com/tag/software-development/'>software-development</a>, <a href='http://mikemacd.wordpress.com/tag/technology/'>technology</a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1276&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikemacd.wordpress.com/2013/02/18/what-is-good-software-architecture-or-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/4d2f742e138474d59582386916e36d8e?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">mikemacd</media:title>
		</media:content>
	</item>
		<item>
		<title>Intentional vs. Emergent Architecture</title>
		<link>http://mikemacd.wordpress.com/2013/02/04/intentional-vs-emergent-architecture/</link>
		<comments>http://mikemacd.wordpress.com/2013/02/04/intentional-vs-emergent-architecture/#comments</comments>
		<pubDate>Mon, 04 Feb 2013 11:58:11 +0000</pubDate>
		<dc:creator>mikemacd</dc:creator>
				<category><![CDATA[software development, methods and tools]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[architectural analysis]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[governance]]></category>
		<category><![CDATA[lightweight]]></category>
		<category><![CDATA[mechanism]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software-development]]></category>

		<guid isPermaLink="false">http://mikemacd.wordpress.com/?p=1272</guid>
		<description><![CDATA[I&#8217;ve been thinking about architecture a lot recently but one thing that I often discuss but have never blogged about for some odd reason is intentional vs. emergent software architecture. Some old fashioned software methods such as waterfall led people into doing a lot of up front architecture work, they analysed and designed away for [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1272&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been thinking about <a title="What is enough agile architecure?" href="http://mikemacd.wordpress.com/2012/09/26/what-is-enough-agile-architecure/">architecture</a> <a title="Scaled Agility: Architectural profiling" href="http://mikemacd.wordpress.com/2012/09/25/scaled-agility-architectural-profiling/">a</a> <a title="Lightweight architecture sketch in a single diagram" href="http://mikemacd.wordpress.com/2012/09/24/lightweight-architecture-sketch-in-a-single-diagram/">lot</a> <a title="Lightweight architectural mechanisms – specification by example" href="http://mikemacd.wordpress.com/2012/09/25/lightweight-architectural-mechanisms-specification-by-example/">recently</a> but one thing that I often discuss but have never blogged about for some odd reason is intentional vs. emergent software architecture. Some old fashioned software methods such as waterfall led people into doing a lot of up front architecture work, they analysed and designed away for ages producing huge reams of UML and documentation that no one could ever squeeze into their heads if they had the patience to read it. This is an example of an intentional architecture &#8211; the architecture was intended, planned and deliberate.</p>
<p>Lots of folks hated that way of doing things as it meant people were writing docs and drawing diagrams instead of making working software, not to mention an all to frequent tendency to over-engineer architecture past the point of usefulness. This led to some people saying that we&#8217;re better off not trying to do any architecture and just letting it emerge from the work we do developing small little customer focused requirements (like user stories or similar).  Ok, so there&#8217;d be some rework along the way as we encounter a deeper understanding of the system and refactor our emergent architecture but it&#8217;d still be better than the old way of doing large upfront architecture.</p>
<p>So, there seem to be two opposed viewpoints: intentional architecture is best, emergent architecture is best.</p>
<p>For me, neither is true. I&#8217;ve seen some really terrible examples of badly over-engineered architectures that crippled a project and projects that never got past their over-reaching architectural analysis. Equally I&#8217;ve seen products with emergent architecture that had to be entirely re-architected as time went pay because their emergent architecture was so wrong it was comical (imagine a software management tool that only supports a single project, and that concept being deeply embedded in the architecture).</p>
<p>There&#8217;s a scale with intentional architecture on one side and emergent architecture on the other.</p>
<p><a href="http://mikemacd.files.wordpress.com/2013/02/int_vs_em_arch.png"><img class="aligncenter size-full wp-image-1274" alt="Intentional vs. Emergent Architecture" src="http://mikemacd.files.wordpress.com/2013/02/int_vs_em_arch.png?w=630&#038;h=233" width="630" height="233" /></a>Various factors might push us one way or another&#8230; The second I listed on the right is interesting as if you&#8217;ve got a well known technology and problem domain you can get away with emergent architecture, but similarly if you have a totally unknown technology and problem domain it can be very effective to evolve towards a solution and architecture rather than crystal ball gaze by creating a (probably wrong) intentional architecture.</p>
<p>Which rather sums up the point I&#8217;m trying to make. The purpose of architecture is to shape the solution and address technical risks. Solving the big problems, creating common ways of doing something (<a title="Lightweight architectural mechanisms – specification by example" href="http://mikemacd.wordpress.com/2012/09/25/lightweight-architectural-mechanisms-specification-by-example/">lightweight architectural mechanisms</a>) are all good architectural goals but only if we&#8217;re sure of the solution. If we&#8217;re not we&#8217;re better off evolving an emergent architecture, at least initially.</p>
<p>I think that the extremes at either end of the scale, as with most extremes, are a bad idea at best and impossible at worst. If you gather a group of people together and tell them to create a web app given a backlog but they&#8217;re not allowed to think or communicate about the architecture up front then you&#8217;ll find they all start dividing the problem in different ways and writing in different languages for different server and client frameworks. Hardly a good idea. Of course on the other end of the scale, believing that we can foresee all of the technical issues, all of the technology and requirements changes that might happen is as likely as a 12 month project plan Gantt chart being correct after a few levels of cumulative error margin have been combined.</p>
<p>For more on architecture see:</p>
<ul>
<li><a title="Scaled Agility: Architectural profiling" href="http://mikemacd.wordpress.com/2012/09/25/scaled-agility-architectural-profiling/">Architectural profiling</a></li>
<li><a title="Lightweight architecture sketch in a single diagram" href="http://mikemacd.wordpress.com/2012/09/24/lightweight-architecture-sketch-in-a-single-diagram/">Architecture sketching</a></li>
<li><a title="Lightweight architectural mechanisms – specification by example" href="http://mikemacd.wordpress.com/2012/09/25/lightweight-architectural-mechanisms-specification-by-example/">Lightweight Mechanisms</a></li>
<li><a title="What is enough agile architecure?" href="http://mikemacd.wordpress.com/2012/09/26/what-is-enough-agile-architecure/">What is enough agile architecture?</a></li>
</ul>
<br />Filed under: <a href='http://mikemacd.wordpress.com/category/software-development-methods-and-tools/'>software development, methods and tools</a> Tagged: <a href='http://mikemacd.wordpress.com/tag/agile/'>agile</a>, <a href='http://mikemacd.wordpress.com/tag/analysis/'>analysis</a>, <a href='http://mikemacd.wordpress.com/tag/architectural-analysis/'>architectural analysis</a>, <a href='http://mikemacd.wordpress.com/tag/architecture/'>architecture</a>, <a href='http://mikemacd.wordpress.com/tag/design/'>design</a>, <a href='http://mikemacd.wordpress.com/tag/governance/'>governance</a>, <a href='http://mikemacd.wordpress.com/tag/lightweight/'>lightweight</a>, <a href='http://mikemacd.wordpress.com/tag/mechanism/'>mechanism</a>, <a href='http://mikemacd.wordpress.com/tag/process/'>process</a>, <a href='http://mikemacd.wordpress.com/tag/scrum/'>scrum</a>, <a href='http://mikemacd.wordpress.com/tag/sketch/'>sketch</a>, <a href='http://mikemacd.wordpress.com/tag/software/'>software</a>, <a href='http://mikemacd.wordpress.com/tag/software-development/'>software-development</a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1272&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikemacd.wordpress.com/2013/02/04/intentional-vs-emergent-architecture/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/4d2f742e138474d59582386916e36d8e?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">mikemacd</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2013/02/int_vs_em_arch.png" medium="image">
			<media:title type="html">Intentional vs. Emergent Architecture</media:title>
		</media:content>
	</item>
		<item>
		<title>Understand the software value chain by walking it</title>
		<link>http://mikemacd.wordpress.com/2012/12/18/understand-the-software-value-chain-by-walking-it/</link>
		<comments>http://mikemacd.wordpress.com/2012/12/18/understand-the-software-value-chain-by-walking-it/#comments</comments>
		<pubDate>Tue, 18 Dec 2012 12:00:16 +0000</pubDate>
		<dc:creator>mikemacd</dc:creator>
				<category><![CDATA[software development, methods and tools]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile at scale]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[mindfulness]]></category>
		<category><![CDATA[post-agile]]></category>
		<category><![CDATA[value chain]]></category>

		<guid isPermaLink="false">http://mikemacd.wordpress.com/?p=1269</guid>
		<description><![CDATA[There&#8217;s no better way to understand something than by actually giving it a go. If you want to know what writing a particular programming language is like you need to try it. If you want to know what kung fu is like watching a video won&#8217;t help, you need to try it. If you want [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1269&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>There&#8217;s no better way to understand something than by actually giving it a go. If you want to know what writing a particular programming language is like you need to try it. If you want to know what kung fu is like watching a video won&#8217;t help, you need to try it.</p>
<p>If you want to really understand the software value chain in your organisation drawing diagrams in an ivory tower isn&#8217;t going to help, you need to get out there and &#8220;Go and see&#8221;.</p>
<p>In <a href="http://soft-tactics.com/2012/12/scaling-software-agility/">Steve Handy&#8217;s blog on Scaling Software Agility</a> he talks about applying some of the thinking from the Lean school of thought to &#8220;go and see&#8221;, observing the value chain by actually physically following it.</p>
<blockquote>
<ul>
<li>Identify a new piece of work and follow it through the delivery chain</li>
<li>Attend every meeting, track the activities and note how long it’s static.</li>
<li>Don’t attempt to fix it during this period of observation, don’t criticise, just watch and learn.</li>
</ul>
</blockquote>
<p>I think there&#8217;s some real value here, there&#8217;s something quite simple and powerful about physically walking the walk of a piece of work through the software value chain. Doing so will make some problems, blockages and issues blindingly obvious &#8211; processes and organisational structures that seemed to make sense on someone&#8217;s bit of paper will just not make sense.</p>
<p>Experiencing the value chain in a very physical way promotes <a title="Professional mindfulness, emotional intelligence, conflict resolution and the ways of the Jedi" href="http://mikemacd.wordpress.com/2012/03/05/professional-mindfulness-emotional-intelligence-conflict-resolution-and-the-ways-of-the-jedi/">professional mindfulness</a> and will clearly identify waste. I think this is a great way of putting common sense back in to software development.</p>
<p>&nbsp;</p>
<br />Filed under: <a href='http://mikemacd.wordpress.com/category/software-development-methods-and-tools/'>software development, methods and tools</a> Tagged: <a href='http://mikemacd.wordpress.com/tag/agile/'>agile</a>, <a href='http://mikemacd.wordpress.com/tag/agile-at-scale/'>agile at scale</a>, <a href='http://mikemacd.wordpress.com/tag/kanban/'>kanban</a>, <a href='http://mikemacd.wordpress.com/tag/lean/'>lean</a>, <a href='http://mikemacd.wordpress.com/tag/mindfulness/'>mindfulness</a>, <a href='http://mikemacd.wordpress.com/tag/post-agile/'>post-agile</a>, <a href='http://mikemacd.wordpress.com/tag/value-chain/'>value chain</a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1269&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikemacd.wordpress.com/2012/12/18/understand-the-software-value-chain-by-walking-it/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/4d2f742e138474d59582386916e36d8e?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">mikemacd</media:title>
		</media:content>
	</item>
		<item>
		<title>A cross-project Release Burnup?</title>
		<link>http://mikemacd.wordpress.com/2012/12/11/a-cross-project-release-burnup/</link>
		<comments>http://mikemacd.wordpress.com/2012/12/11/a-cross-project-release-burnup/#comments</comments>
		<pubDate>Tue, 11 Dec 2012 22:29:07 +0000</pubDate>
		<dc:creator>mikemacd</dc:creator>
				<category><![CDATA[software development, methods and tools]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile at scale]]></category>
		<category><![CDATA[burnup]]></category>
		<category><![CDATA[estimation]]></category>
		<category><![CDATA[measurement]]></category>
		<category><![CDATA[points]]></category>
		<category><![CDATA[portfolio management]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://mikemacd.wordpress.com/?p=1257</guid>
		<description><![CDATA[Huh? Points are abstract and relative, comparing them across projects is like comparing apples and elephants. Releases only make sense in themselves, let alone across project time lines so why would I want to look at a cross-project burnup? Such a thing is foolishness surely&#8230; Well maybe not, it might be useful as an agile [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1257&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft" style="margin-left:10px;margin-right:10px;border:0 none;" alt="" src="http://homepage2.nifty.com/t-fourleaf/IMG_070911.jpg" width="124" height="185" /></p>
<p>Huh?</p>
<p>Points are abstract and relative, comparing them across projects is like comparing apples and elephants.</p>
<p>Releases only make sense in themselves, let alone across project time lines so why would I want to look at a cross-project burnup? Such a thing is foolishness surely&#8230;</p>
<p>Well maybe not, it might be useful as an <a title="What does “Agile at Scale” mean?" href="http://mikemacd.wordpress.com/2012/05/02/what-does-agile-at-scale-mean/">agile at scale </a><a title="Simple software project measures" href="http://mikemacd.wordpress.com/2012/05/14/simple-software-project-measures/">measure</a>, as a way of looking at the work churn in a department or other high level unit in an organisation. I&#8217;ve been pondering if there&#8217;s a way of aggregating burnup information and point burnage across teams (with distinct disjoint timelines) and thought that there might be a way.</p>
<p>Ideally I want to be able to show the amount of work planned within an organisational group and progress towards that scope, showing when scope goes up and down (does that ever happen?). Then I want to show progress towards that scope overall, the angle of the progress line could give me an organisational velocity &#8211; perhaps I could even add an ideal velocity that would indicate what perfect robots would to if real life never intervened (although that could be dangerous).</p>
<p style="text-align:center;"><a href="http://mikemacd.wordpress.com/2012/12/11/a-cross-project-release-burnup/diagram_121211_2220/" rel="attachment wp-att-1259"><img class="aligncenter wp-image-1259" alt="Aggregate burnup" src="http://mikemacd.files.wordpress.com/2012/12/diagram_121211_2220.png?w=500&#038;h=343" width="500" height="343" /></a></p>
<p>First I need a way of normalising points and understanding what 100% of scope means when it can be incorporating many projects at different points in their lifecycles. Perhaps a way of doing it is considering everything in terms of percentage, after all that&#8217;s an easy thing for people to consume. To define 100% of a scope of various contributing projects is tricky since it&#8217;ll change and be dependant on their releases, continuous flows, changing scope.</p>
<p>A simplistic approach to this is to use a moving baseline, perhaps we can determine 100% of a projects scope as whatever it thinks it would deliver within the time area being considered (the scope of the x-axis) at 15% of it&#8217;s timeline (or whatever).</p>
<p>In the example above this tells me that work is consistently overplanned not just in terms of actual velocity, but in terms of idealised capacity aswell &#8211; the demand is higher than the supply. I think this could be useful for &#8220;<a title="I’m coming out as not-Agile and not post-Agile" href="http://mikemacd.wordpress.com/2012/09/03/im-coming-out-as-not-agile-and-not-post-agile/">agiley</a>&#8221; portfolio management.</p>
<p>Perhaps I could start establishing a budget cycle velocity, and start limiting work planned based on empirical evidence. Ok, so no project is the same and points aren&#8217;t comparable but the <a href="https://en.wikipedia.org/wiki/Law_of_large_numbers">Law of Large Numbers</a> is on my side.</p>
<p>What do you think? Is this bonkers?</p>
<br />Filed under: <a href='http://mikemacd.wordpress.com/category/software-development-methods-and-tools/'>software development, methods and tools</a> Tagged: <a href='http://mikemacd.wordpress.com/tag/agile/'>agile</a>, <a href='http://mikemacd.wordpress.com/tag/agile-at-scale/'>agile at scale</a>, <a href='http://mikemacd.wordpress.com/tag/burnup/'>burnup</a>, <a href='http://mikemacd.wordpress.com/tag/estimation/'>estimation</a>, <a href='http://mikemacd.wordpress.com/tag/measurement/'>measurement</a>, <a href='http://mikemacd.wordpress.com/tag/points/'>points</a>, <a href='http://mikemacd.wordpress.com/tag/portfolio-management/'>portfolio management</a>, <a href='http://mikemacd.wordpress.com/tag/scrum/'>scrum</a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1257&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikemacd.wordpress.com/2012/12/11/a-cross-project-release-burnup/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/4d2f742e138474d59582386916e36d8e?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">mikemacd</media:title>
		</media:content>

		<media:content url="http://homepage2.nifty.com/t-fourleaf/IMG_070911.jpg" medium="image" />

		<media:content url="http://mikemacd.files.wordpress.com/2012/12/diagram_121211_2220.png" medium="image">
			<media:title type="html">Aggregate burnup</media:title>
		</media:content>
	</item>
		<item>
		<title>Linux GUI Development: Lazarus 1.0 Review update</title>
		<link>http://mikemacd.wordpress.com/2012/10/04/linux-gui-development-lazarus-1-0-review-update/</link>
		<comments>http://mikemacd.wordpress.com/2012/10/04/linux-gui-development-lazarus-1-0-review-update/#comments</comments>
		<pubDate>Thu, 04 Oct 2012 12:34:23 +0000</pubDate>
		<dc:creator>mikemacd</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[software development, methods and tools]]></category>
		<category><![CDATA[cross-platform]]></category>
		<category><![CDATA[delphi]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[lazarus]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[pascal]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software-development]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://mikemacd.wordpress.com/?p=1198</guid>
		<description><![CDATA[A while ago I wrote a review of Lazarus 0.9.30 and it came out with the 63% mainly because the installation process was so horrible. Well now it&#8217;s almost a year later and v1.0 has been released so it&#8217;s only fair I update my comments&#8230; Installation It&#8217;s still not exactly shiny but, and it&#8217;s a [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1198&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>A while ago I wrote a<a title="Linux GUI Development: Lazarus 0.9.30 review and screenshots" href="http://mikemacd.wordpress.com/2011/11/14/linux-gui-development-lazarus-0-9-30-review-and-screenshots/"> review of Lazarus 0.9.30</a> and it came out with the 63% mainly because the installation process was so horrible. Well now it&#8217;s almost a year later and v1.0 has been released so it&#8217;s only fair I update my comments&#8230;</p>
<p><strong>Installation</strong></p>
<p>It&#8217;s still not exactly shiny but, and it&#8217;s a huge but, it is simple and it works! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  To install on Linux I had to download <a href="http://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20i386%20DEB/Lazarus%201.0/">3 .deb</a> files (1 for Lazarus, 1 for the compiler, 1 for the source) and then I could install them by simply doing:</p>
<pre class="brush: bash; title: ; notranslate">doing sudo dpkg -i *.deb</pre>
<p>It&#8217;s worth tidying up any old Lazarus installs first which you can do by running<a title="Install single window Lazarus 0.9.30 in Ubuntu 11.10 step by step" href="http://mikemacd.wordpress.com/2011/10/31/install-single-window-lazarus-0-9-30-in-ubuntu-11-10-step-by-step/"> my script here</a>.</p>
<p>Downloading *.deb files and installing them is pretty normal for linux users so although it&#8217;s not a shiny wizard installer or single command it is simple and most importantly it just works! I&#8217;m going to upgrade this from 1/19 to 8/10</p>
<p><strong>First Impressions</strong></p>
<p>A lot of the little niggles have gone away and it&#8217;s a much more stable, solid feeling environment. It does still load up with a million windows (Delphi style) and feel a little old fashioned (a lack of wizzy GUI controls and UI customisation, single window mode etc.) but being open source and written in itself I can change these things if I want to reasonably easily. In fact loading up the AnchorDockingDesign package makes the IDE a docked single window affair and there&#8217;s plenty of 3rd part controls to download and play with.</p>
<table border="0">
<tbody>
<tr>
<td>
<div>
<dl>
<dt><a href="http://mikemacd.files.wordpress.com/2011/10/lazarus_multi_window.png"><img title="Lazarus Multi-Window " alt="" src="http://mikemacd.files.wordpress.com/2011/10/lazarus_multi_window.png?w=150&#038;h=114" width="150" height="114" /></a></dt>
<dt>Normal multi-window interface for Lazarus</dt>
</dl>
</div>
</td>
<td>
<div>
<dl>
<dt><a href="http://mikemacd.files.wordpress.com/2011/10/lazarus_single_window.png"><img title="Lazarus Single Window" alt="" src="http://mikemacd.files.wordpress.com/2011/10/lazarus_single_window.png?w=150&#038;h=113" width="150" height="113" /></a></dt>
<dt>Lazarus as a single window IDE</dt>
</dl>
</div>
</td>
</tr>
</tbody>
</table>
<p>There&#8217;s still no multi-project support and recompiling the IDE to get a new component on the toolbar feels a bit weird even if it does work perfectly well. I&#8217;m going to stick with 6/10 for those reasons.</p>
<p>The GUI designer and Code Editor haven&#8217;t really changed since my last review and so they stay happily at 9/10.</p>
<p><strong>Language features</strong></p>
<p>The handling of generics has improved since I last looked at Lazarus and all seems to work pretty well now <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Otherwise nothing much has changed, no  multicast events or garbage collection but those things don&#8217;t really slow me down much. That&#8217;s why I gave it 6/10.</p>
<p>Despite the lack of some of these things the language has always been and still is quite elegant (other than the nasty globabls), it&#8217;s got an excellent simple OO implementation and it&#8217;s really easy to quickly put an app together &#8211; oh yeah and it&#8217;s cross platform.</p>
<p><strong>Cross-platform and backwards compatible</strong></p>
<p>Lazarus works on windows, linux and mac. You can write a bit of code and natively compile it on each platform making for lightening fast code with no external dependencies. Write once, compile anywhere. You can already (partially) compile for android and other platforms are possible &#8211; anywhere the fpc compliler can be ported your code could work. That&#8217;s pretty impressive and it just works brilliantly.</p>
<p>Similarly all that ancient Delphi code can be loaded up edited and compiled and largely just works. Brilliant again. For that reason I&#8217;m going to bump up the language features to 8/10. (9 when android is working well).</p>
<p>I&#8217;ve not tried the feedback process again since v1 so I&#8217;m going to leave it at 7/10.</p>
<p><strong>Conclusion</strong></p>
<p>Despite it&#8217;s old fashioned feel in some places it&#8217;s simplicity is elegant and actually quite powerful. If you know the Object Pascal/Delphi language then it&#8217;s so fast to create good looking cross platform apps that it&#8217;ll knock your socks off.</p>
<p>When I pick up a new language I tend to do a challenge to load an xml file into a multi-column listview and create a details form to edit the selected row. In Java, something so apparently simple is a massive pain due to the imposition of the MVC pattern on everything. In C# it&#8217;s pretty easy, I can go MVC or not. In mono it&#8217;s reasonably easy too, although not the same easy and not as easy to get away from MVC.</p>
<p>In Lazarus it&#8217;s really easy, and it works fast and well on 3 major platforms. That&#8217;s a killer feature.</p>
<table>
<tbody>
<tr>
<td><strong>Category</strong></td>
<td><strong>Score</strong></td>
</tr>
<tr>
<td>Installation</td>
<td>8/10</td>
</tr>
<tr>
<td>First Impressions</td>
<td>6/10</td>
</tr>
<tr>
<td>GUI Designer</td>
<td>9/10</td>
</tr>
<tr>
<td>Code Editor</td>
<td>9/10</td>
</tr>
<tr>
<td>Language Features</td>
<td>8/10</td>
</tr>
<tr>
<td>Feedback process</td>
<td>7/10</td>
</tr>
<tr>
<td>Cross-Platform</td>
<td>10/10</td>
</tr>
<tr>
<td><strong>Overall</strong></td>
<td><strong>81% &#8211; Easy to use and powerful<br />
</strong></td>
</tr>
</tbody>
</table>
<p>In my previous review I said I couldn&#8217;t really recommend it, and that made me sad. Now I can recommend it, in fact it&#8217;s quickly becoming my technology of choice for linux gui development, because it&#8217;s quick to put things together and they look good. Just maybe Lazarus is living up to it&#8217;s vision and bringing Delphi back to life, but bigger and better than it was before!</p>
<br />Filed under: <a href='http://mikemacd.wordpress.com/category/linux/'>linux</a>, <a href='http://mikemacd.wordpress.com/category/software-development-methods-and-tools/'>software development, methods and tools</a> Tagged: <a href='http://mikemacd.wordpress.com/tag/cross-platform/'>cross-platform</a>, <a href='http://mikemacd.wordpress.com/tag/delphi/'>delphi</a>, <a href='http://mikemacd.wordpress.com/tag/development/'>development</a>, <a href='http://mikemacd.wordpress.com/tag/lazarus/'>lazarus</a>, <a href='http://mikemacd.wordpress.com/tag/linux/'>linux</a>, <a href='http://mikemacd.wordpress.com/tag/mac/'>mac</a>, <a href='http://mikemacd.wordpress.com/tag/pascal/'>pascal</a>, <a href='http://mikemacd.wordpress.com/tag/programming/'>programming</a>, <a href='http://mikemacd.wordpress.com/tag/review/'>review</a>, <a href='http://mikemacd.wordpress.com/tag/software/'>software</a>, <a href='http://mikemacd.wordpress.com/tag/software-development/'>software-development</a>, <a href='http://mikemacd.wordpress.com/tag/windows/'>windows</a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1198&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikemacd.wordpress.com/2012/10/04/linux-gui-development-lazarus-1-0-review-update/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/4d2f742e138474d59582386916e36d8e?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">mikemacd</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2011/10/lazarus_multi_window.png?w=150" medium="image">
			<media:title type="html">Lazarus Multi-Window </media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2011/10/lazarus_single_window.png?w=150" medium="image">
			<media:title type="html">Lazarus Single Window</media:title>
		</media:content>
	</item>
		<item>
		<title>What is enough agile architecure?</title>
		<link>http://mikemacd.wordpress.com/2012/09/26/what-is-enough-agile-architecure/</link>
		<comments>http://mikemacd.wordpress.com/2012/09/26/what-is-enough-agile-architecure/#comments</comments>
		<pubDate>Wed, 26 Sep 2012 21:13:13 +0000</pubDate>
		<dc:creator>mikemacd</dc:creator>
				<category><![CDATA[software development, methods and tools]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[lightweight]]></category>
		<category><![CDATA[mechanism]]></category>
		<category><![CDATA[minimal]]></category>
		<category><![CDATA[quality risk]]></category>
		<category><![CDATA[risk]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[software-development]]></category>
		<category><![CDATA[structure]]></category>
		<category><![CDATA[uml]]></category>

		<guid isPermaLink="false">http://mikemacd.wordpress.com/?p=1178</guid>
		<description><![CDATA[I wasn&#8217;t planning on writing a &#8220;how long is a piece of string?&#8221; post but it&#8217;s a question I often get, and something that I&#8217;ve played with a bit. The point of architecture is to address the aesthetics of a system, to consider its reusable bits or common forms, the overall shape and nature, the [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1178&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I wasn&#8217;t planning on writing a &#8220;how long is a piece of string?&#8221; post but it&#8217;s a question I often get, and something that I&#8217;ve played with a bit. The point of architecture is to address the <a href="https://en.wikipedia.org/wiki/Aesthetics">aesthetics</a> of a system, to consider its reusable bits or common forms, the overall shape and nature, the technology it&#8217;ll use, the distribution pattern and how it will meet its functional and non-functional requirements.</p>
<p>Of course in an agile, or indeed <a title="I’m coming out as not-Agile and not post-Agile" href="http://mikemacd.wordpress.com/2012/09/03/im-coming-out-as-not-agile-and-not-post-agile/">post-agile</a> world, we don&#8217;t want to spend forever document and designing stuff in analysis paralysis. I&#8217;ve worked in projects where I had to draw <em>every</em> class in detail in a formal <a href="https://en.wikipedia.org/wiki/Unified_Modeling_Language">UML</a> tool before I could go and code it. I&#8217;m pretty sure this halved my development speed without adding any real value. But I&#8217;ve also worked on projects where we&#8217;ve drawn some UML on a whiteboard while discussing what we were going to do and how we were going to do it &#8211; and that was really valuable.</p>
<p>This makes an architect&#8217;s job difficult. Of course, it&#8217;s always been hard:</p>
<blockquote><p>The ideal architect should be a man of letters, a mathematician, familiar with historical studies, a diligent of philosophy, acquainted with music, not ignorant of medicine, learned in the responses of <a href="http://www.thefreedictionary.com/jurisconsults">jurisconsults</a>,  familiar with astronomy and astronomical calculations.</p>
<p><a href="https://en.wikipedia.org/wiki/Vitruvius">Vitruvius</a> ~ 25 BCE</p></blockquote>
<p>But as well as being a bit of a <a href="https://en.wikipedia.org/wiki/Polymath">Renaissance man</a> an architect also needs to know when enough is enough. I&#8217;ve found that I&#8217;ve done enough architecture with the team (not to the team) when we collectively feel like we understand the proposed solution, how it&#8217;s going to hang together, how it will address the risky bits and meet it&#8217;s requirements.<br />
To do that, we tend to draw a few diagrams and write some words.</p>
<p>First, an <a title="Scaled Agility: Architectural profiling" href="http://mikemacd.wordpress.com/2012/09/25/scaled-agility-architectural-profiling/">architectural profile</a> that gives us an idea of where the complexity is and therefore where the technical and quality risks are.</p>
<p>Second an <a title="Lightweight architecture sketch in a single diagram" href="http://mikemacd.wordpress.com/2012/09/24/lightweight-architecture-sketch-in-a-single-diagram/">overview sketch</a> that shows the overall structure, maybe technology, target deployment platforms and major bits.</p>
<p>Third a set of<a title="Lightweight architectural mechanisms – specification by example" href="http://mikemacd.wordpress.com/2012/09/25/lightweight-architectural-mechanisms-specification-by-example/"> lightweight mechanisms</a> that cover the common ways of doing things or address particularly knotty problems and address some of those risks. These tend to describe the architecture (or mechanism flows) by example rather than aiming for total coverage.</p>
<p><a href="http://mikemacd.files.wordpress.com/2012/09/arch_enough.png"><img class="alignnone size-full wp-image-1179" title="Enough Architecture" src="http://mikemacd.files.wordpress.com/2012/09/arch_enough.png?w=630" alt=""   /></a></p>
<p>I might add some other stuff to this if the project calls for it, like maybe a data model, a GUI mockup but generally that&#8217;s it <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />Filed under: <a href='http://mikemacd.wordpress.com/category/software-development-methods-and-tools/'>software development, methods and tools</a> Tagged: <a href='http://mikemacd.wordpress.com/tag/agile/'>agile</a>, <a href='http://mikemacd.wordpress.com/tag/architecture/'>architecture</a>, <a href='http://mikemacd.wordpress.com/tag/design/'>design</a>, <a href='http://mikemacd.wordpress.com/tag/lightweight/'>lightweight</a>, <a href='http://mikemacd.wordpress.com/tag/mechanism/'>mechanism</a>, <a href='http://mikemacd.wordpress.com/tag/minimal/'>minimal</a>, <a href='http://mikemacd.wordpress.com/tag/quality-risk/'>quality risk</a>, <a href='http://mikemacd.wordpress.com/tag/risk/'>risk</a>, <a href='http://mikemacd.wordpress.com/tag/scrum/'>scrum</a>, <a href='http://mikemacd.wordpress.com/tag/sketch/'>sketch</a>, <a href='http://mikemacd.wordpress.com/tag/software-development/'>software-development</a>, <a href='http://mikemacd.wordpress.com/tag/structure/'>structure</a>, <a href='http://mikemacd.wordpress.com/tag/uml/'>uml</a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1178&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikemacd.wordpress.com/2012/09/26/what-is-enough-agile-architecure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/4d2f742e138474d59582386916e36d8e?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">mikemacd</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2012/09/arch_enough.png" medium="image">
			<media:title type="html">Enough Architecture</media:title>
		</media:content>
	</item>
		<item>
		<title>Scaled Agility: Architectural profiling</title>
		<link>http://mikemacd.wordpress.com/2012/09/25/scaled-agility-architectural-profiling/</link>
		<comments>http://mikemacd.wordpress.com/2012/09/25/scaled-agility-architectural-profiling/#comments</comments>
		<pubDate>Tue, 25 Sep 2012 21:02:20 +0000</pubDate>
		<dc:creator>mikemacd</dc:creator>
				<category><![CDATA[software development, methods and tools]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[lightweight]]></category>
		<category><![CDATA[mechanism]]></category>
		<category><![CDATA[minimal]]></category>
		<category><![CDATA[quality risk]]></category>
		<category><![CDATA[risk]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[software-development]]></category>
		<category><![CDATA[structure]]></category>
		<category><![CDATA[uml]]></category>

		<guid isPermaLink="false">http://mikemacd.wordpress.com/?p=1161</guid>
		<description><![CDATA[Name: Architectural Profiling (short cut architectural analysis and lightweight capture) &#8211; Agile at Scale practice When it might be appropriate In situations where a lightweight approach to intentional architecture is required In situations where high design formality isn&#8217;t required When a simple approach to architecture analysis is required at a team of teams level before [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1161&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><strong>Name:</strong> Architectural Profiling (short cut architectural analysis and lightweight capture) &#8211; <a title="What does “Agile at Scale” mean?" href="http://mikemacd.wordpress.com/2012/05/02/what-does-agile-at-scale-mean/">Agile at Scale practice</a></p>
<h3>When it might be appropriate</h3>
<ul>
<li>In situations where a lightweight approach to intentional architecture is required</li>
<li>In situations where high design formality isn&#8217;t required</li>
<li>When a simple approach to architecture analysis is required at a team of teams level before more analysis in contributing teams</li>
<li>Where a team wants to cut wasteful requirements and architectural &#8220;analysis paralysis&#8221; without throwing out ignoring technical risks</li>
<li>System of systems development</li>
</ul>
<h3>What is it?</h3>
<p>When I look at a potential (or existing) system I think of it in terms of it&#8217;s complexity in terms of a few dimensions, they&#8217;re not set in stone and I might add or remove dimensions as the mood, and context, takes me.  Doing this early on gives me a feel for the shape of a project&#8217;s requirements, architecture and solution. In fact it also means I can short cut writing a whole bunch of requirements, acceptance tests, designs and even code and tests.</p>
<p>Here&#8217;s an example of thinking about a simple-ish app that does some fairly hefty data processing, needs to do it reasonably quickly but not excessively and has got to do some pretty visualisation stuff. Other than that it&#8217;s reasonably straight forward.</p>
<p><a href="http://mikemacd.files.wordpress.com/2012/09/arch_profile_nofunc.png"><img class="alignleft  wp-image-1162" title="Simple Architectural Profile" src="http://mikemacd.files.wordpress.com/2012/09/arch_profile_nofunc.png?w=300&#038;h=246" alt="" width="300" height="246" /></a></p>
<p>You might notice that the x-axis is pretty much <a href="https://en.wikipedia.org/wiki/FURPS">FURPS</a> with a couple of extras bolted on (I&#8217;ll come back to the carefully avoided first dimension in a minute).</p>
<p>The y-axis ranges from no complexity to lots of complexity but is deliberately not labelled (normally one of my pet hates) so we can focus on the relative complexity of these dimensions of the requirements, quality,  architecture and therefore solution.</p>
<p>The height of one of these bars helps me shape the architectural approach I&#8217;ll take to the project, and which bits and bobs I can reuse from my super bag of reuse.</p>
<p><span id="more-1161"></span></p>
<p>For example, let&#8217;s take the security dimension. If it&#8217;s empty I know I don&#8217;t need users, audit logs etc. but if it&#8217;s medium, like it is in this example, I know that I&#8217;m probably going to need <a title="Use Case vs. User Story" href="http://mikemacd.wordpress.com/2012/03/05/use-case-vs-user-story/">Use Cases and/or User Stories</a> around things like:</p>
<ul>
<li>logging in</li>
<li>changing password</li>
<li>managing users</li>
<li>managing permissions</li>
<li>checking permissions</li>
</ul>
<p>These are things I&#8217;ve done loads of times before so why bother writing lots of requirements for them? Why bother doing detailed design? Why bother writing the code and testing, instead let&#8217;s reuse some requirements, components and tests and let the reuse do it for us. We&#8217;ll still to end to end testing across our set of requirements, I&#8217;m not advocating ignoring all of the quality risks simply avoiding them in low complexity situations.</p>
<p>If the bar is higher up I might need things like <a href="https://en.wikipedia.org/wiki/LDAP">LDAP</a> integration, <a href="https://en.wikipedia.org/wiki/Oauth">OAuth</a> integration, encryption, auditing, digital signing, federated user data stores, legal compliance and other security related shenanigans.</p>
<p>The other dimensions I tend to look at other than the standard URPS are &#8220;Data Processing&#8221; by which I mean the number of entities I&#8217;ve got to deal with and the complexity of their relationships, finally this dimension is pushed up if I&#8217;ve got to do algorithmic stuff across that data, and it&#8217;s maxed out if I&#8217;ve got <a href="https://en.wikipedia.org/wiki/Big_data">big data</a> and <a href="https://en.wikipedia.org/wiki/Massively_parallel_%28computing%29http://">massively parallelized processing</a>. However for the lower levels of complexity I&#8217;d never write a <a href="https://en.wikipedia.org/wiki/Create,_read,_update_and_delete">CRUD</a> use case or a bunch of storied that batch up to mean the same thing. Or write endless design diagrams covering the CRUD of each entity. A simple persistency mechanism (if anything other than obvious) and a good data model are all I need here.</p>
<p>Reporting and Visualisation means mucking around with complicated and often interactive displays of the aforementioned data.</p>
<p><a href="http://mikemacd.files.wordpress.com/2012/09/arch_profile_full.png"><img class="alignleft  wp-image-1164" title="Another Architectural Profile" src="http://mikemacd.files.wordpress.com/2012/09/arch_profile_full.png?w=300&#038;h=246" alt="" width="300" height="246" /></a>The dimension I&#8217;ve ignored so far is &#8220;Differentiating Functionality&#8221; as this is the set of functional requirements that make your project unique. If this is empty you should probably be just buying something or slotting together some off the shelf components. Of course there are types of projects which might be low in functionality but high on performance and scale&#8230; that might be it&#8217;s differentiator.</p>
<p>This dimension is the stuff that adds business value and is often the most important stuff that the (maybe unenlightened) customer  might prioritise above everything else. So if you backlog is only stuff related to this category then it&#8217;s probably not a very good reflection of reality. I make it a different colour to make all of these points and to help balance it&#8217;s content with the other important dimensions.</p>
<p>Technical risks, and likely quality risks, will be hiding in any dimension with high complexity, in testing terms high complexity areas are fertile ground when hunting for <a title="What is Fringe Testing?" href="http://mikemacd.wordpress.com/2012/09/20/what-is-fringe-testing/">fringe cases</a>.</p>
<p><a href="https://mikemacd.files.wordpress.com/2012/05/project_forum.png"><img class="alignleft" title="project_forum" src="https://mikemacd.files.wordpress.com/2012/05/project_forum.png?w=96&#038;h=89" alt="Project Forum" width="96" height="89" /></a>This is how I&#8217;ve been doing architecture for over 10 years but I&#8217;ve never written it down before! I&#8217;m writing it down now so that collectively &#8220;architectural profiling&#8221;,&#8221;<a title="Lightweight architecture sketch in a single diagram" href="http://mikemacd.wordpress.com/2012/09/24/lightweight-architecture-sketch-in-a-single-diagram/">architectural overview sketching&#8221;</a> and &#8220;<a title="Lightweight architectural mechanisms – specification by example" href="http://mikemacd.wordpress.com/2012/09/25/lightweight-architectural-mechanisms-specification-by-example/">lightweight mechanisms</a>&#8221; can join up with the Project Forum practice for &#8220;<a title="What is enough agile architecure?" href="http://mikemacd.wordpress.com/2012/09/26/what-is-enough-agile-architecure/">just-enough</a>&#8221; architectural approach to <a title="What does “Agile at Scale” mean?" href="http://mikemacd.wordpress.com/2012/05/02/what-does-agile-at-scale-mean/">agile at scale</a>.</p>
<br />Filed under: <a href='http://mikemacd.wordpress.com/category/software-development-methods-and-tools/'>software development, methods and tools</a> Tagged: <a href='http://mikemacd.wordpress.com/tag/agile/'>agile</a>, <a href='http://mikemacd.wordpress.com/tag/architecture/'>architecture</a>, <a href='http://mikemacd.wordpress.com/tag/design/'>design</a>, <a href='http://mikemacd.wordpress.com/tag/lightweight/'>lightweight</a>, <a href='http://mikemacd.wordpress.com/tag/mechanism/'>mechanism</a>, <a href='http://mikemacd.wordpress.com/tag/minimal/'>minimal</a>, <a href='http://mikemacd.wordpress.com/tag/quality-risk/'>quality risk</a>, <a href='http://mikemacd.wordpress.com/tag/risk/'>risk</a>, <a href='http://mikemacd.wordpress.com/tag/scrum/'>scrum</a>, <a href='http://mikemacd.wordpress.com/tag/sketch/'>sketch</a>, <a href='http://mikemacd.wordpress.com/tag/software-development/'>software-development</a>, <a href='http://mikemacd.wordpress.com/tag/structure/'>structure</a>, <a href='http://mikemacd.wordpress.com/tag/uml/'>uml</a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1161&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikemacd.wordpress.com/2012/09/25/scaled-agility-architectural-profiling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/4d2f742e138474d59582386916e36d8e?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">mikemacd</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2012/09/arch_profile_nofunc.png?w=300" medium="image">
			<media:title type="html">Simple Architectural Profile</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2012/09/arch_profile_full.png?w=300" medium="image">
			<media:title type="html">Another Architectural Profile</media:title>
		</media:content>

		<media:content url="https://mikemacd.files.wordpress.com/2012/05/project_forum.png" medium="image">
			<media:title type="html">project_forum</media:title>
		</media:content>
	</item>
		<item>
		<title>Lightweight architectural mechanisms &#8211; specification by example</title>
		<link>http://mikemacd.wordpress.com/2012/09/25/lightweight-architectural-mechanisms-specification-by-example/</link>
		<comments>http://mikemacd.wordpress.com/2012/09/25/lightweight-architectural-mechanisms-specification-by-example/#comments</comments>
		<pubDate>Tue, 25 Sep 2012 20:55:52 +0000</pubDate>
		<dc:creator>mikemacd</dc:creator>
				<category><![CDATA[software development, methods and tools]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[lightweight]]></category>
		<category><![CDATA[mechanism]]></category>
		<category><![CDATA[minimal]]></category>
		<category><![CDATA[quality risk]]></category>
		<category><![CDATA[risk]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[software-development]]></category>
		<category><![CDATA[structure]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[uml]]></category>

		<guid isPermaLink="false">http://mikemacd.wordpress.com/?p=1165</guid>
		<description><![CDATA[In my previous post I talked about using a sketch to describe architectural structure, but the other part of a useful architectural description is it&#8217;s dynamics, best expressed as architectural mechanisms. Mechanisms are little snippets of the architecture that address an important problem, provide a common way of doing something or are good examples of [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1165&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In my<a title="Lightweight architecture sketch in a single diagram" href="http://mikemacd.wordpress.com/2012/09/24/lightweight-architecture-sketch-in-a-single-diagram/"> previous post</a> I talked about using a sketch to describe architectural structure, but the other part of a useful architectural description is it&#8217;s dynamics, best expressed as architectural mechanisms.</p>
<p>Mechanisms are little snippets of the architecture that address an important problem, provide a common way of doing something or are good examples of how the architecture hangs together.</p>
<p><a href="http://mikemacd.wordpress.com/2012/09/24/lightweight-architecture-sketch-in-a-single-diagram/"><img class="alignleft" style="margin-left:10px;margin-right:10px;" title="Architecture Overview sketch" src="http://mikemacd.files.wordpress.com/2012/09/uml_arch_view_simple.png?w=182&#038;h=174" alt="" width="182" height="174" /></a>Mechanisms exist within the context of an architecture, which provides overall structure for the mechanisms. I tend to use a<a title="Lightweight architecture sketch in a single diagram" href="http://mikemacd.wordpress.com/2012/09/24/lightweight-architecture-sketch-in-a-single-diagram/"> simple architectural overview sketch</a> to do that and then further refine the architecture, if necessary, in terms of mechanisms according to the <a title="Scaled Agility: Architectural profiling" href="http://mikemacd.wordpress.com/2012/09/25/scaled-agility-architectural-profiling/">architectural profile</a> and (during development) the needs of my team.</p>
<p>Sometimes during a project the team will comment on the need to have a common way of doing something, or that they&#8217;ve uncovered something tricky that we need to consider as a more significant part of the system than our early analysis showed. In these cases it&#8217;s time to create a mechanism.</p>
<p>Mechanisms are great, but you don&#8217;t want to many of them, or to document and detail them too much, just enough to communicate the architecture and support maintenance efforts. Indeed writing too much actually makes it harder to communicate.</p>
<p>Mechanisms are best expressed in terms of their structure and behaviour, I tend to use a simple class diagram for the first and whatever seems appropriate for the second. This might be a UML sequence diagram, but I don&#8217;t really like those, instead I might use a good old fashioned activity diagram, or a flowchart with GUI mockups in the nodes. Either way I recommend limited the documentation and description, just because one flow is worth writing down to explain it the others might not be. In this way I do architectural specification by example. Once I&#8217;ve written enough about a mechanism that the rest can be inferred I stop.</p>
<p><a href="http://mikemacd.files.wordpress.com/2012/09/arch_mechanism.png"><img class="alignnone  wp-image-1166" title="Architectural Mechanism - side 1" src="http://mikemacd.files.wordpress.com/2012/09/arch_mechanism.png?w=448&#038;h=400" alt="" width="448" height="400" /></a></p>
<p>The words aren&#8217;t important in this example but you can see that I try to fit the description into a fairly small concise area &#8211; that helps me focus on just the really important stuff. In the top left there&#8217;s a list titled &#8220;Appropriate for stories <strong>like</strong>:&#8221; which is an indicative list of a few things to which the mechanism is appropriate.  Next to it is some blurb that says what it&#8217;s for and the main scenarios it covers, so in the case of persistency it&#8217;s the normal query, create, edit, save &amp; delete. There might be some notes around important constraints or whatever else is important.</p>
<p>I&#8217;ll then describe each important scenario in terms of it&#8217;s behaviour in whatever language or visual form makes sense. Sometimes  this is a photo of a whiteboard <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Sometimes it&#8217;s text, sometimes it&#8217;s a combination of those things.</p>
<h4>The flip side</h4>
<p>Just like stories having a flip side which contains their acceptance tests I also like to put acceptance tests on the flip side of my mechanisms. Although many are easy to frame in terms of customer acceptance tests (e.g. Search Mechanism will have performance, consistency and accuracy acceptance criteria) some are a little harder to frame. Technical mechanism formed to provide a common way of doing something in an architecture or to express the shape and aesthetics of an architecture may feel like they only make sense in terms of the development team&#8217;s acceptance criteria, however I always make sure they relate back to a story if this is the case, otherwise I could be needlessly gold plating.</p>
<p><a href="http://mikemacd.files.wordpress.com/2012/09/arch_mechanism_flipside.png"><img class="alignnone size-full wp-image-1171" title="Architectural Mechanism Flipside" src="http://mikemacd.files.wordpress.com/2012/09/arch_mechanism_flipside.png?w=630" alt=""   /></a></p>
<p>Mechanisms are best found by understanding the <a title="Scaled Agility: Architectural profiling" href="http://mikemacd.wordpress.com/2012/09/25/scaled-agility-architectural-profiling/">architectural profile </a>initially and then by actually building the system. If the customer doesn&#8217;t have a story that will be satisfied in part by a mechanism then it probably shouldn&#8217;t be there. Even if it is shiny.</p>
<br />Filed under: <a href='http://mikemacd.wordpress.com/category/software-development-methods-and-tools/'>software development, methods and tools</a> Tagged: <a href='http://mikemacd.wordpress.com/tag/agile/'>agile</a>, <a href='http://mikemacd.wordpress.com/tag/architecture/'>architecture</a>, <a href='http://mikemacd.wordpress.com/tag/design/'>design</a>, <a href='http://mikemacd.wordpress.com/tag/lightweight/'>lightweight</a>, <a href='http://mikemacd.wordpress.com/tag/mechanism/'>mechanism</a>, <a href='http://mikemacd.wordpress.com/tag/minimal/'>minimal</a>, <a href='http://mikemacd.wordpress.com/tag/quality-risk/'>quality risk</a>, <a href='http://mikemacd.wordpress.com/tag/risk/'>risk</a>, <a href='http://mikemacd.wordpress.com/tag/scrum/'>scrum</a>, <a href='http://mikemacd.wordpress.com/tag/sketch/'>sketch</a>, <a href='http://mikemacd.wordpress.com/tag/software-development/'>software-development</a>, <a href='http://mikemacd.wordpress.com/tag/structure/'>structure</a>, <a href='http://mikemacd.wordpress.com/tag/testing/'>testing</a>, <a href='http://mikemacd.wordpress.com/tag/uml/'>uml</a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1165&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikemacd.wordpress.com/2012/09/25/lightweight-architectural-mechanisms-specification-by-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/4d2f742e138474d59582386916e36d8e?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">mikemacd</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2012/09/uml_arch_view_simple.png" medium="image">
			<media:title type="html">Architecture Overview sketch</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2012/09/arch_mechanism.png" medium="image">
			<media:title type="html">Architectural Mechanism - side 1</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2012/09/arch_mechanism_flipside.png" medium="image">
			<media:title type="html">Architectural Mechanism Flipside</media:title>
		</media:content>
	</item>
		<item>
		<title>Lightweight architecture sketch in a single diagram</title>
		<link>http://mikemacd.wordpress.com/2012/09/24/lightweight-architecture-sketch-in-a-single-diagram/</link>
		<comments>http://mikemacd.wordpress.com/2012/09/24/lightweight-architecture-sketch-in-a-single-diagram/#comments</comments>
		<pubDate>Mon, 24 Sep 2012 14:31:53 +0000</pubDate>
		<dc:creator>mikemacd</dc:creator>
				<category><![CDATA[software development, methods and tools]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[lightweight]]></category>
		<category><![CDATA[mechanism]]></category>
		<category><![CDATA[minimal]]></category>
		<category><![CDATA[quality risk]]></category>
		<category><![CDATA[risk]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[software-development]]></category>
		<category><![CDATA[structure]]></category>
		<category><![CDATA[uml]]></category>

		<guid isPermaLink="false">http://mikemacd.wordpress.com/?p=1155</guid>
		<description><![CDATA[I&#8217;ve been doing architecture for a while, in fact it&#8217;s what I used to do as my main job. I&#8217;ve taught UML, Object Orientated design and coding and various bits of various processes for years. One thing that&#8217;s stuck me over the years is that most of the descriptions of how to capture and communicate [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1155&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been doing architecture for a while, in fact it&#8217;s what I used to do as my main job. I&#8217;ve taught UML, Object Orientated design and coding and various bits of various processes for years. One thing that&#8217;s stuck me over the years is that most of the descriptions of how to capture and communicate architecture aren&#8217;t simple enough.</p>
<p>I quite like <a href="https://en.wikipedia.org/wiki/Unified_Modeling_Language">UML</a>, it&#8217;s useful to be able to draw a symbol and others know what it is without me having to explain to everyone what I mean, but I don&#8217;t like the way it has so many restrictive rules that stop me from making a <a href="http://martinfowler.com/bliki/UmlAsSketch.html">nice sketch</a> to explain what I mean, also everyone else doesn&#8217;t seem to know the language to the same degree, I need something a bit lighter.</p>
<table width="499" border="0">
<tbody>
<tr valign="top">
<td width="50%">I don&#8217;t want:</p>
<ul>
<li>to be limited to the symbology of UML</li>
<li>a lot of model structure with interconnected diagrams</li>
<li>endless detail</li>
<li>every class on the diagram</li>
<li>to follow all of the rules</li>
</ul>
</td>
<td> I do want:</p>
<ul>
<li>the symbology of UML</li>
<li>the important elements</li>
<li>to give a feel of the important structural, logical and physical stuff</li>
<li>just one diagram</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>I&#8217;ve always done a high level diagram that shows the overall pattern for my architecture, something like layers or pipes and filters or whatever. I&#8217;ve also always done a breakdown of the important stuff within each layer but I&#8217;ve had the best success (in terms of communicating with others) when I&#8217;ve mixed both, with elements of the target deployment and actor interaction.</p>
<p>Being terrible at naming things I call this marvellous diagram the &#8220;Architectural Overview Sketch&#8221;. Here&#8217;s an example:</p>
<p><a href="http://mikemacd.files.wordpress.com/2012/09/uml_arch_view_simple.png"><img class="size-full wp-image-1156 alignnone" title="Architecture Overview sketch" src="http://mikemacd.files.wordpress.com/2012/09/uml_arch_view_simple.png?w=630&#038;h=601" alt="" width="630" height="601" /></a></p>
<p>It  expresses all of the structural things that I care about. It expresses the:</p>
<ul>
<li>the shape and feel of the system</li>
<li>high level layers</li>
<li>primary interfaces between subsystems</li>
<li>target client platforms</li>
<li>User &#8211; GUI interaction paradigm</li>
<li>important classes in each layer and major layer package structure</li>
<li>critical data schema</li>
<li>interaction with external APIs</li>
<li>the middleware and database hosting and distribution</li>
</ul>
<p>I <em>might </em>have more diagrams to explain more structure in part of this if it&#8217;s really important, but I don&#8217;t want to have every class in my system on a diagram somewhere. I&#8217;m using my diagrams to communicate, not specify. I&#8217;m broken a bunch of UML rules of course, and there&#8217;s a lot of implied stuff but adding those details makes it harder to explain what I really want. One thing I really like about it is how it shows the important detailed parts of a design in the context of the bigger architecture.</p>
<p>Architecture, like any design, is best expressed in terms of both structure and behaviour. So far this is just structure, there&#8217;s some hints at behaviours but nothing terribly useful. My next post will be about how I minimally specify the important bits of an architectures behaviour &#8211; the <a title="Lightweight architectural mechanisms – specification by example" href="http://mikemacd.wordpress.com/2012/09/25/lightweight-architectural-mechanisms-specification-by-example/">mechanisms</a>.</p>
<br />Filed under: <a href='http://mikemacd.wordpress.com/category/software-development-methods-and-tools/'>software development, methods and tools</a> Tagged: <a href='http://mikemacd.wordpress.com/tag/agile/'>agile</a>, <a href='http://mikemacd.wordpress.com/tag/architecture/'>architecture</a>, <a href='http://mikemacd.wordpress.com/tag/design/'>design</a>, <a href='http://mikemacd.wordpress.com/tag/lightweight/'>lightweight</a>, <a href='http://mikemacd.wordpress.com/tag/mechanism/'>mechanism</a>, <a href='http://mikemacd.wordpress.com/tag/minimal/'>minimal</a>, <a href='http://mikemacd.wordpress.com/tag/quality-risk/'>quality risk</a>, <a href='http://mikemacd.wordpress.com/tag/risk/'>risk</a>, <a href='http://mikemacd.wordpress.com/tag/scrum/'>scrum</a>, <a href='http://mikemacd.wordpress.com/tag/sketch/'>sketch</a>, <a href='http://mikemacd.wordpress.com/tag/software-development/'>software-development</a>, <a href='http://mikemacd.wordpress.com/tag/structure/'>structure</a>, <a href='http://mikemacd.wordpress.com/tag/uml/'>uml</a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikemacd.wordpress.com&#038;blog=3507899&#038;post=1155&#038;subd=mikemacd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikemacd.wordpress.com/2012/09/24/lightweight-architecture-sketch-in-a-single-diagram/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/4d2f742e138474d59582386916e36d8e?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">mikemacd</media:title>
		</media:content>

		<media:content url="http://mikemacd.files.wordpress.com/2012/09/uml_arch_view_simple.png" medium="image">
			<media:title type="html">Architecture Overview sketch</media:title>
		</media:content>
	</item>
	</channel>
</rss>
