<?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: Hallmarks of Good System Design</title>
	<atom:link href="http://lostechies.com/marcusbratton/2009/02/26/hallmarks-of-good-system-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://lostechies.com/marcusbratton/2009/02/26/hallmarks-of-good-system-design/</link>
	<description>Just another LosTechies site</description>
	<lastBuildDate>Mon, 07 May 2012 07:05:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
	<item>
		<title>By: Hippy</title>
		<link>http://lostechies.com/marcusbratton/2009/02/26/hallmarks-of-good-system-design/#comment-32</link>
		<dc:creator>Hippy</dc:creator>
		<pubDate>Thu, 05 Mar 2009 06:40:06 +0000</pubDate>
		<guid isPermaLink="false">/blogs/marcus_bratton/archive/2009/02/26/hallmarks-of-good-system-design.aspx#comment-32</guid>
		<description>I would add:

&quot;The domain model of the design should be easily recognizable to a domain expert.&quot;

The idea I am trying to get across is similar in tone to &quot;Functionality is easily consumed,&quot; but this time from a more abstract domain expert&#039;s point of view.  If an expert in the problem domain can&#039;t understand your design (i.e. the basic concepts represented in your code), then how can you be sure you&#039;re solving their problem?  How do you communicate between each other?  At some level your design should also feel natural when used in providing a solution to any necessary use case as defined by the the domain expert.  

I think you could write a piece of software that meets or exceeds everything you listed above that still doesn&#039;t satisfactorily address a problem your customers care about; thus, this last piece of the puzzle.</description>
		<content:encoded><![CDATA[<p>I would add:</p>
<p>&#8220;The domain model of the design should be easily recognizable to a domain expert.&#8221;</p>
<p>The idea I am trying to get across is similar in tone to &#8220;Functionality is easily consumed,&#8221; but this time from a more abstract domain expert&#8217;s point of view.  If an expert in the problem domain can&#8217;t understand your design (i.e. the basic concepts represented in your code), then how can you be sure you&#8217;re solving their problem?  How do you communicate between each other?  At some level your design should also feel natural when used in providing a solution to any necessary use case as defined by the the domain expert.  </p>
<p>I think you could write a piece of software that meets or exceeds everything you listed above that still doesn&#8217;t satisfactorily address a problem your customers care about; thus, this last piece of the puzzle.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ajai</title>
		<link>http://lostechies.com/marcusbratton/2009/02/26/hallmarks-of-good-system-design/#comment-31</link>
		<dc:creator>Ajai</dc:creator>
		<pubDate>Fri, 27 Feb 2009 22:06:05 +0000</pubDate>
		<guid isPermaLink="false">/blogs/marcus_bratton/archive/2009/02/26/hallmarks-of-good-system-design.aspx#comment-31</guid>
		<description>Good stuff Marcus - lots of food (sprees) for thought...

Everything is easily understandable &amp; maintainable till we write that first line of code!

I still like &#039;cool&#039; though :-)</description>
		<content:encoded><![CDATA[<p>Good stuff Marcus &#8211; lots of food (sprees) for thought&#8230;</p>
<p>Everything is easily understandable &#038; maintainable till we write that first line of code!</p>
<p>I still like &#8216;cool&#8217; though <img src='http://lostechies.com/marcusbratton/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mbratton</title>
		<link>http://lostechies.com/marcusbratton/2009/02/26/hallmarks-of-good-system-design/#comment-30</link>
		<dc:creator>mbratton</dc:creator>
		<pubDate>Thu, 26 Feb 2009 17:14:43 +0000</pubDate>
		<guid isPermaLink="false">/blogs/marcus_bratton/archive/2009/02/26/hallmarks-of-good-system-design.aspx#comment-30</guid>
		<description>@Tom

I think that could make a whole new blog post, but to give you a brief idea, you might look at this guy&#039;s blog post: http://weblogs.asp.net/sfeldman/archive/2009/02/08/switching-ioc-container-with-linq-expressions.aspx

Basically abstract and encapsulate, keep your dependencies on you 3rd party IoC to a minimum and use your own abstraction as much as possible.

@Frank

I draw a distinction between entry level and junior (not all places do) and consider junior developers capable of at least reading and grasping code -- of course it&#039;s always a trade-off between complexity and intuitive design, but I believe you should only make it as complex as it has to be, and as intuitive as possible.</description>
		<content:encoded><![CDATA[<p>@Tom</p>
<p>I think that could make a whole new blog post, but to give you a brief idea, you might look at this guy&#8217;s blog post: <a href="http://weblogs.asp.net/sfeldman/archive/2009/02/08/switching-ioc-container-with-linq-expressions.aspx" rel="nofollow">http://weblogs.asp.net/sfeldman/archive/2009/02/08/switching-ioc-container-with-linq-expressions.aspx</a></p>
<p>Basically abstract and encapsulate, keep your dependencies on you 3rd party IoC to a minimum and use your own abstraction as much as possible.</p>
<p>@Frank</p>
<p>I draw a distinction between entry level and junior (not all places do) and consider junior developers capable of at least reading and grasping code &#8212; of course it&#8217;s always a trade-off between complexity and intuitive design, but I believe you should only make it as complex as it has to be, and as intuitive as possible.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Frank Quednau</title>
		<link>http://lostechies.com/marcusbratton/2009/02/26/hallmarks-of-good-system-design/#comment-29</link>
		<dc:creator>Frank Quednau</dc:creator>
		<pubDate>Thu, 26 Feb 2009 10:34:01 +0000</pubDate>
		<guid isPermaLink="false">/blogs/marcus_bratton/archive/2009/02/26/hallmarks-of-good-system-design.aspx#comment-29</guid>
		<description>Hm....concepts like &quot;abstraction, encapsulation and dependency inversion work&quot; are in my experience not readily accessible to junior developers. A system that makes use of those concepts can impose difficulties for such novices to understand the system. Just now I am experiencing that some A-HA effects (Why certain things are done the way they are done) took between 1-2 months to really settle in. </description>
		<content:encoded><![CDATA[<p>Hm&#8230;.concepts like &#8220;abstraction, encapsulation and dependency inversion work&#8221; are in my experience not readily accessible to junior developers. A system that makes use of those concepts can impose difficulties for such novices to understand the system. Just now I am experiencing that some A-HA effects (Why certain things are done the way they are done) took between 1-2 months to really settle in. </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tom</title>
		<link>http://lostechies.com/marcusbratton/2009/02/26/hallmarks-of-good-system-design/#comment-28</link>
		<dc:creator>Tom</dc:creator>
		<pubDate>Thu, 26 Feb 2009 09:17:32 +0000</pubDate>
		<guid isPermaLink="false">/blogs/marcus_bratton/archive/2009/02/26/hallmarks-of-good-system-design.aspx#comment-28</guid>
		<description>Great article. On point 3; we are using DI heavily in our solution now and the benefits are easily understood. All classes are pluggable since they are build by the container. This does however pose a large dependency on the container which might prevent reuse; for instance because of the complexity in building up some of the objects one would still have to copy a lot of classes when trying to reuse. Any thoughts on that? </description>
		<content:encoded><![CDATA[<p>Great article. On point 3; we are using DI heavily in our solution now and the benefits are easily understood. All classes are pluggable since they are build by the container. This does however pose a large dependency on the container which might prevent reuse; for instance because of the complexity in building up some of the objects one would still have to copy a lot of classes when trying to reuse. Any thoughts on that? </p>
]]></content:encoded>
	</item>
</channel>
</rss>
