<?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>The Next Big Thing</title>
	<atom:link href="http://modularity.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://modularity.wordpress.com</link>
	<description>In search of better software development</description>
	<lastBuildDate>Sat, 27 May 2006 09:34:56 +0000</lastBuildDate>
	<language></language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='modularity.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>The Next Big Thing</title>
		<link>http://modularity.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://modularity.wordpress.com/osd.xml" title="The Next Big Thing" />
	<atom:link rel='hub' href='http://modularity.wordpress.com/?pushpress=hub'/>
		<item>
		<title>This Blog has moved..</title>
		<link>http://modularity.wordpress.com/2006/05/27/this-blog-has-moved/</link>
		<comments>http://modularity.wordpress.com/2006/05/27/this-blog-has-moved/#comments</comments>
		<pubDate>Sat, 27 May 2006 09:34:56 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://modularity.wordpress.com/2006/05/27/this-blog-has-moved/</guid>
		<description><![CDATA[All future posts may now be found at: &#160;http://blogs.modularity.net.au/thenextbigthing<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=modularity.wordpress.com&amp;blog=8129&amp;post=17&amp;subd=modularity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>All future posts may now be found at:</p>
<p>&nbsp;<a href="http://blogs.modularity.net.au/thenextbigthing">http://blogs.modularity.net.au/thenextbigthing</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/modularity.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/modularity.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/modularity.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/modularity.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/modularity.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/modularity.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/modularity.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/modularity.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/modularity.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/modularity.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/modularity.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/modularity.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/modularity.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/modularity.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/modularity.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/modularity.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=modularity.wordpress.com&amp;blog=8129&amp;post=17&amp;subd=modularity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://modularity.wordpress.com/2006/05/27/this-blog-has-moved/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/60a652cd4019e66bd716442c6393717d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">modularity</media:title>
		</media:content>
	</item>
		<item>
		<title>Future-proofing Software</title>
		<link>http://modularity.wordpress.com/2005/10/24/future-proofing-software/</link>
		<comments>http://modularity.wordpress.com/2005/10/24/future-proofing-software/#comments</comments>
		<pubDate>Mon, 24 Oct 2005 05:21:55 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://modularity.wordpress.com/2005/10/24/future-proofing-software/</guid>
		<description><![CDATA[In the search for methodologies and patterns that help to build better quality software, we find that our methods continue to evolve at a blistering pace. Whether its the leap from procedural to object-oriented design, or the difference between the waterfall and prototyping approaches, all share the common goal of building robust, complex software systems. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=modularity.wordpress.com&amp;blog=8129&amp;post=10&amp;subd=modularity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In the search for methodologies and patterns that help to build better quality software, we find that our methods continue to evolve at a blistering pace. Whether its the leap from procedural to object-oriented design, or the difference between the waterfall and prototyping approaches, all share the common goal of building robust, complex software systems. Whilst many great advances continue to be made, one thing that eludes us in the search for the perfect development strategy is how to future-proof a software architecture. We like to think that we will have all the requirements and intended uses of the software prior to design and implementation. In reality however, this is almost never the case. Requirements change, focus shifts, often to the point that the final requirements bear little resemblance to those the original design was based on. Ultimately a good design should be able to handle such a shift in requirements, however even the best designs will not cope with a major refactoring of the intended uses of a system.</p>
<p>So how can we protect our software designs from such a seachange in required functionality? In addition to accepted practices and methodologies, we should try to incorporate the following principles into our architecture:</p>
<ul>
<li><b>Think Small</b> Usually when we design architectures the components tend to be large and provide support for a multitude of features. It is not uncommon to even have a single component representing the front end, back end, or business rules of a system. Combined with the principle that a good design will explicitly identify each component&#8217;s roles and responsibilities, we find our components are too rigid and not really amenable to changes in these roles and responsibilities. The solution to this problem is to build smaller, more specific components. Rather than components handling many different tasks, we should design the architecture in such a way that each component is responsible for handling a single task. Such tasks may include support for a specific protocol or data format, a service used to access an external or legacy system, or even data structures specific to a particular feature in the system. The important thing to remember is that a component should only handle a single task rather than a collection of them as is the popular approach.</li>
</ul>
<ul>
<li><b>Separate APIs from Implementation</b> Another recognised good practice is the use of <i>Interfaces</i> when designing an API allowing components to communicate with each other. By using interfaces we are effectively defining the contract a component holds with the rest of the system, irregardless of the implementation details. Whilst this allows us to provide alternate implementations of the API without further changes to external components, we still generally need to provide an entirely new version of a component &#8211; even if the API itself has not changed. Although the API is not bound by the implementation, usually the entire API (interfaces and implementation) are bundled together anyway. The solution then is to separate the API definition from the implementation and provide them as two distinct components. By doing this the API specification does not require updating where only the implementation requires changes. Additionally, alternative implementations of the API may also be deployed independently, thus maximising the possible re-use of a component API.</li>
</ul>
<ul>
<li><b>Loose Coupling</b> A major contributing factor to the complexity of software are the dependencies each component has on its peers. Aside from the careful design decisions required to ensure no two components are dependent on each other (i.e. cyclic dependencies), typically where even a single dependency is not resolved the entire system will fail. To avoid architectures easily susceptible to such a catastrophic failure we need to maximise decoupling of components. This does not necessarily equate to minimising dependencies across components, but rather is more concerned with ensuring that such dependencies impose as little restrictions as possible. This is the promise of Loose Coupling, whereby individual components may operate independently or as a part of a larger system constructed of similarly loosely coupled components. One popular approach to incorporating Loose Coupling in software design is the Inversion Of Control pattern (also known as Dependency Injection). A number of frameworks based on the Inversion Of Control pattern are now available, which assist in the &#8220;wiring together&#8221; of individual components to construct a complete system. This encourages greater encapsulation in components and simplifies other aspects of quality assurance such as unit testing.</li>
</ul>
<p>By adhering to these principles we are able to design software that can adapt to just about any change in direction required of it. No longer do we need to throw away an entire system and start from scratch, as we will be able to incrementally upgrade and replace individual components without detriment to the rest of the system. This approach also enables us to extend the functionality of the system by &#8220;wiring in&#8221; new components as required. Best of all, these principles ensure that the software architecture is built from clearly defined design contracts and encourages maximim re-use.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/modularity.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/modularity.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/modularity.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/modularity.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/modularity.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/modularity.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/modularity.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/modularity.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/modularity.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/modularity.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/modularity.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/modularity.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/modularity.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/modularity.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/modularity.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/modularity.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=modularity.wordpress.com&amp;blog=8129&amp;post=10&amp;subd=modularity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://modularity.wordpress.com/2005/10/24/future-proofing-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/60a652cd4019e66bd716442c6393717d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">modularity</media:title>
		</media:content>
	</item>
		<item>
		<title>Open Source drives innovation</title>
		<link>http://modularity.wordpress.com/2005/10/23/open-source-drives-innovation/</link>
		<comments>http://modularity.wordpress.com/2005/10/23/open-source-drives-innovation/#comments</comments>
		<pubDate>Sun, 23 Oct 2005 05:56:12 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://modularity.wordpress.com/2005/10/23/open-source-drives-innovation/</guid>
		<description><![CDATA[The Open Source movement has long been associated with socialist ideals such as communism &#8211; typically by companies who see Open Source as a threat to their own business. The irony is that driving factors behind Open Source are the very reason they even have a business. In the consumer software industry the quality of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=modularity.wordpress.com&amp;blog=8129&amp;post=9&amp;subd=modularity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The Open Source movement has long been associated with socialist ideals such as communism &#8211; typically by companies who see Open Source as a threat to their own business. The irony is that driving factors behind Open Source are the very reason they even have a business.</p>
<p>In the consumer software industry the quality of software has not been the primary differentiating factor in consumer choice. As end-users we cannot see how a software title was built, what development patterns were employed, or even what language was used to build it. More importantly we cannot see how many unresolved bugs there are, for which we leave it to the discretion of the software developer to inform us (if they are even aware themselves!).</p>
<p>And so in the absence of a qualitative analysis of software (excluding user interface design), we must rely on a quantitative assessment, or a comparison of features. Software features have come to be known as <em>innovation</em> in the software industry, possibly as it conveys some kind of magical ability to invent something entirely new. In reality much of this <em>innovation</em> is not in fact entirely new, but rather a rehash of old ideas or, more likely, a feature copied from someone else. Now contrary to so much of the discussion surrounding software, there is nothing at all wrong with this. In fact it is in the very nature of software development to recognise a good idea and re-use it. Perhaps it is the common approach of claiming <em>innovation</em>, without due credit to the originator of the idea that creates so much hostility. Whatever the cause of this slightly misguided animosity, we should not deny that re-use of <em>innovation</em>, whether it be an idea or an actual implementation, is an integral part of software development.</p>
<p>Recognising that features are the differentiating factor in software, many companies have adopted a two-fold approach of adding as many features as possible, and protecting those features from getting into the hands of the competition. Now of course noone can stop another from reimplementing a feature found in competing software (although they do try!), but you can protect your own implementation, which at the very least makes it more difficult for others to duplicate. Or at least it used to. Nowadays we find large companies have vast teams of developers that can implement anything that you ask for. The hard part is knowing what you want to implement, and when all else fails, just look to a competitor for inspiration.</p>
<p>So whilst this feature arms-race continues amongst the largest companies, we see the intended effects of feature dominance becoming more neutralised. There is however another, possibly unintended, effect, which is that smaller companies and individuals are becoming increasingly locked out of the competition. If you cannot afford an army of programmers to keep up with the feature sets of the most popular software, how will you ever compete in a feature-dominated industry?</p>
<p>In the face of such marginalisation many have now put their faith in Open Source. Open Source provides individuals and smaller companies with that &#8220;army of programmers&#8221; needed to compete with the larger companies. But perhaps a more interesting aspect of Open Source is that it does not discriminate. The largest of companies are also able to incorporate Open Source software into their business model, which then begs the question, is Open Source really changing anything? To which the answer is an emphatic yes. If Open Source software is able to keep up with the feature arms-race of the largest companies, putting such features in the hands of everyone, there will no longer be a feature arms-race, or at least not on the scale that it is today.</p>
<p>So what does this mean for the future of software? Well for a start it means less emphasis on features, leaving room for a more qualitative analysis of software. Aside from giving equal access to feature implementations, another driving factor of Open Source is the qualitative analysis that goes with it. As financial reward is less of a concern when developing Open Source, we place greater emphasis on writing better code, so as to gain the reward of respect, recognition and popularity of our software. With quality being such a major emphasis of Open Source, proprietary software developers will be compelled to prove a similar quality of software in order to compete.</p>
<p>Some larger companies have suggested that by neutralising their competitive edge through feature dominance, Open Source is stifling <em>innovation</em>. On the contrary, by giving everyone a level playing field Open Source has once again made it possible for anyone to <em>innovate</em>. These larger companies seem to have the idea that they are the leaders of the industry and as such should be responsible for all <em>innovation</em>. In reality, as we are shown time and again, real <em>innovation</em> in software comes from individuals, not from task groups and think tanks. Such individuals may work for large companies, small companies or no company at all. Wherever they may be, we cannot force, or even predict, who will <em>innovate</em> next. All we can do is create the best possible environment for encouraging such <em>innovation</em>, and the best possible environment today includes Open Source. </p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/modularity.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/modularity.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/modularity.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/modularity.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/modularity.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/modularity.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/modularity.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/modularity.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/modularity.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/modularity.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/modularity.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/modularity.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/modularity.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/modularity.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/modularity.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/modularity.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=modularity.wordpress.com&amp;blog=8129&amp;post=9&amp;subd=modularity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://modularity.wordpress.com/2005/10/23/open-source-drives-innovation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/60a652cd4019e66bd716442c6393717d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">modularity</media:title>
		</media:content>
	</item>
	</channel>
</rss>
