<?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"
	>

<channel>
	<title>Software &#038; Technology @kirkk.com</title>
	<atom:link href="http://techdistrict.kirkk.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://techdistrict.kirkk.com</link>
	<description></description>
	<pubDate>Tue, 16 Mar 2010 16:09:48 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>A Badge of Honor</title>
		<link>http://techdistrict.kirkk.com/2010/03/16/a-badge-of-honor/</link>
		<comments>http://techdistrict.kirkk.com/2010/03/16/a-badge-of-honor/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 16:09:16 +0000</pubDate>
		<dc:creator>kirk</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://techdistrict.kirkk.com/2010/03/16/a-badge-of-honor/</guid>
		<description><![CDATA[Often times, I hear folks exclaim that they&#8217;ve been on &#8220;40 development projects over the past 10 years.&#8221; Or, &#8220;70 projects spanning a 20 year career.&#8221; They say this as if it&#8217;s some badge of honor. But I&#8217;m not so sure that it is.
Of course, there is value in widespread project exposure. Gaining experience  [...]]]></description>
			<content:encoded><![CDATA[<p>Often times, I hear folks exclaim that they&#8217;ve been on &#8220;40 development projects over the past 10 years.&#8221; Or, &#8220;70 projects spanning a 20 year career.&#8221; <strong>They say this as if it&#8217;s some badge of honor.</strong> But I&#8217;m not so sure that it is.</p>
<p>Of course, there is value in widespread project exposure. Gaining experience  with new technologies. Experiencing the dynamics of different teams.  Understanding the challenges surrounding different organizational  cultures. Each project is unique, bringing its own set of experiences,  and these experiences are all incredibly valuable.</p>
<p>But when I see that someone has jumped from one project to another, it also leaves me wondering! <strong>Have they ever stuck around long enough on any single project to see their decisions through to the end?</strong> <strong>Have they ever had to live with the decisions they&#8217;ve made?</strong> An amazing compilation of knowledge is obtained by not only participating in the early stages of development, but also in maintaining the software system after it&#8217;s been released. To name just a few:</p>
<ul>
<li>Dealing with the challenges of Phase 2, while also maintaining Phase 1.</li>
<li>Managing multiple branches of the software system. Merging those branches back together. Creating new branches. <strong><br />
</strong></li>
<li>A critical production issue arising about the same time you need to start heading out for that important customer demo.</li>
<li>Attempting to change a piece of code that hasn&#8217;t been touched in 10 months.</li>
<li>Watching the software system grow from nothing to a system that&#8217;s more than 500,000 lines of code. Keeping the build performant. Keeping the build working!</li>
<li>Being forced to live with seemingly meaningless early design decisions that haunt you over time.</li>
<li>Trying to upgrade versions of third party libraries while development is ongoing. Simply recognizing the right time to upgrade.</li>
</ul>
<p>And there is so much more. <strong>Priorities tugging you in five different directions at one time. </strong>If you&#8217;ve had the luxury of living with a system (and the mistakes) you created, you&#8217;ll realize that there are very few, if any, decisions that shouldn&#8217;t be given conscious thought.</p>
<p>When an individual sticks with a project for a long time, they realize the importance of maintaining a clean design, a robust suite of unit tests, and how they package their software system. There is significant knowledge gained by sticking with a project for a long period of time. Perhaps the next time you hire a developer, it might be wise to ask them, &#8220;<strong>What&#8217;s the longest you&#8217;ve spent on any given project?</strong>&#8221; That may be more important than the number of projects they&#8217;ve been on.</p>
<p>Somewhere along the way, I picked up a small piece of advice that has  helped serve as a valuable guide. <strong>There is a big difference between  ten years of experience and one year of experience ten times.</strong> When  you jump from project to project, never living with the decisions you&#8217;ve made, you have lost an opportunity to learn what works well and what  does not.</p>
]]></content:encoded>
			<wfw:commentRss>http://techdistrict.kirkk.com/2010/03/16/a-badge-of-honor/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cost: Mac or PC? A Look at TCO!</title>
		<link>http://techdistrict.kirkk.com/2010/03/11/cost-mac-or-pc-a-look-at-tco/</link>
		<comments>http://techdistrict.kirkk.com/2010/03/11/cost-mac-or-pc-a-look-at-tco/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 16:38:18 +0000</pubDate>
		<dc:creator>kirk</dc:creator>
		
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://techdistrict.kirkk.com/2010/03/11/cost-mac-or-pc-a-look-at-tco/</guid>
		<description><![CDATA[I&#8217;ve owned Macs for about four years now. I use them daily. One of the biggest complaints I hear surrounding Macs is that they&#8217;re more expensive than their PC counterparts. This recent article in CIO examining total cost of ownership (TCO) for businesses using Macs left me wondering. For personal use, are Macs really that [...]]]></description>
			<content:encoded><![CDATA[<p align="left">I&#8217;ve owned Macs for about four years now. I use them daily. One of the biggest complaints I hear surrounding Macs is that they&#8217;re more expensive than their PC counterparts. This <a href="http://www.cio.com/article/569163/Are_Macs_Really_Cheaper_To_Manage_Than_PCs_">recent article in CIO</a> examining total cost of ownership (TCO) for businesses using Macs left me wondering. <strong>For personal use, are Macs really that much more expensive than PCs, especially when factoring in TCO?</strong> Unfortunately, it&#8217;s not so black and white. Let&#8217;s look at some numbers.</p>
<p>For this little exercise, I&#8217;ve decided to compare sample TCO over a period of time (ie. 2 years) for a Mac and a PC. This includes the initial purchase cost, ongoing support costs, and software purchases. It does not include any personal time that you would need to devote to maintaining and managing the device, such as reinstalling the operating system, cleaning up unused applications, dealing with anti-virus software and configuration, and general troubleshooting tasks.</p>
<p>I&#8217;ve made my most valiant effort to present an unbiased view and have arguably given favor to the PC. It would have been easy to close the price gap much more quickly if I were to toss in a few not-so-easy to measure items, such as the likelihood that you&#8217;ll have to take your PC to a professional to have it saved. But I&#8217;m sticking with hard numbers; the stuff that&#8217;s easy to measure. Let&#8217;s get started.</p>
<h3>The Initial Purchase</h3>
<p>I picked two models, fairly equal in their capabilities - <strong>a Dell Inspiron 15 and a 15&#8243; MacBook Pro</strong>. When purchasing the Dell, I had to configure it so it had specs equal to the Mac. Let&#8217;s look at purchasing and configuring the Mac first.</p>
<p><strong>The MacBook Pro</strong></p>
<p><img style="max-width: 800px;" src="http://techdistrict.kirkk.com/wp-content/uploads/2010/03/macbookpro.jpg" alt="" />The <a href="http://store.apple.com/us/configure/MC118LL/A?mco=MTM3NDcyODk">15&#8243; MacBook Pro</a> we&#8217;re going to purchase comes already loaded, so we aren&#8217;t going to make many customizations to it. We&#8217;re going to go with the entry level model, which <strong>prices out at $1699</strong>. The general specs include a 2.53 GHz Intel Core 2 duo processor with 4 GB of RAM. All we&#8217;re going to do is increase the hard drive to 320 GB, which <strong>adds $50</strong> to the price, and purchase iWork, which <strong>adds $49</strong> (Pages, Numbers, and Keynote). For those not familiar with iWork, this is what we&#8217;ll use on the Mac instead of Microsoft Office.<strong><br />
</strong></p>
<p><strong>Total price for the MacBook Pro: $1798.00.</strong></p>
<p><strong>The Dell Inspiron 15</strong></p>
<p><img style="max-width: 800px; float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" src="http://techdistrict.kirkk.com/wp-content/uploads/2010/03/dell.jpg" alt="" width="90" height="90" />Keep in mind that the Inspiron is under Dell&#8217;s &#8220;Home&#8221; category. What this generally means is that it comes pre-loaded with a whole bunch of useless trial software that expires in either 30, 60, or 90 days. After that initial trial period, you&#8217;ll have to purchase a license to continue using it. For a business, you&#8217;d probably purchase the Latitude to avoid all of this unnecessary garbage. To keep the price down, I&#8217;m going to go with the <a href="http://www.dell.com/us/en/home/notebooks/laptop-inspiron-1545/pd.aspx?refid=laptop-inspiron-1545&amp;s=dhs&amp;cs=19&amp;%7Eoid=us%7Een%7E29%7Elaptops_great_deals_anav_1%7E%7E">Inspiron 15</a>. See&#8230;told you I was giving favor to the PC!</p>
<p>To get a somewhat even comparison, I&#8217;m going to have to customize this thing to bring it up to equal specs as that of the Mac we&#8217;re going to purchase. <strong>The initial cost of the base machine is $499.</strong> But without any further customizations, that machine doesn&#8217;t offer much horsepower. First, I&#8217;ve got to add a Core 2 duo processor clocking in at 2.53 GHz. This <strong>adds $225 </strong>to the price.  We do need the wireless -N card, which <strong>adds $40</strong>. Why would this not be standard? Odd!</p>
<p>Next is Microsoft Office Home and Student 2007, which <strong>adds $119</strong>. We need this if we want to create spreadsheets, documents, or presentations. I recognize I could have gone with <a href="http://www.openoffice.org">OpenOffice</a>, but I find that most people choose Microsoft Office, so that&#8217;s what I&#8217;m doing here. Since we&#8217;re running Windows, we need anti-virus software. With the Dell model, there&#8217;s an option to purchase a 36 month license of McAfee. I&#8217;m going to jump on that because it only <strong>adds $40</strong> to the price.</p>
<p>At this point, we&#8217;re finished with the Dell. There are a few things we could have done to even out the playing field a bit more. For an additional $45, we could have upgraded to the 9-cell battery that would have given us up to 8 hours of battery life. Keep in mind the Mac has a battery that gives us about 7 hours. Additionally, the version of Microsoft Office we purchased doesn&#8217;t come with Outlook, so we&#8217;ll still need to find an e-mail client once we get our laptop. But I just couldn&#8217;t see  spending another $160 to purchase the Small Business edition that comes  equipped with Outlook. The Mac will have Mail.app preinstalled for us, which is a nice e-mail client with Exchange integration. Already, the cost of software licensing is a sign of things to come that&#8217;s  going to factor heavily into TCO.</p>
<p><strong>Total price for the Dell: $883.</strong></p>
<h3>The Software</h3>
<p>While these are each good machines, to get great things done requires software. Each of us have different needs surrounding the software we use, so I&#8217;ll offer up a few samples based on what I use. It won&#8217;t take long to get a clear understanding of the significant impact this has on TCO. Choose your own software stack, and see how it adds up. Then, let me know if you&#8217;re findings are consistent with mine.</p>
<p>First, I want to purchase software that allows me to create some nice drawings. For the Mac, I&#8217;m going to purchase <a href="http://www.omnigroup.com/products/omnigraffle/">OmniGraffle</a>, which comes in two versions, standard ($99.95) and professional ($199.95). For Windows, <a href="http://office.microsoft.com/en-us/visio/FX102464421033.aspx">Visio</a> is a good option, which also comes in two different versions, standard ($259.95) and professional ($559.95). Let&#8217;s go the cheaper route on each. <strong>This brings the total price for the Mac to $1897.95 and the price of the Dell to $1082.95. </strong>Note: If I had purchased the professional version of each, the TCO at this point would be 1997.95 and 1382.95, respectively.</p>
<p>Next, I want some screen capture software so I can create some short training videos for online publication. For this, we&#8217;ll use <a href="http://www.techsmith.com">Camtasia</a>. The Mac edition of Camtasia prices out at $99.00, and the Windows version comes in at a rather lofty $299.00. <strong>TCO for the Mac is now at $1996.95 and the Dell is at $1381.95.</strong></p>
<p>See a pattern developing here yet?</p>
<p>Keeping this post at a reasonable length, I&#8217;m only going to make one more purchase. At some point throughout my time as owner of one of these wonderful products, it&#8217;s likely that a new version of an operating system is going to arrive. And I&#8217;m going to want to upgrade. When <a href="http://www.apple.com/macosx/">Snow Leopard for Mac</a> hit the market, the cost to upgrade was a paltry $9.95. Alternatively, the price to upgrade to <a href="http://www.microsoft.com/windows/buy/default.aspx">Windows 7 Home Premium</a> comes in around $119.95. In fact, a full license of Snow Leopard is only $29.95. A full license of Windows 7 Home Premium? $199.99! Again, the pattern is developing. <strong>TCO for the Mac is now $2006.90, while the Dell is at $1501.90. </strong></p>
<h3>Additional Analysis</h3>
<p>At this point, the Mac is still slightly more expensive. But an initial price difference of $1200 was quickly dwindled down to just over $500 by the time we were finished. Clearly, the stark difference in the initial price is quite different from TCO. I could easily keep going, purchasing software that I want and need, and each time find that the Mac edition of the software comes in priced far below the Windows version. But I think I&#8217;ve illustrated the pattern here. <strong>The cost of software for Windows is more expensive than corresponding software for the Mac, and throughout the lifetime of ownership, TCO for Windows will approach, if not exceed, that of the Mac.</strong> For instance, Apple offers the option of purchasing a 5-license family pack of iWork for a mere $20 more than a single copy. A 5-license copy of Office is going to be quite expensive ($595).</p>
<p>Additionally, I have not broached the subject surrounding the time you&#8217;ll spend maintaining the Windows machine to keep it running smoothly. In four years on a Mac, I haven&#8217;t devoted any effort to tuning the machine for performance. It just works. After about six months on a Windows machine, I find that I&#8217;m always tinkering with it to maintain optimal performance. Since I can&#8217;t put an accurate price tag on this, I haven&#8217;t discussed it. But it is significant. Ok, I&#8217;m a little biased here, aren&#8217;t I?</p>
<p>Finally, I could have gone with the 13&#8243; MacBook Pro with the exact same specs (just a smaller display) as the Inspiron 15 for an entry price of $1448.00. And the 13&#8243; Mac is a great machine. After purchasing the software I want, the price for the 13&#8243; Mac comes to 1656.90. <strong>That&#8217;s only $155.00 more for the Mac!</strong></p>
<h3>The Clear Winner Is&#8230;</h3>
<p>The winner&#8230;you decide! All too often we compare Mac and PCs based on initial cost, failing to factor in the longer term TCO. When comparing Apples-to-Apples (errr&#8230;I mean PCs) though, the difference isn&#8217;t as stark. If you want a low end machine with a short lifespan, Dell (and many other PC manufacturers using Windows) offer this, <a href="http://www.dell.com/content/topics/segtopic.aspx/laptop-mini-alt?c=us&amp;l=en&amp;cs=19">including their line of netbooks</a>.</p>
<p>It is possible to purchase a Dell for under $500. But remember, you get what you pay for. <strong>And side-by-side, machines of equal horsepower and capability are going to result in similarly equal TCO. </strong>By the time you spec out the machines evenly, and factor in TCO, the price of a Mac is arguably equal too, if not less than, that of a Windows PC. Either way, I know what my choice is!</p>
]]></content:encoded>
			<wfw:commentRss>http://techdistrict.kirkk.com/2010/03/11/cost-mac-or-pc-a-look-at-tco/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Agile Animations - Big Teams</title>
		<link>http://techdistrict.kirkk.com/2010/03/08/agile-animations-big-teams/</link>
		<comments>http://techdistrict.kirkk.com/2010/03/08/agile-animations-big-teams/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 18:33:58 +0000</pubDate>
		<dc:creator>kirk</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://techdistrict.kirkk.com/?p=850</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<div class="youtube-video"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/A6KU_zpspJg&amp;hl=en_US&amp;fs=1&amp;" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/A6KU_zpspJg&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://techdistrict.kirkk.com/2010/03/08/agile-animations-big-teams/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Architecture Lives Here</title>
		<link>http://techdistrict.kirkk.com/2010/03/04/architecture-lives-here/</link>
		<comments>http://techdistrict.kirkk.com/2010/03/04/architecture-lives-here/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 16:48:21 +0000</pubDate>
		<dc:creator>kirk</dc:creator>
		
		<category><![CDATA[Architecture &amp; Design]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[OSGi]]></category>

		<guid isPermaLink="false">http://techdistrict.kirkk.com/2010/03/04/architecture-lives-here/</guid>
		<description><![CDATA[Last week at OSGi DevCon, I attended Peter Krien&#8217;s Advanced OSGi tutorial. The tutorial focused on OSGi services, and I had just come off a rather lengthy e-mail discussion with Peter on a similar topic. So this was pretty good timing. I want to share with you one aspect of the discussion, and its relationship [...]]]></description>
			<content:encoded><![CDATA[<p>Last week at OSGi DevCon, I attended Peter Krien&#8217;s Advanced OSGi tutorial. The tutorial focused on OSGi services, and I had just come off a rather lengthy e-mail discussion with Peter on a similar topic. So this was pretty good timing. I want to share with you one aspect of the discussion, and its relationship to architecture. It&#8217;s quite simple, though makes an important point.</p>
<p>In the past, I&#8217;ve talked about the importance of <a href="http://techdistrict.kirkk.com/2009/09/16/modularity-architecture/">designing the joints of a system</a>. OSGi services represent these joints, since services are essentially a module&#8217;s published interface. In general, if the implementation details of a module are well encapsulated, then implementation details can change without impacting the rest of the system. <strong>In other words, we minimize that nasty ripple affect of change if we confine change to a single module. But changes that span modules is nasty.</strong> Let&#8217;s take a few visuals to illustrate the point here.</p>
<h3>Where&#8217;s the Architecture</h3>
<p><a href="http://techdistrict.kirkk.com/wp-content/uploads/2010/03/whereisthearchitecture2.jpg"><img style="max-width: 800px;" src="http://techdistrict.kirkk.com/wp-content/uploads/2010/03/whereisthearchitecture2.jpg" alt="" width="123" height="114" /></a>Commonly, we visualize the module structure of a software system using a simple diagram similar to what&#8217;s shown at right (click to enlarge). We see the modules and the relationships between them. Of course, the relationships between modules represent the joints. Pretty simple stuff! Unfortunately, our attention is immediately drawn to the modules themselves, but not so much the joints.</p>
<p><strong>And we really must be much more concerned about the joints than we are the implementation details because changes in the joints of the system are more complex and costly.</strong> This is where we need flexibility and it&#8217;s also where we need stability. Emphasizing module implementation is important, but flexibility in the joints is more important.</p>
<h3>Illustrating the Joints</h3>
<p><a href="http://techdistrict.kirkk.com/wp-content/uploads/2010/03/whereisthearchitecture11.jpg"><img style="max-width: 800px;" src="http://techdistrict.kirkk.com/wp-content/uploads/2010/03/whereisthearchitecture11.jpg" alt="" width="119" height="109" /></a>In the session, Peter annotated the diagram using a new convention, which I&#8217;ve depicted in the diagram at right (click to enlarge). The red triangles more clearly illustrate the joints. Here, our attention is drawn more toward the design constructs that span module boundaries. <strong>No longer is emphasis placed on the implementation details, but instead has moved to focus on the relationships between the modules.</strong> And the direction of the red triangle also helps illustrate the direction of the dependency relationship between the modules. In other words, these red triangles are the services.</p>
<h3>The Real Architecture</h3>
<p><img style="max-width: 800px;" src="http://techdistrict.kirkk.com/wp-content/uploads/2010/03/whereisthearchitecturehere.jpg" alt="" width="116" height="105" />Now, because the module itself represents behavior that is encapsulated, we can remove the modules from the diagram altogether and show only the joints, as shown at right (click to enlarge). <strong>This is where the impact and cost of change is most significant. And this is where we really need to ensure we have the greatest flexibility. These are the decisions that are most architecturally significant.<br />
</strong></p>
<h3>A Short Digression</h3>
<p>Now I don&#8217;t think it&#8217;s necessarily important to start drawing architecture diagrams this way. In fact, I&#8217;ve never felt that it&#8217;s critically important to draw these pretty diagrams in the first place. <strong>While diagrams (and documentation) can be useful, they are little more than a pimple on software development&#8217;s ass.</strong> There are much more important things to worry about than diagrams. But I digress, and in general, this simple exercise helps recognize the importance of designing the joints of the software system.</p>
<h3>The Real Point</h3>
<p>Of course, while this example illustrates the point using modules, it&#8217;s not just the joints between modules that are important, but the joints at many different levels of the system, including applications, services, packages, and classes. <strong>In other words, the point where two entities connect is where the real architecture lives.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://techdistrict.kirkk.com/2010/03/04/architecture-lives-here/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OSGi DevCon Slides</title>
		<link>http://techdistrict.kirkk.com/2010/02/26/osgi-devcon-slides/</link>
		<comments>http://techdistrict.kirkk.com/2010/02/26/osgi-devcon-slides/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 16:09:05 +0000</pubDate>
		<dc:creator>kirk</dc:creator>
		
		<category><![CDATA[Architecture &amp; Design]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[OSGi]]></category>

		<guid isPermaLink="false">http://techdistrict.kirkk.com/2010/02/26/osgi-devcon-slides/</guid>
		<description><![CDATA[After the OSGi DevCon keynote, I had a few folks stop by and ask me for the slides. They are now available on slideshare. Usually, when browsing the slides without discussion, the lack of context can cause some confusion. So if you have any questions regarding the content, please feel free to reach out. Enjoy!
OSGi [...]]]></description>
			<content:encoded><![CDATA[<p>After the OSGi DevCon keynote, I had a few folks stop by and ask me for the slides. They are now available on slideshare. Usually, when browsing the slides without discussion, the lack of context can cause some confusion. So if you have any questions regarding the content, please feel free to reach out. Enjoy!</p>
<div id="__ss_3275285" style="width: 425px;"><strong style="margin: 12px 0pt 4px; display: block;"><a title="OSGi in the Enterprise: Agility, Modularity, and Architecture's Paradox" href="http://www.slideshare.net/pragkirk/osgi-in-the-enterprise-agility-modularity-and-architectures-paradox">OSGi in the Enterprise: Agility, Modularity, and Architecture&#8217;s Paradox</a></strong></p>
<div class="youtube-video"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=agilearchitecture-osgidevcon-100225084436-phpapp01&amp;stripped_title=osgi-in-the-enterprise-agility-modularity-and-architectures-paradox" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=agilearchitecture-osgidevcon-100225084436-phpapp01&amp;stripped_title=osgi-in-the-enterprise-agility-modularity-and-architectures-paradox" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<div style="padding: 5px 0pt 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/pragkirk">pragkirk</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://techdistrict.kirkk.com/2010/02/26/osgi-devcon-slides/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OSGi DevCon Preview</title>
		<link>http://techdistrict.kirkk.com/2010/02/17/osgi-devcon-preview/</link>
		<comments>http://techdistrict.kirkk.com/2010/02/17/osgi-devcon-preview/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 16:24:21 +0000</pubDate>
		<dc:creator>kirk</dc:creator>
		
		<category><![CDATA[Architecture &amp; Design]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[OSGi]]></category>

		<guid isPermaLink="false">http://techdistrict.kirkk.com/2010/02/17/osgi-devcon-preview/</guid>
		<description><![CDATA[I&#8217;ll be at OSGi DevCon next week, having been given the opportunity to present the keynote session on Tuesday. The conference is co-hosted with JAX London. I thought I&#8217;d take a moment before jumping on the flight to offer a preview of what I&#8217;ll be speaking about.
The Cost of Complexity
The title of the session is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be at <a href="http://jaxlondon.com/conferences/OSGiDevCon/">OSGi DevCon</a> next week, having been given the opportunity to present the keynote session on Tuesday. The conference is co-hosted with <a href="http://jaxlondon.com/">JAX London</a>. I thought I&#8217;d take a moment before jumping on the flight to offer a preview of what I&#8217;ll be speaking about.</p>
<h3>The Cost of Complexity</h3>
<p>The title of the session is <a href="http://jaxlondon.com/conferences/trackssessions/?tid=1453#session-13419">OSGi in the Enterprise - Agility, Modularity, and Architecture&#8217;s Paradox</a>. We all know that OSGi isn&#8217;t a new technology. It&#8217;s been around for over a decade. But the recent surge in interest in modularity on the Java platform is overdue. The complexity of software is increasing exponentially. Did you know:</p>
<ul>
<li>In 1990, there were 120 billion lines of code</li>
<li>in 2000, there were 250 billion lines of code</li>
<li>The number of lines of code doubles every 7 years</li>
<li>50% of development time is spent understanding code</li>
<li>90% of software cost is maintenance and evolution</li>
</ul>
<p><a href="http://techdistrict.kirkk.com/wp-content/uploads/2010/02/growthofcode.jpg"><img style="max-width: 800px;" src="http://techdistrict.kirkk.com/wp-content/uploads/2010/02/growthofcode.jpg" alt="" width="167" height="167" /></a></p>
<p>Let&#8217;s put this in perspective using the visual at right (click to enlarge), where we can see that the amount of code doubles every seven years. Pretty staggering! But let&#8217;s put this in perspective for what it means over the course of the next seven years, as well. It means that <strong>between 2010 and 2017, we&#8217;ll produce more code than the total amount of code ever written <em>combined</em>!</strong> That&#8217;s staggering!</p>
<p>I decided to do a bit of research to see if I could find examples that supported these claims. I did:</p>
<ul>
<li>Since the Spring framework was released in 2002, the number of lines of code has grown more than 500% through the release of Spring framework 2.5 in 2008.</li>
<li>FreeBSD contained roughly 8 million lines of code in 2002. In 2009, it was close to 16 million.</li>
<li>In 2004, the Linux Kernel contained approximately 6 million lines of code. In 2009, it was around 12 million.</li>
</ul>
<p>I&#8217;m sure many of us have experienced this phenomenon. Systems tend not to get smaller over time. And we also recognize that in almost every way, larger software systems are inherently more difficult to design, build, manage, and maintain than are smaller software systems.</p>
<p>Yet, such phenomenal growth is desirable. We can only hope that the systems we create are in such high demand that we have the opportunity to grow them over time. A software system that doesn’t change, dies. Evolution is a big deal! As Lehman&#8217;s law suggests:</p>
<blockquote><p>As a system evolves, its complexity increases unless work is done to maintain or reduce it.</p></blockquote>
<p>Add it all up, and there are some key takeaways here. We need something that will help us understand complex systems. We need something that help manage the complexity. We need something that will help ease maintenance. We need something that will help us deal with the natural evolution of software systems. We need something that will allow us deal with the natural architectural shifts that occur as a system grows to accommodate demand. For a long time, a central ingredient has been missing. But not for much longer, because the enterprise will get its OSGi!</p>
<p>For the rest of the story, see you in London.</p>
<p>Source of statistical information above: <a href="http://users.jyu.fi/%7Ekoskinen/smcosts.htm">http://users.jyu.fi/~koskinen/smcosts.htm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://techdistrict.kirkk.com/2010/02/17/osgi-devcon-preview/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Agile: The New Era</title>
		<link>http://techdistrict.kirkk.com/2010/02/10/agile-the-new-era/</link>
		<comments>http://techdistrict.kirkk.com/2010/02/10/agile-the-new-era/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 16:07:21 +0000</pubDate>
		<dc:creator>kirk</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://techdistrict.kirkk.com/2010/02/10/agile-the-new-era/</guid>
		<description><![CDATA[
It&#8217;s housecleaning time again, and like last time, I stumbled across an article I wrote back in 2006 that I don&#8217;t believe ever reached publication (at least, I don&#8217;t think it did&#8230;how am I expected to remember what I did in 2006?). For the most part, I&#8217;ve left it in its original state, except that [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://techdistrict.kirkk.com/wp-content/uploads/2010/02/agilenewera.png"><img style="max-width: 800px;" src="http://techdistrict.kirkk.com/wp-content/uploads/2010/02/agilenewera.png" alt="" width="182" height="110" /></a></p>
<p>It&#8217;s housecleaning time again, <a href="http://techdistrict.kirkk.com/2009/01/22/grass-roots-agile/">and like last time</a>, I stumbled across an article I wrote back in 2006 that I don&#8217;t believe ever reached publication (at least, I don&#8217;t think it did&#8230;how am I expected to remember what I did in 2006?). For the most part, I&#8217;ve left it in its original state, except that I removed the <a href="http://www.agilemanifesto.org/">Agile Manifesto</a> and <a href="http://www.agilemanifesto.org/principles.html">12 supporting principles</a>. There are easily enough found on the Agile Manifesto website, and the article is long enough without this duplication. The <a href="http://www.wordle.net/">wordle</a> at right shows the most common words used in this document (click to enlarge). Here, in it&#8217;s otherwise unadulterated glory, is <em>Agile: A New Era of Software Development</em>.</p>
<h3><em><strong>Agile: A New Era of Software Development</strong></em></h3>
<h3>Embrace Change</h3>
<p>Writing code is easy, but developing software is hard. While syntax errors are common, their severity pales in comparison to the logic flaws inherent in many software systems. The difficulty in software development is not writing code or applying a certain technology stack. Instead, the challenge lies in the specification and design of the software itself.  Therein lies the essential complexity of software development, an idea introduced by Frederick Brooks in his 1987 article titled, “No Silver Bullet” [Brooks]. The most difficult aspect of software development is deciding what, exactly, needs to be built.</p>
<p>There is certainly evidence backing this claim. The original Chaos Report shows the top three impediments to a successful development effort are lack of user input, incomplete requirements and specifications, and changing requirements and specifications [CHAOS]. No other activity, if done incorrectly, stands to compromise the system more than incorrect requirement specifications.</p>
<p>It might not be so difficult were software a concrete entity, existing in a world where we could easily visualize it&#8217;s structure and behavior, allowing us to more reliably assess and share the impact of change. But software is a highly conceptual, invisible construct. It is considered infinitely malleable by those not intimately familiar with the conceptual complexity of it&#8217;s structure and behavior. The contractor building your home would look at you with incredulous disbelief if you suggested that the house he has 90% complete no longer met your needs, and you asked that he move walls. Or imagine how ridiculous it would sound to suggest that a new third floor be inserted to a 100 story skyscraper. Physicists labor on with firm belief that there exist an underlying set of unifying principles to serve as guidance. Or at least, there are laws of physics that we hold to be true. There are no such rules or principles that guide software development. We are left with the imagination and dreams of our clients, and they demand and deserve rapid response to change.</p>
<p>We have made valiant attempts at conformity. Ceremonial processes attempting to define standardized activities that guide the development process have failed, however. We cannot define detailed up-front requirements specifications and expect them to survive the development lifecycle intact. We cannot establish an initial design of the conceptual construct and expect the structure to go unscathed throughout the process of construction. Software development is an error prone human activity involving experts with varying backgrounds and skills who must come together and attempt to communicate uniformly, working as a team toward a common goal. While tools and process do help, we must also accept that change is expected. We cannot treat change as evil. Instead, the tools and process used must allow us to accommodate change, treating it as an inherent part of software development. Changing requirements is a rule of our game. The software we develop must be malleable and adaptive to change, and the process we use must embrace change.</p>
<p>We often draw comparisons between software development and various manufacturing processes. As Larman points out, however, manufacturing is a predictive process [Larman]. Herein lies one of the greatest differences between software development and the manufacturing processes to which we often draw comparisons. Manufacturing is a repeatable activity, with high rates of near-identical creation where a consistent product is produced in assembly line fashion. Little change is expected, making it possible to reliably estimate and predict the outcome. Software development is much more like new product development, where evolutionary specifications and adaptive planning is necessary to deal with the many unknowns that lie ahead.</p>
<h3>Agile Principles</h3>
<p>In early 2001, a small group of industry experts converged in Utah to discuss alternatives to heavy, document driven software development methods. Emerging from this meeting was the Agile Manifesto, a symbolic proclamation endorsing the virtues of a lighter, more flexible, people-oriented approach to software development, giving birth to the agile software development movement. (Since this is already a long article, I&#8217;ve snipped the manifesto and principles, which were included in the original version. If you&#8217;re interested, you can view the manifesto and its 12 principles on the Agile Manifesto website.)</p>
<p align="center"><strong>&lt;Snipped the <a href="http://www.agilemanifesto.org">Manifesto for Agile Software Development</a> and <a href="http://www.agilemanifesto.org/principles.html">12 Principles</a>&gt;</strong></p>
<p>The ideas behind these 12 principles are simple, and contain no hidden messages. Of course, there are different techniques embodied within various agile processes that support these principles. The one certainty is that agile teams definitely work differently from their less agile peers. They recognize there is one end goal - to create a working, functional software product. With that in mind, they work very closely with project stakeholders throughout the development lifecycle, knowing it is the stakeholders who possess the knowledge the system must embody. Agile teams work very hard to deliver working software iteratively and incrementally, and they adopt techniques representative of that ideal.</p>
<p>Agile project managers tend to favor intense communication and collaboration over heavy documentation. Empowering team members to make decisions enables responsiveness to change. Facilitating and negotiating requirements scope provides important feedback, helping plan future iterations, where each iteration produces a deliverable that can be shared with clients and stakeholders. Instead of forcing the team to follow a predictive project plan, agile project managers are more opportunistic. They prioritize features based on stakeholder feedback, and make adjustments as the iterations progress. Concurrent and parallel activities are favored over a phased approach. Agile project managers tend to guide the team instead of manage the team, and strongly discourage unnecessary overhead.</p>
<p>Agile developers work with a similar set of goals, knowing functional software must be delivered early and often. They work judiciously to grow a code base built upon a solid foundation, where each day represents a step forward. They integrate frequently, and do not tolerate failed builds. A rich suite of tests provide the courage necessary to respond to change when the need arises. They avoid the notion of code ownership, empowering other developers to make improvements to any component of the software product.</p>
<p>A common misconception is that agile processes discourage all documentation. This is untrue. Agile processes discourage unnecessary documentation, favoring collaboration as the preferred technique. Instead of using documentation to drive communication, agile processes favor face-to-face communication. Documents are encouraged by agile processes, so long as the need is immediate and significant.</p>
<h3>Transitioning to Agile</h3>
<p>Agile software development is based upon the fundamental premise that we must drive and respond to change quickly. The Agile Manifesto and 12 supporting principles serve this premise well. Advocates of agility claim speedier delivery of software, software with more business value, increased team productivity, higher quality systems, and a more enjoyable development experience. I believe each of these to hold true. Agile teams not only welcome change, they are able to respond to change at all levels of development. A project manager might discuss a changing requirement with a business client, empower a business analyst to schedule a meeting with the client to discuss further details, while a developer assesses the impact of change knowing she has the courage to accommodate the request because of the rich suite of unit tests in place.</p>
<p>Saying you&#8217;ll be more responsive to change and creating an environment that embraces change are separate beasts, however. Practicing agility is hard work, especially if your team is accustomed to more traditional approaches. As with many things new and unfamiliar, some resistance will no doubt arise by those who aren&#8217;t fully convinced. Agile projects differ greatly from their less agile counterparts, and skeptics will have many opportunities to express their discontent. As someone experimenting with agility, you may even have doubts. But don&#8217;t be discouraged, and give your agile transition the time it deserves.</p>
<p>One of the most significant changes you may experience is a feeling that you&#8217;ve been thrust into a chaotic nightmare. I doubt it&#8217;s unusual to feel this way. You&#8217;ve lost the security of detailed requirements specification and user sign-off. You are writing code without the comfort of knowing exactly what your stakeholders want. The detailed plans that have served as your security blanket on past projects no longer exist. And the celebrations accompanying completion of your various phase milestones are gone. Of course, these were all false comforts anyway. Stakeholders always changed their minds. Your detailed requirements and plans were outdated as quickly as they were completed.</p>
<p>Instead, you&#8217;re now working in shorter iterations with vague requirements. Initial releases early in the lifecycle may be completely thrown away. Your first few weeks may seem wasted, with little or no valuable artifacts produced. Naysayers will immediately come forward and cite the lack of progress. Previously, those first few weeks or months were spent producing very detailed requirement specifications and beautiful design models. But don&#8217;t give up yet. In that previous world, you were only delaying risk and postponing integration, avoiding the most difficult aspect of software development until the end of the lifecycle. Now you&#8217;re attacking risk early, prioritizing features, and working hard to develop a functional piece of software as early as possible. Progress may not be at breakneck speeds, but you are learning a tremendous amount about the requirements of the system, and your velocity is sustainable. Additionally, you are also performing a number of other important lifecycle activities.</p>
<p>Depending on the level of ceremony and bureaucracy within your organization, you will experience varying degrees of success when adopting agile techniques. As with any new technology adoption, it&#8217;s best to phase the transition. Some agile techniques are easier to adopt than others, and some serve as valuable catalysts to adopting additional techniques in the future. Don&#8217;t attempt to completely redefine how you work. It&#8217;s relatively easy to phase the agile transition, and you&#8217;ll want to adopt those principles that offer you the greatest initial reward.</p>
<p>For instance, if you&#8217;re struggling to produce quality software at a consistent rate, implementing a continuous integration strategy will help you frequently verify the quality of your work. In addition to the comfort of knowing you have a product always in a functional state, the ability to share the product with clients using functional demos and prototypes will tighten the feedback loop and offer valuable insight to the client&#8217;s perception of the software. In a number of cases, I&#8217;ve found this to be valuable in identifying subtle requirements that can be difficult to identify in other requirements elicitation venues.</p>
<h3>Empirical Evidence</h3>
<p>In recent years, there has been a significant amount of research comparing agile development methods to their waterfall counterpart. In Agile and Iterative Development: A Manager&#8217;s Guide, Craig Larman illustrates the advantage of agile development through detailed analysis of multiple studies[Larman]. The compilation of his results are illustrated below.</p>
<p>A study by Alan MacCormack at Harvard Business School explored whether evolutionary development techniques yielded better results than the waterfall model. The study included applications ranging from application software to embedded systems, with median values of nine developers spanning a 14 month development cycle.</p>
<p>A key conclusion of the study, in which 75% of participants used agile techniques compared to 25% using waterfall, explained releasing software earlier, rather than later, contributed to a lower defect rate and higher productivity. There was little evidence showing that a detailed design specification resulted in a lower defect rate, however, reviews with peers did help in reducing the rate of defects. The study found that iterative and agile practices have a significant impact on defect and productivity factors, as indicated by the following points.</p>
<ul>
<li>Releasing a system with 20% of the functionality complete is associated with a decrease in the defect rate of 10 defects per month per million lines of code as compared to waiting to release a product until 40% of the functionality is complete, and an increase in productivity of eight more lines of source code per person-day.</li>
<li>Continuous Integration, the idea of integrating and testing code as it is released to your source code repository, resulted in a decrease in the defect rate of 13 defects per month per million lines of code, and an increase in productivity of 17 lines of source code per person-day.</li>
</ul>
<p>The study also found four practices that were consistently used by the most successful development teams. The first two are deeply embedded in the ideals of agile software development.</p>
<ul>
<li>Releasing early and often to project stakeholders, using an iterative lifecycle.</li>
<li>Continuous integration, with daily builds including regression testing.</li>
<li>Teams with broad experience delivering multiple projects.</li>
<li>Careful attention to modular and loosely coupled, componentized architectures.</li>
</ul>
<p>In a separate study [Shine], 88% of organizations cited improved productivity when using agile methods, and 84% cited improved productivity. 49% stated that the cost of development was less when using agile methods. Additionally, 83% claimed increased business satisfaction and 26% claimed significantly better satisfaction. Another study by Boehm and Papaccio [Boehm] discovered that a typical project experiences a 25% change in requirements, while yet another [Johnson] showed  that 45% of features were never used.</p>
<p>There have also been many research efforts devoted exclusively to the analysis of waterfall methods. Below is a summary of these findings, taken from a variety of studies.</p>
<ul>
<li>Scope management related to detailed up-front requirements was a significant contributing factor of failure [Thomas].</li>
<li>The U.S. Department of Defense (DoD), when following a waterfall lifecycle, experienced a 75% failure rate [Jarzombek]. This resulted in the DoD adopting a more iterative and agile approach.</li>
<li>On a study including 400 waterfall projects, only 10% of the code was deployed. Only 20% of code deployed was used. The main factors included changing and misunderstood requirements [Cohen].</li>
</ul>
<p>As these studies clearly illustrate, there is significant evidence showing that agile and iterative techniques offer significant advantages over the waterfall model of development. In fact, for larger projects, the statistics supporting agility were even more pronounced.</p>
<h3>Conclusion</h3>
<p>There are a variety of agile processes available to choose from, and each abide by the spirit of the manifesto and it&#8217;s 12 supporting principles. The agile movement and it&#8217;s supporters recognize that software development is a human (though not always humane) activity. Instead of forcing process on people, agile methods allow process conformance to people. Good people, working toward a common goal, can achieve great things will little ceremonial process, assuming you give them an environment that empowers them. Solid empirical evidence backs this claim. And if the quality of people is in question, it&#8217;s doubtful that any process will produce success.</p>
<h3>References</h3>
<ul>
<li>[Alliance]. The Agile Alliance. Manifesto for Agile Software Development. 2001. http://www.agilemanifesto.org</li>
<li>[Boehm]. Boehm, B, and Papaccio, P. Understanding and Controlling Software Costs. IEEE Transaction on Software Engineering. October 1988.</li>
<li>[Brooks]. Brooks, Frederick. No Silver Bullet: Essence and Accidents of Software Engineering. 1987.</li>
<li>[CHAOS]. The Standish Group International, Inc. The CHAOS Report. 1995.</li>
<li>[Cohen]. Cohen, D., Larson, G., and Ware, B. Improving Software Investments through Requirements Validation. IEEE 26th Software Engineering Workshop. 2001.</li>
<li>[Jarzombek]. Jarzombek, J. The 5th Annual JAWS S3 Proceedings. 1999.</li>
<li>[Johnson]. Johnson, J. Keynote speech, XP 2002, Sardinia, Italy. 2002.</li>
<li>[Larman]. Larman, Craig. Agile and Iterative Development: A Manager&#8217;s Guide. Addison-Wesley, 2004.</li>
<li>[MacCormack]. MacCormack, A. Product-Development Practices That Work. MIT Sloan Management Review. 2001.</li>
<li>[Shine]. Corporate Report. Agile Methodologies Survey Results. Shine Technologies Pty Ltd. Victoria, Australia. 2003.</li>
<li>[Thomas]. Thomas, M. IT Projects Sink or Swim. British Computer Society Review. 2001.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://techdistrict.kirkk.com/2010/02/10/agile-the-new-era/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Small Things Matter</title>
		<link>http://techdistrict.kirkk.com/2010/02/03/small-things-matter/</link>
		<comments>http://techdistrict.kirkk.com/2010/02/03/small-things-matter/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 15:55:40 +0000</pubDate>
		<dc:creator>kirk</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://techdistrict.kirkk.com/2010/02/03/small-things-matter/</guid>
		<description><![CDATA[Story of the Concorde
On July 25th, 2000, flight 4590 crashed. It was the first, and only, crash of the famed Concorde. Eventually, it would lead to retirement for the amazing aircraft. Investigators spent countless hours poring over the wreckage, and placed blame on a piece of runway debris that slashed the tire. A piece of [...]]]></description>
			<content:encoded><![CDATA[<h3>Story of the Concorde</h3>
<p>On July 25th, 2000, flight 4590 crashed. It was the first, and only, crash of the famed Concorde. Eventually, it would lead to retirement for the amazing aircraft. Investigators spent countless hours poring over the wreckage, and placed blame on a piece of runway debris that slashed the tire. A piece of that tire struck one of the fuel tanks, causing it to rupture and the plane caught fire. Case closed, right? Not so fast.</p>
<p>Surely a small piece of runway debris shouldn&#8217;t bring down a commercial airliner! As it turns out, there is quite a bit of contention among experts surrounding other factors that may have contributed to the crash. Some argue that it was a complex chain of events, all coming together, that brought down the aircraft. The plane was missing a spacer between the two wheels, had too much fuel in the tank, attempted to takeoff in unstable conditions, and was overweight. The flight was also delayed, causing angst among the flight crew. Finally, a required daily runway inspection was not performed.</p>
<p>Perhaps, if the runway inspection had been performed, the piece of debris would have been spotted. Or had the aircraft not been overfueled, the piece of tire may not have caused an increase in fuel tank pressure that some say caused the tank to burst. Had the spacer been installed, it&#8217;s possible the tire would have never burst. A series of small events, each contributing in their own way, to the fatal crash.</p>
<h3>No Matter How Small</h3>
<p>The story reminds me of the importance of attention to detail in software development. Of how the aggregate of all of the small, seemingly insignificant decisions we make on a continuous basis can have long-term consequences on the future of the software system. Possibly even your organization. Every time you design a class, define a variable, write a test, create a package, build a module, modify a method, or make a design decision, you are affecting the future of your system in some unsuspecting way.</p>
<p>What may seem insignificant today, can have a detrimental affect tomorrow. Really, there are no small, insignificant decisions in software development. I&#8217;m reminded of how important it is to make conscious decisions that are given careful thought, no matter how small. It also <a href="http://www.testearly.com/2007/08/07/for-want-of-a-nail/">reminded me of a poem</a> on build automation and continuous integration that I read a while back on the Test Early blog.</p>
<blockquote><p>FOR WANT OF A BUILD</p>
<p>For want of a build, a test case was not executed<br />
For want of test case, a defect was not detected<br />
For want of a defect report, a bad release was promoted<br />
For want of a good release, a strategic customer was lost<br />
For want of a customer, a development team was reduced<br />
For want of developers, a product stagnated<br />
For want of a product, a company was lost<br />
And all for the want of a build…</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://techdistrict.kirkk.com/2010/02/03/small-things-matter/feed/</wfw:commentRss>
		</item>
		<item>
		<title>3 Pillars of Architecture</title>
		<link>http://techdistrict.kirkk.com/2010/01/27/3-pillars-of-architecture/</link>
		<comments>http://techdistrict.kirkk.com/2010/01/27/3-pillars-of-architecture/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 16:42:39 +0000</pubDate>
		<dc:creator>kirk</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Architecture &amp; Design]]></category>

		<guid isPermaLink="false">http://techdistrict.kirkk.com/2010/01/27/3-pillars-of-architecture/</guid>
		<description><![CDATA[I&#8217;ve spent some time thinking a bit more deeply about a few of my recent posts on software architecture, and have come to the following revelation.

Architects architect architecture!
Don&#8217;t let the triviality of this statement undermine its depth. While each of the three words are variations of the same thing, each have different contextual meaning. Let&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://techdistrict.kirkk.com/wp-content/uploads/2009/12/3pillars1.png"><img style="max-width: 800px;" src="http://techdistrict.kirkk.com/wp-content/uploads/2009/12/3pillars1.png" alt="" width="181" height="145" /></a>I&#8217;ve spent some time thinking a bit more deeply about a few of my recent posts on software architecture, and have come to the following revelation.<strong><br />
</strong></p>
<p align="center"><em><strong>Architects architect architecture!</strong></em></p>
<p align="left">Don&#8217;t let the triviality of this statement undermine its depth. While each of the three words are variations of the same thing, each have different contextual meaning. Let&#8217;s tease the statement apart to see what I mean.</p>
<ul>
<li><strong>Architects</strong> - Humans create software architecture, and for architecture to be effective, we must also be able to understand the architecture. In <a href="http://techdistrict.kirkk.com/2009/09/08/eliminate-architecture/">Eliminate Architecture</a>, I cited a definition of architecture that introduces the social dimension. <strong>Architects signify the social pillar.</strong></li>
<li><strong>Architect</strong> - The way we arrive at architecture is through some process or series of steps. We might create diagrams or software architecture documents. We might write a little code (proofs, spikes, prototypes) to determine the viability of architecture. There are many different activities we perform as we create the architecture. <strong>Architect signifies the process pillar. </strong></li>
<li><strong>Architecture</strong> - In <a href="http://techdistrict.kirkk.com/2009/09/16/modularity-architecture/">Modularity and Architecture</a>, I offered up a few industry definitions of architecture. Common keywords that span definitions include components, composition, interfaces, subsystems, and structure. <strong>Architecture signifies the technology pillar.</strong></li>
</ul>
<p>To ensure balance, we must give attention to each of the three pillars. Additionally, each pillar is related to the other. For instance, ignoring the social pillar impacts the other two in unexpected ways.</p>
<h3>The Social Pillar</h3>
<p align="left"><a href="http://techdistrict.kirkk.com/wp-content/uploads/2010/01/architecture-the-social-aspect2.jpg"><img style="max-width: 800px;" src="http://techdistrict.kirkk.com/wp-content/uploads/2010/01/architecture-the-social-aspect2.jpg" alt="" width="238" height="119" /></a><a href="http://techdistrict.kirkk.com/2009/11/03/turtles-and-architecture/">Turtles and Architecture</a> generally focused on the social pillar of software architecture, but also talked a bit about how the technology pillar can increase understanding, visibility, and transparency. The general sentiment is that architects must focus on more than just concepts and developers must focus on more than just code. There is a middle ground that demands attention, as well.</p>
<p align="left">I used a visual similar to what&#8217;s at right (click to enlarge) to illustrate the middle ground. It also illustrates how aspects of the technology pillar can help increase understanding and transparency of architecture. Increased understanding of the architecture hopefully leads to improved structural quality (technology pillar) and transparency of the process (process pillar).</p>
<h3>The Technology Pillar</h3>
<p><a href="http://techdistrict.kirkk.com/wp-content/uploads/2010/01/architecture-the-technical-aspect2.jpg"><img style="max-width: 800px;" src="http://techdistrict.kirkk.com/wp-content/uploads/2010/01/architecture-the-technical-aspect2.jpg" alt="" width="245" height="165" /></a><a href="http://techdistrict.kirkk.com/2009/12/15/architecture-all-the-way-down/">Architecture All the Way Down</a> primarily focused on the technology pillar. The visual at right (click to enlarge) illustrates this view. Again, we see the huge gap that exists if we fail to emphasize the importance of modularity. The rightmost portion illustrates how modularity fills the gap - architecture all the way down. Of course, other gaps are also created if we ignore any of the other aspects, such as class design. Note that as we move from services to modules to packages and classes, we increase the granularity along the way. Our classes should not be as fine-grained as our modules, nor our modules as fine-grained as our services.</p>
<p>Additionally, each entity solves a different type of problem (or provides a different type of advantage), as illustrated by the bars at the bottom. All are units of composition, but only services and modules are units of deployment. Services are reused through distributed computing, whereas module reuse is constrained by process boundaries. The technology pillar affects the other pillars. An inflexible rigid architecture makes it difficult for people to understand and communicate (social pillar) and inhibits how quickly we&#8217;re able to respond to change (process pillar).</p>
<h3>The Process Pillar</h3>
<p><a href="http://techdistrict.kirkk.com/wp-content/uploads/2010/01/architecture-the-process-aspect.jpg"><img style="max-width: 800px;" src="http://techdistrict.kirkk.com/wp-content/uploads/2010/01/architecture-the-process-aspect.jpg" alt="" width="239" height="141" /></a>The process pillar is one that I&#8217;ve not spent much time discussing. Certainly, it&#8217;s important though, and includes various aspects like deferring commitment to significant architectural decisions, evolutionary and emergent architecture, and reversibility. The visual at right illustrates the process pillar (click to enlarge). It&#8217;s not as descriptive as the other diagrams, I admit.  Anyone have something better that illustrates the process pillar?</p>
<p>I did talk a little about these ideas in <a href="http://techdistrict.kirkk.com/2009/09/22/agile-architecture-lean-principles/">Agile Architecture, Lean Principles</a>. But certainly more needs to be fleshed out surrounding the process pillar. This tends to be where most spend their time when discussing agile architecture, but the other pillars are certainly important. The process pillar affects the other pillars. A bad process accompanied by bad practices results in an inflexible architecture (technology pillar) that noone is able to understand (social pillar).</p>
]]></content:encoded>
			<wfw:commentRss>http://techdistrict.kirkk.com/2010/01/27/3-pillars-of-architecture/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Update on Java Modularity</title>
		<link>http://techdistrict.kirkk.com/2010/01/22/update-on-java-modularity/</link>
		<comments>http://techdistrict.kirkk.com/2010/01/22/update-on-java-modularity/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 15:43:05 +0000</pubDate>
		<dc:creator>kirk</dc:creator>
		
		<category><![CDATA[Architecture &amp; Design]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[OSGi]]></category>

		<guid isPermaLink="false">http://techdistrict.kirkk.com/2010/01/22/update-on-java-modularity/</guid>
		<description><![CDATA[For those that follow this blog, but not the APS blog, I&#8217;ve just published a synopsis of modularity on the Java platform. With a lot of momentum continuing to build around OSGi, we&#8217;re still in a state of limbo surrounding a standard module system on the Java platform. Some might argue that OSGi has already [...]]]></description>
			<content:encoded><![CDATA[<p>For those that follow this blog, but not the <a href="http://apsblog.burtongroup.com">APS blog</a>, I&#8217;ve just <a href="http://bit.ly/6INCZp">published a synopsis</a> of modularity on the Java platform. With a lot of momentum continuing to build around OSGi, we&#8217;re still in a state of limbo surrounding a standard module system on the Java platform. Some might argue that OSGi has already won - it is the defacto standard module system. Possibly.</p>
<p>Oracle has offered us very little direction on their future plans. There was little fanfare surrounding WebLogic dm Server, with only <a href="http://www.eisele.net/blog/2009/10/preview-weblogic-dm-server-weblogic.html">sparse references</a> and no official word from Oracle. I&#8217;m hopeful we can expect to hear some news of the direction they intend to take in their <a href="http://blogs.oracle.com/otn/2010/01/join_larry_ellison_at_a_live_w.html">upcoming webcast</a>, though I&#8217;m not expecting them to make any significant statements at such a fine level of technical detail. Coincidentally, <a href="http://www.engadget.com/2010/01/04/major-apple-announcement-coming-january-27th-devs-already-wor/">Apple is holding their own event that very same day</a>, and is expected to announce their new tablet. Let your imagination run wild. Those two events should make for a very exciting day.</p>
<p>Regardless, I&#8217;ve had quite a few conversations over the past several months surrounding modularity and OSGi. I have my suspicions on Oracle&#8217;s intent, though am reticent to share at this time. Read the APS post titled, <a href="http://bit.ly/6INCZp">Java Modularity - Time to Set Sail</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://techdistrict.kirkk.com/2010/01/22/update-on-java-modularity/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
