<?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>Richard Lawrence &#187; architecture</title>
	<atom:link href="http://www.richardlawrence.info/tag/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.richardlawrence.info</link>
	<description>On making software teams happier and more productive</description>
	<lastBuildDate>Fri, 27 Jan 2012 18:41:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Agile Architecture &#8211; Neither BDUF nor Chaos</title>
		<link>http://www.richardlawrence.info/2008/11/03/agile-architecture-neither-bduf-nor-chaos/</link>
		<comments>http://www.richardlawrence.info/2008/11/03/agile-architecture-neither-bduf-nor-chaos/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 18:00:07 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[architecture]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=49</guid>
		<description><![CDATA[I&#8217;m often asked how architecture works on agile software projects. It&#8217;s a big question, but the core answer, I think, is this: Neither a big, detailed architecture up front nor no architecture at all is a good approach. The former leads to waste. The up-front architecture tends to support features that turn out never to [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2008/10/30/free-agile-product-management-seminar-nov-11-denver/' rel='bookmark' title='Permanent Link: Free Agile Product Management Seminar &#8211; Nov 11, Denver'>Free Agile Product Management Seminar &#8211; Nov 11, Denver</a></li>
<li><a href='http://www.richardlawrence.info/2008/09/08/surviving-rewrites/' rel='bookmark' title='Permanent Link: Surviving Rewrites'>Surviving Rewrites</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>I&#8217;m often asked how architecture works on agile software projects. It&#8217;s a big question, but the core answer, I think, is this: <strong>Neither a big, detailed architecture up front nor no architecture at all is a good approach.</strong> The former leads to waste. The up-front architecture tends to support features that turn out never to be necessary and that unnecessary complexity tends to make the features that are implemented more expensive than they need to be. I worked in one organization where the requirement to fully implement the company-standard architecture added several hundred thousand dollars to the initial release of any new product with questionable business value in return. The latter approach, no architecture at all, is prone to produce a system that is unmaintainable, leading to waste later as features cost increasingly more to implement and maintain as the system grows.</p>
<p>Here&#8217;s my two rule heuristic for agile architecture:</p>
<p><span id="more-49"></span></p>
<ol>
<li><strong>Have a minimally sufficient technical vision</strong>. Know where you&#8217;d like to go architecturally at a high level. What technologies do you expect to use? What architectural patterns are appropriate (e.g. SOA)? You may not implement most of the target architecture until features require it, but it will keep the team working in the same direction. Revisit this target architecture regularly as the backlog changes to ensure that it stays relevant.</li>
<li><strong>Make decisions that keep your options open</strong>. Always try to build just enough to support the current features, while keeping it easy to move towards the target architecture (or any other architecture that future features may require). Avoid making commitments to a particular architecture before you have to.</li>
</ol>
<p>For example, suppose your target architecture includes SOA. Until your features require your business layer to be consumed as a service by more than one client, you might defer actually building the service interface. Instead, build a good OO interface and use it directly from your client, designing it such that a service facade will be easy to add when needed. Your current features will be usable faster, allowing for early ROI and for learning that might change the requirements around the service interface. Fortunately, since you haven&#8217;t built a service interface yet, you won&#8217;t have to throw anything away to incorporate that learning into the product.</p>
<p>You can employ a similar approach around persistence, caching, reporting, configuration, and security, among others.</p>
<p>Where have you struggled with agile architecture? What creative architectural solutions have you come up with that allowed you to implement just enough architecture while leaving your options open?</p>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2008/10/30/free-agile-product-management-seminar-nov-11-denver/' rel='bookmark' title='Permanent Link: Free Agile Product Management Seminar &#8211; Nov 11, Denver'>Free Agile Product Management Seminar &#8211; Nov 11, Denver</a></li>
<li><a href='http://www.richardlawrence.info/2008/09/08/surviving-rewrites/' rel='bookmark' title='Permanent Link: Surviving Rewrites'>Surviving Rewrites</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2008/11/03/agile-architecture-neither-bduf-nor-chaos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Surviving Rewrites</title>
		<link>http://www.richardlawrence.info/2008/09/08/surviving-rewrites/</link>
		<comments>http://www.richardlawrence.info/2008/09/08/surviving-rewrites/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 03:50:31 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[BDUF]]></category>
		<category><![CDATA[Chad Fowler]]></category>
		<category><![CDATA[David Anderson]]></category>
		<category><![CDATA[Martin Fowler]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=37</guid>
		<description><![CDATA[It seems like fully half the projects I come across are rewrites in one form or another. It ought to be common knowledge by now that rewrite projects have a very bad track record, but perhaps the bad results are connected to the inordinate attractiveness of &#8220;doing it right this time.&#8221; The chance to replace [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2008/07/11/one-word-can-change-your-daily-scrum/' rel='bookmark' title='Permanent Link: One Word Can Change Your Daily Scrum'>One Word Can Change Your Daily Scrum</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>It seems like fully half the projects I come across are rewrites in one form or another. It ought to be common knowledge by now that rewrite projects have a very bad track record, but perhaps the bad results are connected to the inordinate attractiveness of &#8220;doing it right this time.&#8221; The chance to replace the ugly production system with a new, pure, buzzword-compliant ode to software architecture is one of the more compelling <a href="http://en.wikipedia.org/wiki/Siren">siren</a> songs for developers. Too bad about those rocks.</p>
<p>Given that rewrites aren&#8217;t going away, here are the things I recommend software organizations consider to maximize their chances of avoiding the rocks (and maybe even be wildly successful!).</p>
<ol>
<li>The problem isn&#8217;t as well known as you think it is. Run away from specs that say, &#8220;The new system shall do everything the old system does plus new functions X, Y, and Z.&#8221; No one knows exactly what the system does. It got to where it is today through the accretion of features, hacks, and workarounds. You&#8217;re almost guaranteed to break someone&#8217;s unofficial report when you rebuild the system &#8220;right.&#8221;</li>
<li><a href="http://c2.com/xp/BigDesignUpFront.html">BDUF</a> still doesn&#8217;t work, even if the previous version of the system already exists. Sure, you&#8217;ve architected the perfect service-oriented, social-media, domain-specific new system. Unfortunately, it&#8217;s wrong. In the end, the new system is going to look nothing like you envision. You can&#8217;t see the future any more than the previous team could. (In fact, they were probably replacing some other system and &#8220;doing it right this time.&#8221;)</li>
<li>The customer almost always wants the existing system plus something new. By now, the existing system is probably what <a href="http://www.agilemanagement.net/Articles/Weblog/PrioritizingandPlanningfo.html">David Anderson calls table stakes</a>. Since the existing system exists, you&#8217;re already in the game. Don&#8217;t start by building the table stakes again. The new features are probably spoilers or differentiators. Those have real incremental business value. If the existing system works, build the new features first. Figure out a way to integrate them with the existing system as necessary. Then grow the new system to choke out the existing one. (Martin Fowler call this pattern <a href="http://www.martinfowler.com/bliki/StranglerApplication.html">Strangler Application</a>.) Eventually, you&#8217;ll have your whole new system, but it&#8217;ll bring new value from day one instead of spending months or years catching up with the existing system. It&#8217;s harder to architect a system incrementally than from scratch, but architects like challenges, right?</li>
<li>Involve the business. Don&#8217;t let them send you to the existing system as a specification. Starting with the new features makes this a pretty easy sell. Someone&#8217;s excited enough about those new features to work with your team. Keep a blend of new and replacement features through the whole project and they&#8217;ll stay engaged.</li>
<li>Release early and often. Business value can only be realized if people are using the software. Moreover, the quality of the feedback you receive will be better if your software is being used by real users with real data. This is standard agile stuff and shouldn&#8217;t come as a surprise to anyone, but rewrite projects seem to have a logic of their own.</li>
</ol>
<p>For more rewrite project advice, check out Chad Fowler&#8217;s excellent 2006 <a href="http://chadfowler.com/2006/12/27/the-big-rewrite">series on the topic</a>.</p>
<p>What other tips would you give teams considering a rewrite project? Share them in the comments.</p>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2008/07/11/one-word-can-change-your-daily-scrum/' rel='bookmark' title='Permanent Link: One Word Can Change Your Daily Scrum'>One Word Can Change Your Daily Scrum</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2008/09/08/surviving-rewrites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

