<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Evolutionary Software Architecture or Why Developers Are Not Janitors</title>
	<atom:link href="http://softwarecreation.org/2007/evolutionary-software-architecture-or-why-developers-are-not-janitors/feed/" rel="self" type="application/rss+xml" />
	<link>http://softwarecreation.org/2007/evolutionary-software-architecture-or-why-developers-are-not-janitors/</link>
	<description>What are the forces behind software development?</description>
	<lastBuildDate>Thu, 25 Feb 2010 21:05:09 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Andriy Solovey</title>
		<link>http://softwarecreation.org/2007/evolutionary-software-architecture-or-why-developers-are-not-janitors/comment-page-1/#comment-12502</link>
		<dc:creator>Andriy Solovey</dc:creator>
		<pubDate>Sat, 18 Oct 2008 01:20:10 +0000</pubDate>
		<guid isPermaLink="false">http://softwarecreation.org/2007/evolutionary-software-architecture-or-why-developers-are-not-janitors-or-prima-donnas/#comment-12502</guid>
		<description>Chris,

Thank you for your excellent comment. Here is what I think.

1. The complex system for a software project includes almost everything: people, software application, technology, process, environment and customer&#039;s needs. This system can exhibit self organization and produce optimal results and avoid unlimited trials. Some arguments:
 * fitness criteria and constraints (time, money, requirements) substantially reduce range of acceptable system states
 * software development best practices, empirical theories and approaches (e.g. Agile) help with selection of optimal states and strategies
 * software team can experience short cycles within one project that allow to learn, adopt and move to the new better states before the project finish

2. Yes, I believe developers should make implementation decisions. Developers don&#039;t work in isolation. Cohesiveness of the application will be not impacted if
 * developers frequently synchronize their ideas with customers and adjust based on feedback and overall concepts (evolved together)
 * the application subsystems continuously integrated and tested as the whole that quickly spots misalignments and conflicts
 * developers constantly interact, brainstorm and pair to find the optimal solutions for the subsystems and the application

3. Emergence in the software project system means appearance of the previously unobserved behavior, roles, ideas and even goals based on interaction of active elements (people) with passive (project needs, methods, technology, domain, the developed application) and external world. It is simplified interpretation, but I think it is not too far from Wikipedia definition.

