<?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"
	>
<channel>
	<title>Comments on: The Code is the Design</title>
	<atom:link href="http://www.buunguyen.net/blog/the-code-is-the-design.html/feed" rel="self" type="application/rss+xml" />
	<link>http://www.buunguyen.net/blog/the-code-is-the-design.html</link>
	<description>Thoughts on software development and project management</description>
	<pubDate>Thu, 20 Nov 2008 23:33:59 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
		<item>
		<title>By: Buu Nguyen</title>
		<link>http://www.buunguyen.net/blog/the-code-is-the-design.html#comment-36253</link>
		<dc:creator>Buu Nguyen</dc:creator>
		<pubDate>Sat, 21 Jun 2008 03:31:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=23#comment-36253</guid>
		<description>@Luis:
I am.  Actually I did include that paper in the References section.  Thanks for informing though!</description>
		<content:encoded><![CDATA[<p>@Luis:<br />
I am.  Actually I did include that paper in the References section.  Thanks for informing though!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Luis Bruno</title>
		<link>http://www.buunguyen.net/blog/the-code-is-the-design.html#comment-36161</link>
		<dc:creator>Luis Bruno</dc:creator>
		<pubDate>Fri, 20 Jun 2008 13:51:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=23#comment-36161</guid>
		<description>You are aware of Reeves' "Code as Design"? http://www.developerdotstar.com/mag/articles/reeves_design_main.html</description>
		<content:encoded><![CDATA[<p>You are aware of Reeves&#8217; &#8220;Code as Design&#8221;? <a href="http://www.developerdotstar.com/mag/articles/reeves_design_main.html" rel="nofollow">http://www.developerdotstar.com/mag/articles/reeves_design_main.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Buu Nguyen&#8217;s Blog &#187; The 5 Types of Poor Architects</title>
		<link>http://www.buunguyen.net/blog/the-code-is-the-design.html#comment-36152</link>
		<dc:creator>Buu Nguyen&#8217;s Blog &#187; The 5 Types of Poor Architects</dc:creator>
		<pubDate>Fri, 20 Jun 2008 10:55:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=23#comment-36152</guid>
		<description>[...] UML-only architects. If you have read my essay, The Code is the Design, you should be able to guess how pissed off I am when working with architects who think coding is [...]</description>
		<content:encoded><![CDATA[<p>[...] UML-only architects. If you have read my essay, The Code is the Design, you should be able to guess how pissed off I am when working with architects who think coding is [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Buu Nguyen</title>
		<link>http://www.buunguyen.net/blog/the-code-is-the-design.html#comment-288</link>
		<dc:creator>Buu Nguyen</dc:creator>
		<pubDate>Thu, 08 Mar 2007 08:10:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=23#comment-288</guid>
		<description>Yin-so, as far as I can tell, the concept is spreading quite well in the developer community, esp. when the article of Jack Reeves was whole-heartedly recommended by Uncle Bob and even included in his excellent book on OOAD (Agile Software Development: Principles, Patterns, and Practices).  I would like to see the concept penetrate the management's mind, by when I hope there would be less "architecture astronauts" and doomed projects.</description>
		<content:encoded><![CDATA[<p>Yin-so, as far as I can tell, the concept is spreading quite well in the developer community, esp. when the article of Jack Reeves was whole-heartedly recommended by Uncle Bob and even included in his excellent book on OOAD (Agile Software Development: Principles, Patterns, and Practices).  I would like to see the concept penetrate the management&#8217;s mind, by when I hope there would be less &#8220;architecture astronauts&#8221; and doomed projects.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yin-So Chen</title>
		<link>http://www.buunguyen.net/blog/the-code-is-the-design.html#comment-244</link>
		<dc:creator>Yin-So Chen</dc:creator>
		<pubDate>Tue, 06 Mar 2007 23:53:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=23#comment-244</guid>
		<description>Buu - 

glad to see more people spreading the paradigm that software != construction ;) 

http://www.yinsochen.com/blog/2006/12/22/software-is-not-construction/

http://www.yinsochen.com/blog/2007/01/04/software-is-not-construction-ii/

Cheers,

yinso</description>
		<content:encoded><![CDATA[<p>Buu - </p>
<p>glad to see more people spreading the paradigm that software != construction <img src='http://www.buunguyen.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://www.yinsochen.com/blog/2006/12/22/software-is-not-construction/" rel="nofollow">http://www.yinsochen.com/blog/2006/12/22/software-is-not-construction/</a></p>
<p><a href="http://www.yinsochen.com/blog/2007/01/04/software-is-not-construction-ii/" rel="nofollow">http://www.yinsochen.com/blog/2007/01/04/software-is-not-construction-ii/</a></p>
<p>Cheers,</p>
<p>yinso</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Buu Nguyen</title>
		<link>http://www.buunguyen.net/blog/the-code-is-the-design.html#comment-31</link>
		<dc:creator>Buu Nguyen</dc:creator>
		<pubDate>Fri, 09 Feb 2007 01:17:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=23#comment-31</guid>
		<description>Tai, that pretty much answers the questions I have.  If the object model is easy to used in the UI layer, easy to maintain even by new developers, without being designed with a bunch of UML diagrams before being coded, it does reaffirm a point I made in the original post: diagrams may be valuable for cetain purposes, but at the end of the day, what you really need to focus on (elaborating) is the code - and projects can be successful with this focus (the right focus).</description>
		<content:encoded><![CDATA[<p>Tai, that pretty much answers the questions I have.  If the object model is easy to used in the UI layer, easy to maintain even by new developers, without being designed with a bunch of UML diagrams before being coded, it does reaffirm a point I made in the original post: diagrams may be valuable for cetain purposes, but at the end of the day, what you really need to focus on (elaborating) is the code - and projects can be successful with this focus (the right focus).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: thle</title>
		<link>http://www.buunguyen.net/blog/the-code-is-the-design.html#comment-30</link>
		<dc:creator>thle</dc:creator>
		<pubDate>Fri, 09 Feb 2007 00:42:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=23#comment-30</guid>
		<description>We are doing Student Information System, using VB.NET. The whole solution is nothing but 4-layers app. Since my team is only involved with the UI layer, I really don't know how complex the business objects internally are, but I know for sure how simple for an UI dev to use their Service Interfaces. The interfaces are fine grained enough to make UI dev easy to know that he/she's using the right interface.

For #3, Devs that join their team, how easy to maintain those objects? It's pretty easy as the projects already has a good framework.

for #4. Yes, we have lot of their unit tests to use as code sample for UI team, but we only use it for complex screens.</description>
		<content:encoded><![CDATA[<p>We are doing Student Information System, using VB.NET. The whole solution is nothing but 4-layers app. Since my team is only involved with the UI layer, I really don&#8217;t know how complex the business objects internally are, but I know for sure how simple for an UI dev to use their Service Interfaces. The interfaces are fine grained enough to make UI dev easy to know that he/she&#8217;s using the right interface.</p>
<p>For #3, Devs that join their team, how easy to maintain those objects? It&#8217;s pretty easy as the projects already has a good framework.</p>
<p>for #4. Yes, we have lot of their unit tests to use as code sample for UI team, but we only use it for complex screens.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: thle</title>
		<link>http://www.buunguyen.net/blog/the-code-is-the-design.html#comment-25</link>
		<dc:creator>thle</dc:creator>
		<pubDate>Thu, 08 Feb 2007 04:40:08 +0000</pubDate>
		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=23#comment-25</guid>
		<description>So what is the point of this?  In my opinion, we should not define what design really is.  It just an activity we should have during software development life cycle, No matter what we produce in design phrase. The output can be some fancy diagrams drawn on the whiteboard, or can be a set of comprehensive diagrams.  It varies a lot but it does have a role. The things is how we take it, spend 3 months to design and 1 month to code; or no design at all.

The project I am working on, It has been running more than 2 years. There are 7-8 class libraries have been created with thousands of domain objects.  But surprisingly, there is no design document at all. (Let's ask aPhongBui, he knows about it; he's joining the team to produce some more thousand of domain objects :-) )
How can they survive? Did they do the design?

In summary, let's design enough, document enough, move forward, and revise the design later if it's necessary.

P.S. we may open a topic about "How much design is enough?"</description>
		<content:encoded><![CDATA[<p>So what is the point of this?  In my opinion, we should not define what design really is.  It just an activity we should have during software development life cycle, No matter what we produce in design phrase. The output can be some fancy diagrams drawn on the whiteboard, or can be a set of comprehensive diagrams.  It varies a lot but it does have a role. The things is how we take it, spend 3 months to design and 1 month to code; or no design at all.</p>
<p>The project I am working on, It has been running more than 2 years. There are 7-8 class libraries have been created with thousands of domain objects.  But surprisingly, there is no design document at all. (Let&#8217;s ask aPhongBui, he knows about it; he&#8217;s joining the team to produce some more thousand of domain objects <img src='http://www.buunguyen.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )<br />
How can they survive? Did they do the design?</p>
<p>In summary, let&#8217;s design enough, document enough, move forward, and revise the design later if it&#8217;s necessary.</p>
<p>P.S. we may open a topic about &#8220;How much design is enough?&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Buu Nguyen</title>
		<link>http://www.buunguyen.net/blog/the-code-is-the-design.html#comment-26</link>
		<dc:creator>Buu Nguyen</dc:creator>
		<pubDate>Wed, 07 Feb 2007 15:03:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=23#comment-26</guid>
		<description>First, thanks a lot for your comments, Tai.  

The point of this topic is to argue about: 
1.&#160;&#160;&#160;&#160;Which is the &lt;b&gt;essential&lt;/b&gt; output of the design process?  &lt;b&gt;Answer:&lt;/b&gt; the &lt;i&gt;code&lt;/i&gt; is, not the diagrams.  (Note that while the code is the essential output, I do not deny the value of &lt;i&gt;intermediate&lt;/i&gt; output such as UML diagrams (or some sketches on the whiteboard as you mentioned) because they help bridge the gaps between requirements to the code, i.e. the design process' final representation &lt;i&gt;and&lt;/i&gt; offer a high-level overview to the design aspects of the software.  As you say "It varies a lot but it does have a role", I totally agree with that.)

2.&#160;&#160;&#160;&#160;What is actually the &lt;i&gt;code&lt;/i&gt;?  &lt;b&gt;Answer:&lt;/b&gt; the design final representation which can be used by a compiler to produce working software.  Yesterday, it was assembly, today it is Java/C# (or whatever), tomorrow it may be UML.

This topic is not about how much design we should do.  And as to your suggestion about the topic of "How much design is enough?", I've already had &lt;a href="http://www.buunguyen.net/blog/?p=22" rel="nofollow"&gt;a post about YAGNI (You Ain't Gonna Need It) which does in fact slightly address your question&lt;/a&gt;).  Please read and share your thoughts on it.

&lt;blockquote&gt;
The project I am working on, It has been running more than 2 years. There are 7-8 class libraries have been created with thousands of domain objects.  But surprisingly, there is no design document at all.  (Let's ask aPhongBui, he knows about it; he's joining the team to produce some more thousand of domain objects :-) ).  How can they survive?  Did they do the design?
&lt;/blockquote&gt;
That reaffirms the proposition that: the focus of the design process is the code itself, not the diagrams.  That is a live example of the fact that projects can be successful by having programmers continuously refactoring the code, separating concerns, and properly managing dependencies to make the code clean and maintainable, instead of elaborating the UML diagrams.  

On the other hand, your project sounds very interesting and I would love to know about the followings:

1.&#160;&#160;&#160;&#160;How complex are these objects?  What domain are they in?  Are they simply data (transfer) object or do they contain behaviors?  Can they persist themselves or are they plain old Java/C# objects?
2.&#160;&#160;&#160;&#160;How are they designed?  I.e., is domain-driven design applied?  Are they coded in a high-level languages (C#, Java) or expressed in some domain-specific languages?
3.&#160;&#160;&#160;&#160;How easy is it for a new developer to jump in and maintain these objects (given the fact that there is no design diagram to start)?
4.&#160;&#160;&#160;&#160;Is there a high-coverage unit test suite to serve as live documentations to the objects' API?  If not, then how developers can discover the published interface of a certain object (i.e. Javadoc)?

Again, thanks for you comments and hope to hear more feedbacks from you.</description>
		<content:encoded><![CDATA[<p>First, thanks a lot for your comments, Tai.  </p>
<p>The point of this topic is to argue about:<br />
1.&nbsp;&nbsp;&nbsp;&nbsp;Which is the <b>essential</b> output of the design process?  <b>Answer:</b> the <i>code</i> is, not the diagrams.  (Note that while the code is the essential output, I do not deny the value of <i>intermediate</i> output such as UML diagrams (or some sketches on the whiteboard as you mentioned) because they help bridge the gaps between requirements to the code, i.e. the design process&#8217; final representation <i>and</i> offer a high-level overview to the design aspects of the software.  As you say &#8220;It varies a lot but it does have a role&#8221;, I totally agree with that.)</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;What is actually the <i>code</i>?  <b>Answer:</b> the design final representation which can be used by a compiler to produce working software.  Yesterday, it was assembly, today it is Java/C# (or whatever), tomorrow it may be UML.</p>
<p>This topic is not about how much design we should do.  And as to your suggestion about the topic of &#8220;How much design is enough?&#8221;, I&#8217;ve already had <a href="http://www.buunguyen.net/blog/?p=22" rel="nofollow">a post about YAGNI (You Ain&#8217;t Gonna Need It) which does in fact slightly address your question</a>).  Please read and share your thoughts on it.</p>
<blockquote><p>
The project I am working on, It has been running more than 2 years. There are 7-8 class libraries have been created with thousands of domain objects.  But surprisingly, there is no design document at all.  (Let&#8217;s ask aPhongBui, he knows about it; he&#8217;s joining the team to produce some more thousand of domain objects <img src='http://www.buunguyen.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ).  How can they survive?  Did they do the design?
</p></blockquote>
<p>That reaffirms the proposition that: the focus of the design process is the code itself, not the diagrams.  That is a live example of the fact that projects can be successful by having programmers continuously refactoring the code, separating concerns, and properly managing dependencies to make the code clean and maintainable, instead of elaborating the UML diagrams.  </p>
<p>On the other hand, your project sounds very interesting and I would love to know about the followings:</p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;How complex are these objects?  What domain are they in?  Are they simply data (transfer) object or do they contain behaviors?  Can they persist themselves or are they plain old Java/C# objects?<br />
2.&nbsp;&nbsp;&nbsp;&nbsp;How are they designed?  I.e., is domain-driven design applied?  Are they coded in a high-level languages (C#, Java) or expressed in some domain-specific languages?<br />
3.&nbsp;&nbsp;&nbsp;&nbsp;How easy is it for a new developer to jump in and maintain these objects (given the fact that there is no design diagram to start)?<br />
4.&nbsp;&nbsp;&nbsp;&nbsp;Is there a high-coverage unit test suite to serve as live documentations to the objects&#8217; API?  If not, then how developers can discover the published interface of a certain object (i.e. Javadoc)?</p>
<p>Again, thanks for you comments and hope to hear more feedbacks from you.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Buu Nguyen</title>
		<link>http://www.buunguyen.net/blog/the-code-is-the-design.html#comment-19</link>
		<dc:creator>Buu Nguyen</dc:creator>
		<pubDate>Tue, 06 Feb 2007 06:40:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=23#comment-19</guid>
		<description>Thanks for your comments, anh Hai.  During my internship, I used to participate in a project in which I was given some UML diagrams created by some senior folks and asked to "realize" them.  The result?  The output code was totally different from the design.  The reason was because the designers did not provide enough of the details as well as the diagrams did not document things correctly.  The point is: unless you &lt;i&gt;validate&lt;/i&gt; your design diagrams by the code, the diagrams are useless and full of errors.  Period.  And that is one of the key things that makes me believe the essential output of the design process should be the code, not the diagrams - which are far from complete without having the code to back them up.  

Regarding your disagreements, let me address both of them

1.&#160;&#160;&#160;&#160;While I say the focus should be on the code, I also mention that the diagrams (UML and the like) do in fact have their value e.g. the most obvious value of these diagrams is their expressiveness.  In fact, I would love to learn about any software architecture firstly through the high-level design diagrams instead of diving immediately into the code.  However, the point is that the code is the essential output of the design process while the diagrams only help to demonstrate ideas in a high-level perspective.  (As I just mention, diagrams are useless unless the code has proved otherwise.)

2.&#160;&#160;&#160;&#160;Think of it this way, the Java compiler's job is to translate Java source into bytecode which will in term be JIT-compiled by the JVM into assembly code for the specific computer architecture.  We do not have to write bytecode nor do we have to write assembly, they are just output of the "workers" (or "builders") - the Java compiler and the JVM.  The only code that we have to work with is Java and we call it the &lt;i&gt;code&lt;/i&gt;.  As advances in the software field allows us to express design concepts in a higher level of abstraction, e.g. UML, then it is the job of the MDA "compiler" (let's just assume MDA can make it way into the mainstream) to generate Java or C# source code from a platform-independent model (PIM) which is possibly expressed in UML (or any other supported modelling languages).  With that, we &lt;i&gt;design&lt;/i&gt; and &lt;i&gt;code&lt;/i&gt; in UML, not Java or C#.  And thus, UML can be considered as the &lt;i&gt;source code&lt;/i&gt; and the MDA "compiler" is actually the &lt;i&gt;compiler&lt;/i&gt; for this language.

Thanks again and hope to hear more opinions from you!!!</description>
		<content:encoded><![CDATA[<p>Thanks for your comments, anh Hai.  During my internship, I used to participate in a project in which I was given some UML diagrams created by some senior folks and asked to &#8220;realize&#8221; them.  The result?  The output code was totally different from the design.  The reason was because the designers did not provide enough of the details as well as the diagrams did not document things correctly.  The point is: unless you <i>validate</i> your design diagrams by the code, the diagrams are useless and full of errors.  Period.  And that is one of the key things that makes me believe the essential output of the design process should be the code, not the diagrams - which are far from complete without having the code to back them up.  </p>
<p>Regarding your disagreements, let me address both of them</p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;While I say the focus should be on the code, I also mention that the diagrams (UML and the like) do in fact have their value e.g. the most obvious value of these diagrams is their expressiveness.  In fact, I would love to learn about any software architecture firstly through the high-level design diagrams instead of diving immediately into the code.  However, the point is that the code is the essential output of the design process while the diagrams only help to demonstrate ideas in a high-level perspective.  (As I just mention, diagrams are useless unless the code has proved otherwise.)</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;Think of it this way, the Java compiler&#8217;s job is to translate Java source into bytecode which will in term be JIT-compiled by the JVM into assembly code for the specific computer architecture.  We do not have to write bytecode nor do we have to write assembly, they are just output of the &#8220;workers&#8221; (or &#8220;builders&#8221;) - the Java compiler and the JVM.  The only code that we have to work with is Java and we call it the <i>code</i>.  As advances in the software field allows us to express design concepts in a higher level of abstraction, e.g. UML, then it is the job of the MDA &#8220;compiler&#8221; (let&#8217;s just assume MDA can make it way into the mainstream) to generate Java or C# source code from a platform-independent model (PIM) which is possibly expressed in UML (or any other supported modelling languages).  With that, we <i>design</i> and <i>code</i> in UML, not Java or C#.  And thus, UML can be considered as the <i>source code</i> and the MDA &#8220;compiler&#8221; is actually the <i>compiler</i> for this language.</p>
<p>Thanks again and hope to hear more opinions from you!!!</p>
]]></content:encoded>
	</item>
</channel>
</rss>