Does it make sense?</description>
		<content:encoded><![CDATA[<p>Chris,</p>
<p>Thank you for your excellent comment. Here is what I think.</p>
<p>1. The complex system for a software project includes almost everything: people, software application, technology, process, environment and customer&#8217;s needs. This system can exhibit self organization and produce optimal results and avoid unlimited trials. Some arguments:<br />
 * fitness criteria and constraints (time, money, requirements) substantially reduce range of acceptable system states<br />
 * software development best practices, empirical theories and approaches (e.g. Agile) help with selection of optimal states and strategies<br />
 * software team can experience short cycles within one project that allow to learn, adopt and move to the new better states before the project finish</p>
<p>2. Yes, I believe developers should make implementation decisions. Developers don&#8217;t work in isolation. Cohesiveness of the application will be not impacted if<br />
 * developers frequently synchronize their ideas with customers and adjust based on feedback and overall concepts (evolved together)<br />
 * the application subsystems continuously integrated and tested as the whole that quickly spots misalignments and conflicts<br />
 * developers constantly interact, brainstorm and pair to find the optimal solutions for the subsystems and the application</p>
<p>3. Emergence in the software project system means appearance of the previously unobserved behavior, roles, ideas and even goals based on interaction of active elements (people) with passive (project needs, methods, technology, domain, the developed application) and external world. It is simplified interpretation, but I think it is not too far from Wikipedia definition.</p>
<p>Does it make sense?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris Duesing</title>
		<link>http://softwarecreation.org/2007/evolutionary-software-architecture-or-why-developers-are-not-janitors/comment-page-1/#comment-10088</link>
		<dc:creator>Chris Duesing</dc:creator>
		<pubDate>Tue, 26 Aug 2008 23:59:18 +0000</pubDate>
		<guid isPermaLink="false">http://softwarecreation.org/2007/evolutionary-software-architecture-or-why-developers-are-not-janitors-or-prima-donnas/#comment-10088</guid>
		<description>I find this article extremely interesting, and I have some questions and comments. First, my background in this area is previous study and development of complex systems, primarily in the area of agent based systems, with a little exposure to genetic algorithms. I quickly read the Self-Organizing Systems FAQ you linked, but I found some discrepancies with my previous understanding of complex systems, particularly regarding emergence. I took a look at Wikipedia, and found it to be more in line with my understanding of these concepts. 
&lt;a href=&quot;http://en.wikipedia.org/wiki/Self_organizing_system&quot; rel=&quot;nofollow&quot;&gt;Self Organizing Systems&lt;/a&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Emergence&quot; rel=&quot;nofollow&quot;&gt;Emergence&lt;/a&gt;

Perhaps you can point out what is fundamentally different between these definitions? I am particularly uncomfortable with the FAQ&#039;s claim that an engine is an emergent system. An engine is not a collection of self controlling components, and it is not self organizing. It is a designed system of components specifically configured for one purpose.

I was similarly confused by what you were proposing. I am unclear whether you were saying the software, the development process or the developers themselves were the components of a complex system? The software itself seemed the least likely, as the engine analogy holds true here as well. While each unit of code can potentially be used in multiple places, the overall structure of the software is designed. It is meant to have one set of functionality, and if through emergence it displays other behavior that should be considered a bug. 

If you are referring to the latter options then I would say that, as my understanding goes, self organizing systems fitness is based on iterative attempts. In agent based software this is simple rules for agents and the results when introduced to an environment in large numbers. In genetic algorithms this requires many &#039;generations&#039; of attempts to solve a problem. If these concepts are carried over to software development then perhaps I would agree that a nearly unlimited arrangement of software development teams over a period of time would produce many versions of an application, some of which would be better than an architected counterpart. However, while this model may exist to some degree in systems such as Linux features, it is not in practice or even arguably cost efficient within a single organization. 

You seem to make the point that each developer should decide how to implement their own subsystem. I do not subscribe to the theory that architecture removes decision making from the developer&#039;s duties, but to the one that an architecture is an overarching set of constraints that directs the development of the software. An architect would for example; choose an OS, programming language, hardware, database and perhaps software framework or design patterns. If each developer on the team was not so constrained, it would be extremely difficult to produce a cohesive application. In many long standing teams such things are foregone conclusions, but that does not mean the decision was not made.</description>
		<content:encoded><![CDATA[<p>I find this article extremely interesting, and I have some questions and comments. First, my background in this area is previous study and development of complex systems, primarily in the area of agent based systems, with a little exposure to genetic algorithms. I quickly read the Self-Organizing Systems FAQ you linked, but I found some discrepancies with my previous understanding of complex systems, particularly regarding emergence. I took a look at Wikipedia, and found it to be more in line with my understanding of these concepts.<br />
<a href="http://en.wikipedia.org/wiki/Self_organizing_system" rel="nofollow">Self Organizing Systems</a><br />
<a href="http://en.wikipedia.org/wiki/Emergence" rel="nofollow">Emergence</a></p>
<p>Perhaps you can point out what is fundamentally different between these definitions? I am particularly uncomfortable with the FAQ&#8217;s claim that an engine is an emergent system. An engine is not a collection of self controlling components, and it is not self organizing. It is a designed system of components specifically configured for one purpose.</p>
<p>I was similarly confused by what you were proposing. I am unclear whether you were saying the software, the development process or the developers themselves were the components of a complex system? The software itself seemed the least likely, as the engine analogy holds true here as well. While each unit of code can potentially be used in multiple places, the overall structure of the software is designed. It is meant to have one set of functionality, and if through emergence it displays other behavior that should be considered a bug. </p>
<p>If you are referring to the latter options then I would say that, as my understanding goes, self organizing systems fitness is based on iterative attempts. In agent based software this is simple rules for agents and the results when introduced to an environment in large numbers. In genetic algorithms this requires many &#8216;generations&#8217; of attempts to solve a problem. If these concepts are carried over to software development then perhaps I would agree that a nearly unlimited arrangement of software development teams over a period of time would produce many versions of an application, some of which would be better than an architected counterpart. However, while this model may exist to some degree in systems such as Linux features, it is not in practice or even arguably cost efficient within a single organization. </p>
<p>You seem to make the point that each developer should decide how to implement their own subsystem. I do not subscribe to the theory that architecture removes decision making from the developer&#8217;s duties, but to the one that an architecture is an overarching set of constraints that directs the development of the software. An architect would for example; choose an OS, programming language, hardware, database and perhaps software framework or design patterns. If each developer on the team was not so constrained, it would be extremely difficult to produce a cohesive application. In many long standing teams such things are foregone conclusions, but that does not mean the decision was not made.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
