<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Making Good Software</title>
	
	<link>http://www.makinggoodsoftware.com</link>
	<description />
	<lastBuildDate>Wed, 08 Sep 2010 19:34:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MakingGoodSoftware" /><feedburner:info uri="makinggoodsoftware" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title />
		<link>http://feedproxy.google.com/~r/MakingGoodSoftware/~3/5YqKa43S8MI/</link>
		<comments>http://www.makinggoodsoftware.com/2010/09/08/1386/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 19:34:41 +0000</pubDate>
		<dc:creator>Alberto Gutierrez</dc:creator>
				<category><![CDATA[Software Development Theory]]></category>

		<guid isPermaLink="false">http://www.makinggoodsoftware.com/?p=1386</guid>
		<description><![CDATA[My last article for DZone has just been published, follow the link to read it…
Lean: Avoiding Waste in Software Development







Related posts:Waterfall vs Agile: Can they be friends?Waterfall vs Agile: Development and BusinessWaterfall vs. Agile: QA and Management


Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2010/06/02/waterfall-vs-agile-can-they-be-friends/' rel='bookmark' title='Permanent Link: Waterfall vs Agile: Can they be friends?'>Waterfall vs Agile: Can they be friends?</a></li><li><a href='http://www.makinggoodsoftware.com/2010/06/15/waterfall-vs-agile-development-and-business/' rel='bookmark' title='Permanent Link: Waterfall vs Agile: Development and Business'>Waterfall vs Agile: Development and Business</a></li><li><a href='http://www.makinggoodsoftware.com/2010/07/19/waterfall-vs-agile-qa-and-management/' rel='bookmark' title='Permanent Link: Waterfall vs. Agile: QA and Management'>Waterfall vs. Agile: QA and Management</a></li></ol>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/bdjyjX3CA6LiQtG-fKYyA7yxyRc/0/da"><img src="http://feedads.g.doubleclick.net/~a/bdjyjX3CA6LiQtG-fKYyA7yxyRc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/bdjyjX3CA6LiQtG-fKYyA7yxyRc/1/da"><img src="http://feedads.g.doubleclick.net/~a/bdjyjX3CA6LiQtG-fKYyA7yxyRc/1/di" border="0" ismap="true"></img></a></p><p>My last article for DZone has just been published, follow the link to read it…</p>
<p><a href="http://agile.dzone.com/articles/lean-avoiding-waste" target="_blank">Lean: Avoiding Waste in Software Development</a></p>


<p>Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2010/06/02/waterfall-vs-agile-can-they-be-friends/' rel='bookmark' title='Permanent Link: Waterfall vs Agile: Can they be friends?'>Waterfall vs Agile: Can they be friends?</a></li><li><a href='http://www.makinggoodsoftware.com/2010/06/15/waterfall-vs-agile-development-and-business/' rel='bookmark' title='Permanent Link: Waterfall vs Agile: Development and Business'>Waterfall vs Agile: Development and Business</a></li><li><a href='http://www.makinggoodsoftware.com/2010/07/19/waterfall-vs-agile-qa-and-management/' rel='bookmark' title='Permanent Link: Waterfall vs. Agile: QA and Management'>Waterfall vs. Agile: QA and Management</a></li></ol></p><img src="http://feeds.feedburner.com/~r/MakingGoodSoftware/~4/5YqKa43S8MI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.makinggoodsoftware.com/2010/09/08/1386/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.makinggoodsoftware.com/2010/09/08/1386/</feedburner:origLink></item>
		<item>
		<title>How to prepare a programming job interview</title>
		<link>http://feedproxy.google.com/~r/MakingGoodSoftware/~3/jb-yPUlBQOA/</link>
		<comments>http://www.makinggoodsoftware.com/2010/08/16/how-to-prepare-a-programming-job-interview/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 23:50:47 +0000</pubDate>
		<dc:creator>Alberto Gutierrez</dc:creator>
				<category><![CDATA[Software Development Theory]]></category>

		<guid isPermaLink="false">http://www.makinggoodsoftware.com/?p=1378</guid>
		<description><![CDATA[Since I have been myself hunting for a job recently, I thought it would be a good idea to share with you what I think are a few and basic key points to successfully face job interviews.
Before the interview
1.- Find out about the company. Visit their website. Usually, at the beginning of the interview, you [...]


Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2009/09/16/top-4-mistakes-interviewing-programmers/' rel='bookmark' title='Permanent Link: Top 4 mistakes hiring new programmers'>Top 4 mistakes hiring new programmers</a></li><li><a href='http://www.makinggoodsoftware.com/2009/05/04/71-tips-for-naming-variables/' rel='bookmark' title='Permanent Link: 7+1 tips for naming variables'>7+1 tips for naming variables</a></li><li><a href='http://www.makinggoodsoftware.com/2009/07/16/3-tips-to-know-how-good-is-the-candidate-you-are-interviewing/' rel='bookmark' title='Permanent Link: 3 tips to know how good is the candidate you are interviewing'>3 tips to know how good is the candidate you are interviewing</a></li></ol>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/GaXLlb1qnPqsWZhdQhADdToa3tg/0/da"><img src="http://feedads.g.doubleclick.net/~a/GaXLlb1qnPqsWZhdQhADdToa3tg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/GaXLlb1qnPqsWZhdQhADdToa3tg/1/da"><img src="http://feedads.g.doubleclick.net/~a/GaXLlb1qnPqsWZhdQhADdToa3tg/1/di" border="0" ismap="true"></img></a></p><p>Since I have been myself hunting for a job recently, I thought it would be a good idea to share with you what I think are a few and basic key points to successfully face job interviews.</p>
<h2>Before the interview</h2>
<p><strong>1.- Find out about the company. Visit their website.</strong> Usually, at the beginning of the interview, you are given the chance to explain what you know about the company. Use this opportunity to show that you have some interest in them, and that you have done some research. For instance, if you know the names of the people who are interviewing you, google their names, many times you can find valuable information about them in sites linkedin or their personal blogs.</p>
<p><strong>2.- Review the specifications for the position.</strong> They may ask you about technologies that you haven&#8217;t used for a while. A quick review the day before the interview can make a huge difference.</p>
<p><strong>3.- Make sure you know where the interview is and how to get there. </strong>An obvious one, but worth to remind. I find it very useful to bring with me some notes with the names of he guys interviewing me, the address and the phone number of the agency.</p>
<p><strong>4.- Arrive always a bit before to the interview. </strong>Another obvious one, I personally like to arrive to the interview 5-10 minutes before.</p>
<h2>During the interview</h2>
<p><strong>5.- If you don’t know the answer to a specific technical question, be plain and honest. </strong>There is only one thing worst than not knowing the answer to a question and that is not being sure about yourself. If you don&#8217;t know it, don&#8217;t fake it.</p>
<p><strong>6.- If you know the answer to a specific technical question, be precise, concise and rational. </strong>Meaning: answer what they ask you about, not something related. Explain as much as necessary, no more, no less. If possible, explain why your solution is valid as opposite to another solution.</p>
<p><strong>7.- If asked to do some code review, design&#8230; </strong>Ask permission to stand up and use the board to explain better your ideas (assuming there is a board in the room). It is not only easier to explain your ideas through diagrams, it also shows that you are confident and have initiative.</p>
<p><strong>8.- Ask questions at the end of the interview. </strong>Having interviewed people myself, one of the things I most appreciate is people that come up with good questions at the end of the meeting. Some examples maybe asking about their continuous integration process, testing strategy, architecture&#8230; One particular question I like to ask at the end of the meeting is &#8220;do you have any concern about my technical skills?&#8221; This question works great, because you are opening a door for the interviewer to provide you with immediate feedback about the interview. Also, if they do have some concern, you have a second chance to revisit the areas where they think you may be not strong enough.</p>
<h2>At all time</h2>
<p><strong>9.- Smile and look in the eye to your interviewer.</strong> Looking confident and friendly is very important in a job interview, eye contact and smiling is fundamental.</p>
<p><strong>10.- Relax, try to enjoy. </strong>Relaxing in a job interview and approaching it from a &#8220;let&#8217;s have fun&#8221; perspective is going to help you a lot to finish convincing your interviewers that you are the right candidate for the position.</p>
<h2>[EDIT] Best contributions IMHO from the coments</h2>
<p><strong>11.- Bob:</strong> I would add: Study logic puzzles, algorithms and data structures like crazy… at least if you are going to interview for a coding position at any kind of startup. My last interview (two weeks ago) consisted of 4 hours and 5 different interviewers, and I spent a good 3 hours at the white board solving, or trying to solve, tricky logic puzzles and programming problems. There was very little interest in my work experience and past projects, and I have 15 years experience. Google and MSFT have ruined the interview process…</p>
<p><strong>12.- Amin</strong>: Good points. Another tip can be referring to your previous cool projects. For example when you are talking about a method or algorithm you can refer to a project that you have used that method or algorithm and talk more on the results.</p>
<p><strong>13.- Rick</strong>: Good, but all rather reactive. The most important thing to remember is that your chances of getting the job don’t depend on the quality of your answers, but in the way you can make your interviewers feel about you.</p>
<p>One good starting point for that is to try to figure out before or during the interview what problem they have that they are looking to solve by hiring. Because it is rare that a company is looking for just another programmer like the other ones they already have. There’s a specific void that needs filling, and only a small part of that void is described in the job description.</p>


<p>Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2009/09/16/top-4-mistakes-interviewing-programmers/' rel='bookmark' title='Permanent Link: Top 4 mistakes hiring new programmers'>Top 4 mistakes hiring new programmers</a></li><li><a href='http://www.makinggoodsoftware.com/2009/05/04/71-tips-for-naming-variables/' rel='bookmark' title='Permanent Link: 7+1 tips for naming variables'>7+1 tips for naming variables</a></li><li><a href='http://www.makinggoodsoftware.com/2009/07/16/3-tips-to-know-how-good-is-the-candidate-you-are-interviewing/' rel='bookmark' title='Permanent Link: 3 tips to know how good is the candidate you are interviewing'>3 tips to know how good is the candidate you are interviewing</a></li></ol></p><img src="http://feeds.feedburner.com/~r/MakingGoodSoftware/~4/jb-yPUlBQOA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.makinggoodsoftware.com/2010/08/16/how-to-prepare-a-programming-job-interview/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.makinggoodsoftware.com/2010/08/16/how-to-prepare-a-programming-job-interview/</feedburner:origLink></item>
		<item>
		<title>Java and tree data structures.</title>
		<link>http://feedproxy.google.com/~r/MakingGoodSoftware/~3/DJ3B1R0POtY/</link>
		<comments>http://www.makinggoodsoftware.com/2010/07/25/java-and-tree-data-structures/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 19:11:03 +0000</pubDate>
		<dc:creator>Alberto Gutierrez</dc:creator>
				<category><![CDATA[Software Development Theory]]></category>

		<guid isPermaLink="false">http://www.makinggoodsoftware.com/?p=1371</guid>
		<description><![CDATA[There isn’t any standard java implementation.
In almost every single project I have been involved, at some stage, I have found necessary to use a tree data structure, but I have found myself rewriting the same code to represent it because Java doesn’t provide with standard interfaces and implementations for Trees.
There are some open source tree [...]


Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2009/11/17/how-to-create-services-in-java/' rel='bookmark' title='Permanent Link: How to create services in Java'>How to create services in Java</a></li><li><a href='http://www.makinggoodsoftware.com/2010/03/31/are-you-using-too-many-technologies-in-your-projects-the-7-anti-patterns-for-technologies-frameworks-and-other-technicalities-in-software-development/' rel='bookmark' title='Permanent Link: Are you using too many technologies in your projects? The 7 anti-patterns for technologies, frameworks and other technicalities in software development.'>Are you using too many technologies in your projects? The 7 anti-patterns for technologies, frameworks and other technicalities in software development.</a></li><li><a href='http://www.makinggoodsoftware.com/2009/12/30/lose-coupling-is-overrated/' rel='bookmark' title='Permanent Link: Loose coupling is overrated.'>Loose coupling is overrated.</a></li></ol>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/_fx_7jzBiOuqghYis4SY5Hp_7RQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/_fx_7jzBiOuqghYis4SY5Hp_7RQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_fx_7jzBiOuqghYis4SY5Hp_7RQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/_fx_7jzBiOuqghYis4SY5Hp_7RQ/1/di" border="0" ismap="true"></img></a></p><h2>There isn’t any standard java implementation.</h2>
<p>In almost every single project I have been involved, at some stage, I have found necessary to use a tree data structure, but I have found myself rewriting the same code to represent it because Java doesn’t provide with standard interfaces and implementations for Trees.</p>
<h2>There are some open source tree data structures, but they are not flexible enough.<span style="font-weight: normal; font-size: 13px;"> </span></h2>
<p>It is also surprising that there isn’t any major open source project, at least that I’m aware of, that tries to fill this gap. I have found on the Internet a few attempts to implement trees, but even thought they are correct, I don’t think they are as flexible as they should be.</p>
<h2>The usual solution, the composite pattern on the objects itself, is far from ideal.</h2>
<p>The most common implementation of trees, is using the composite pattern on the objects itself, meaning that no abstractions are created for classes as Tree, or Node. This approach has two main flaws:</p>
<ul>
<li>Low cohesion: Now each object which is member of the tree needs to also have methods for navigation, insertion or other operations which are completely out of the scope of their own nature.</li>
<li>High coupling: Each node knows about their parents or about their children, changing one of them usually requires to changes the others as well.</li>
</ul>
<h2>How it should be (IMHO)</h2>
<p>In my opinion, these are at least the main characteristics that a flexible Tree library should have.</p>
<ol>
<li>Ability to branch and sub-branch. Instead hanging nodes directly from other nodes, have the ability to add branches and sub-branches to nodes and hang the child nodes from them.</li>
<li>XPath enabled. So you can call something like Node&lt;Something&gt; node = tree.get (“path/to/node”);</li>
<li>Navigation specified through strategy. Navigator nav = tree.getNavigator (Strategy);</li>
<li>Ability to filter.Navigator nav = tree.getNavigator (Strategy, Filter);</li>
<li>Ability to create sub-trees from nodes. Tree subTree = new Tree (tree.get (“path/to/node”));</li>
<li>Multi-threaded.</li>
</ol>
<h2>Your opinion and collaboration.</h2>
<p>The main reason to write this article, is that I’m actually about to start writing this library myself, and I would like to share it with everyone, but before, I would like to hear from you guys. What’s your opinion: Do you think this sort of library would be useful? Would you use it? Do you think there are classes already that I might not know that have this functionality?</p>
<p>I am really looking forward for your comments!</p>


<p>Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2009/11/17/how-to-create-services-in-java/' rel='bookmark' title='Permanent Link: How to create services in Java'>How to create services in Java</a></li><li><a href='http://www.makinggoodsoftware.com/2010/03/31/are-you-using-too-many-technologies-in-your-projects-the-7-anti-patterns-for-technologies-frameworks-and-other-technicalities-in-software-development/' rel='bookmark' title='Permanent Link: Are you using too many technologies in your projects? The 7 anti-patterns for technologies, frameworks and other technicalities in software development.'>Are you using too many technologies in your projects? The 7 anti-patterns for technologies, frameworks and other technicalities in software development.</a></li><li><a href='http://www.makinggoodsoftware.com/2009/12/30/lose-coupling-is-overrated/' rel='bookmark' title='Permanent Link: Loose coupling is overrated.'>Loose coupling is overrated.</a></li></ol></p><img src="http://feeds.feedburner.com/~r/MakingGoodSoftware/~4/DJ3B1R0POtY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.makinggoodsoftware.com/2010/07/25/java-and-tree-data-structures/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://www.makinggoodsoftware.com/2010/07/25/java-and-tree-data-structures/</feedburner:origLink></item>
		<item>
		<title>Waterfall vs. Agile: QA and Management</title>
		<link>http://feedproxy.google.com/~r/MakingGoodSoftware/~3/QzwpuPz0u8g/</link>
		<comments>http://www.makinggoodsoftware.com/2010/07/19/waterfall-vs-agile-qa-and-management/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 21:13:17 +0000</pubDate>
		<dc:creator>Alberto Gutierrez</dc:creator>
				<category><![CDATA[Software Development Theory]]></category>

		<guid isPermaLink="false">http://www.makinggoodsoftware.com/?p=1369</guid>
		<description><![CDATA[FYI:
The third and last part of the post Waterfall Vs Agile that I&#8217;ve been writing for DZone has just been published, follow the link to read it…
Waterfall vs. Agile: QA and Management


Related posts:Waterfall vs Agile: Development and BusinessWaterfall vs Agile: Can they be friends?Are you doing agile or are you doing waterfall with some agile [...]


Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2010/06/15/waterfall-vs-agile-development-and-business/' rel='bookmark' title='Permanent Link: Waterfall vs Agile: Development and Business'>Waterfall vs Agile: Development and Business</a></li><li><a href='http://www.makinggoodsoftware.com/2010/06/02/waterfall-vs-agile-can-they-be-friends/' rel='bookmark' title='Permanent Link: Waterfall vs Agile: Can they be friends?'>Waterfall vs Agile: Can they be friends?</a></li><li><a href='http://www.makinggoodsoftware.com/2009/04/27/are-you-doing-agile-or-are-you-doing-waterfall-with-some-agile-practices/' rel='bookmark' title='Permanent Link: Are you doing agile or are you doing waterfall with some agile practices?'>Are you doing agile or are you doing waterfall with some agile practices?</a></li></ol>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/pPpnJVPccuWGtT4_fMzUhrgumUI/0/da"><img src="http://feedads.g.doubleclick.net/~a/pPpnJVPccuWGtT4_fMzUhrgumUI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/pPpnJVPccuWGtT4_fMzUhrgumUI/1/da"><img src="http://feedads.g.doubleclick.net/~a/pPpnJVPccuWGtT4_fMzUhrgumUI/1/di" border="0" ismap="true"></img></a></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; line-height: 18px; padding: 0px;">FYI:</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; line-height: 18px; padding: 0px;">The third and last part of the post Waterfall Vs Agile that I&#8217;ve been writing for DZone has just been published, follow the link to read it…</p>
<p><a href="http://agile.dzone.com/articles/waterfall-vs-agile-qa-management" target="_blank">Waterfall vs. Agile: QA and Management</a></p>


<p>Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2010/06/15/waterfall-vs-agile-development-and-business/' rel='bookmark' title='Permanent Link: Waterfall vs Agile: Development and Business'>Waterfall vs Agile: Development and Business</a></li><li><a href='http://www.makinggoodsoftware.com/2010/06/02/waterfall-vs-agile-can-they-be-friends/' rel='bookmark' title='Permanent Link: Waterfall vs Agile: Can they be friends?'>Waterfall vs Agile: Can they be friends?</a></li><li><a href='http://www.makinggoodsoftware.com/2009/04/27/are-you-doing-agile-or-are-you-doing-waterfall-with-some-agile-practices/' rel='bookmark' title='Permanent Link: Are you doing agile or are you doing waterfall with some agile practices?'>Are you doing agile or are you doing waterfall with some agile practices?</a></li></ol></p><img src="http://feeds.feedburner.com/~r/MakingGoodSoftware/~4/QzwpuPz0u8g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.makinggoodsoftware.com/2010/07/19/waterfall-vs-agile-qa-and-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.makinggoodsoftware.com/2010/07/19/waterfall-vs-agile-qa-and-management/</feedburner:origLink></item>
		<item>
		<title>Waterfall vs Agile: Development and Business</title>
		<link>http://feedproxy.google.com/~r/MakingGoodSoftware/~3/3uZxfnAPnGw/</link>
		<comments>http://www.makinggoodsoftware.com/2010/06/15/waterfall-vs-agile-development-and-business/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 21:03:03 +0000</pubDate>
		<dc:creator>Alberto Gutierrez</dc:creator>
				<category><![CDATA[Software Development Theory]]></category>

		<guid isPermaLink="false">http://www.makinggoodsoftware.com/?p=1366</guid>
		<description><![CDATA[FYI:
The second part of the post Waterfall Vs Agile, has just been published in DZone, follow the link to read it&#8230;
Waterfall vs. Agile: Development and Business


Related posts:Waterfall vs. Agile: QA and ManagementWaterfall vs Agile: Can they be friends?Are you doing agile or are you doing waterfall with some agile practices?


Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2010/07/19/waterfall-vs-agile-qa-and-management/' rel='bookmark' title='Permanent Link: Waterfall vs. Agile: QA and Management'>Waterfall vs. Agile: QA and Management</a></li><li><a href='http://www.makinggoodsoftware.com/2010/06/02/waterfall-vs-agile-can-they-be-friends/' rel='bookmark' title='Permanent Link: Waterfall vs Agile: Can they be friends?'>Waterfall vs Agile: Can they be friends?</a></li><li><a href='http://www.makinggoodsoftware.com/2009/04/27/are-you-doing-agile-or-are-you-doing-waterfall-with-some-agile-practices/' rel='bookmark' title='Permanent Link: Are you doing agile or are you doing waterfall with some agile practices?'>Are you doing agile or are you doing waterfall with some agile practices?</a></li></ol>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/q_6x31JYmf2WB4sGkm68E-L4qCE/0/da"><img src="http://feedads.g.doubleclick.net/~a/q_6x31JYmf2WB4sGkm68E-L4qCE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/q_6x31JYmf2WB4sGkm68E-L4qCE/1/da"><img src="http://feedads.g.doubleclick.net/~a/q_6x31JYmf2WB4sGkm68E-L4qCE/1/di" border="0" ismap="true"></img></a></p><p>FYI:</p>
<p>The second part of the post Waterfall Vs Agile, has just been published in DZone, follow the link to read it&#8230;</p>
<p><a href="http://agile.dzone.com/articles/waterfall-vs-agile-development-business" target="_blank">Waterfall vs. Agile: Development and Business</a></p>


<p>Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2010/07/19/waterfall-vs-agile-qa-and-management/' rel='bookmark' title='Permanent Link: Waterfall vs. Agile: QA and Management'>Waterfall vs. Agile: QA and Management</a></li><li><a href='http://www.makinggoodsoftware.com/2010/06/02/waterfall-vs-agile-can-they-be-friends/' rel='bookmark' title='Permanent Link: Waterfall vs Agile: Can they be friends?'>Waterfall vs Agile: Can they be friends?</a></li><li><a href='http://www.makinggoodsoftware.com/2009/04/27/are-you-doing-agile-or-are-you-doing-waterfall-with-some-agile-practices/' rel='bookmark' title='Permanent Link: Are you doing agile or are you doing waterfall with some agile practices?'>Are you doing agile or are you doing waterfall with some agile practices?</a></li></ol></p><img src="http://feeds.feedburner.com/~r/MakingGoodSoftware/~4/3uZxfnAPnGw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.makinggoodsoftware.com/2010/06/15/waterfall-vs-agile-development-and-business/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.makinggoodsoftware.com/2010/06/15/waterfall-vs-agile-development-and-business/</feedburner:origLink></item>
		<item>
		<title>QDD (QA Driven Development). How QA should be…</title>
		<link>http://feedproxy.google.com/~r/MakingGoodSoftware/~3/9uC0X7d9aJo/</link>
		<comments>http://www.makinggoodsoftware.com/2010/06/07/qdd-qa-driven-development-how-qa-should-be/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 12:23:23 +0000</pubDate>
		<dc:creator>Alberto Gutierrez</dc:creator>
				<category><![CDATA[Software Development Theory]]></category>

		<guid isPermaLink="false">http://www.makinggoodsoftware.com/?p=1359</guid>
		<description><![CDATA[Historically QA is been considered the last stage of software development, and QA testers have been seen as not necessarily qualified people, that all they need to do is to run manual or some automated UI tests over applications handed over by development.
This classic approach is somehow still used even in several agile projects, and [...]


Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2009/05/12/hdd/' rel='bookmark' title='Permanent Link: Forget about Hope Driven Development (HDD), the cancer of software development.'>Forget about Hope Driven Development (HDD), the cancer of software development.</a></li><li><a href='http://www.makinggoodsoftware.com/2010/03/13/my-ten-development-principles/' rel='bookmark' title='Permanent Link: My ten development principles'>My ten development principles</a></li><li><a href='http://www.makinggoodsoftware.com/2010/02/23/the-best-bug-tracking-system-dont-raise-bugs-write-an-automated-test/' rel='bookmark' title='Permanent Link: The best bug tracking system. Don&#8217;t raise bugs, write an automated test!'>The best bug tracking system. Don&#8217;t raise bugs, write an automated test!</a></li></ol>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/vBQ8a-X_RU5AcB0sg5Ci3lGc0ZE/0/da"><img src="http://feedads.g.doubleclick.net/~a/vBQ8a-X_RU5AcB0sg5Ci3lGc0ZE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/vBQ8a-X_RU5AcB0sg5Ci3lGc0ZE/1/da"><img src="http://feedads.g.doubleclick.net/~a/vBQ8a-X_RU5AcB0sg5Ci3lGc0ZE/1/di" border="0" ismap="true"></img></a></p><p>Historically QA is been considered the last stage of software development, and QA testers have been seen as not necessarily qualified people, that all they need to do is to run manual or some automated UI tests over applications handed over by development.</p>
<p>This classic approach is somehow still used even in several agile projects, and it has many inconveniences:</p>
<ol>
<li>QA becomes a certification/cop department that adds very little value to Development.</li>
<li>It only assures the quality of the final product, but not the quality of the code.</li>
<li>It creates the illusion that software can be created without bugs.</li>
<li>It&#8217;s not synchronized with the business needs, but with the requirements contract.</li>
</ol>
<p>QA should switch to a new paradigm, QDD &#8211; QA Driven Development. In QDD the main role of QA should be to engage with development and the customer.</p>
<p>In order to achieve this new paradigm, QA should:</p>
<ol>
<li><strong>Review not only the final product, but also the code</strong>. The code is the big gap in classic QA. It is never itself checked for quality. Low quality code will make the maintenance of the application a nightmare.</li>
<li><strong>Be involved in the day to day of development</strong>. QA should be present in every single important decision taken during development. They should also be aware of what the code looks like through daily code reviews or pair programming.</li>
<li><strong>Have qualified and skilled employees</strong>. QA should drive the development, and that requires QA personnel to be very skilled and qualified.</li>
<li><strong>Keep continuously updating the customer</strong>. QA should make sure that the application as it&#8217;s developed is fulfilling the customer&#8217;s expectations. It should also be their duty to guarantee that new requirements are identified, and also to identify previous requirements that are not necessary anymore.</li>
<li><strong>Decide when a feature is completed</strong>. As the top part of the pyramid of software development, QA is the most qualified member to decide when a feature is completed.</li>
<li><strong>Create a comprehensive suite of automated tests</strong>. QA should aim to cover as much as possible with automated tests, this will guarantee that regression testing should be easy to perform for each new feature.</li>
<li><strong>Handover requirements to development</strong>. QA should have the best understanding of both, technical and non technical aspects of the application. That is what will make them the perfect candidates to handover new requirements.</li>
<li><strong>Have formal authority over development</strong>. None of the previous points would be possible is QA is not given formal authority over development.</li>
</ol>
<p>Based on these characteristics, QA personnel will have to be well trained in computer science, actually, QA should be an specialization of software development, and not a completely different branch. An ideal candidate for QA then should be a seasoned developer, with coach and lead abilities.</p>
<p>Of course to move to QDD there are very big challenges, being the three most importants:</p>
<ol>
<li>Companies that have QA infraestrucutres and personnel not fitted for this new paradigm, and not wishing to lose their investment.</li>
<li>Developers not willing to become QA.</li>
<li>Companies are afraid of the over cost of switching non-qualified QA people for skilled developers.</li>
</ol>
<p>While these are important factors to overcome, in my opinion switching to this new QA paradigm will bring benefits in the mid/long run as the quality of the applications delivered will grow exponentially.</p>


<p>Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2009/05/12/hdd/' rel='bookmark' title='Permanent Link: Forget about Hope Driven Development (HDD), the cancer of software development.'>Forget about Hope Driven Development (HDD), the cancer of software development.</a></li><li><a href='http://www.makinggoodsoftware.com/2010/03/13/my-ten-development-principles/' rel='bookmark' title='Permanent Link: My ten development principles'>My ten development principles</a></li><li><a href='http://www.makinggoodsoftware.com/2010/02/23/the-best-bug-tracking-system-dont-raise-bugs-write-an-automated-test/' rel='bookmark' title='Permanent Link: The best bug tracking system. Don&#8217;t raise bugs, write an automated test!'>The best bug tracking system. Don&#8217;t raise bugs, write an automated test!</a></li></ol></p><img src="http://feeds.feedburner.com/~r/MakingGoodSoftware/~4/9uC0X7d9aJo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.makinggoodsoftware.com/2010/06/07/qdd-qa-driven-development-how-qa-should-be/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.makinggoodsoftware.com/2010/06/07/qdd-qa-driven-development-how-qa-should-be/</feedburner:origLink></item>
		<item>
		<title>Waterfall vs Agile: Can they be friends?</title>
		<link>http://feedproxy.google.com/~r/MakingGoodSoftware/~3/ZA2RpWO0qSo/</link>
		<comments>http://www.makinggoodsoftware.com/2010/06/02/waterfall-vs-agile-can-they-be-friends/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 14:31:12 +0000</pubDate>
		<dc:creator>Alberto Gutierrez</dc:creator>
				<category><![CDATA[Software Development Theory]]></category>

		<guid isPermaLink="false">http://www.makinggoodsoftware.com/?p=1355</guid>
		<description><![CDATA[To all my readers.
I&#8217;ve been honoured to author an article for dZone, &#8220;Waterfall vs Agile: Can they be friends?&#8221; If you follow the link you should be able to read it.
Thanks!


Related posts:Waterfall vs Agile: Development and BusinessWaterfall vs. Agile: QA and ManagementAre you doing agile or are you doing waterfall with some agile practices?


Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2010/06/15/waterfall-vs-agile-development-and-business/' rel='bookmark' title='Permanent Link: Waterfall vs Agile: Development and Business'>Waterfall vs Agile: Development and Business</a></li><li><a href='http://www.makinggoodsoftware.com/2010/07/19/waterfall-vs-agile-qa-and-management/' rel='bookmark' title='Permanent Link: Waterfall vs. Agile: QA and Management'>Waterfall vs. Agile: QA and Management</a></li><li><a href='http://www.makinggoodsoftware.com/2009/04/27/are-you-doing-agile-or-are-you-doing-waterfall-with-some-agile-practices/' rel='bookmark' title='Permanent Link: Are you doing agile or are you doing waterfall with some agile practices?'>Are you doing agile or are you doing waterfall with some agile practices?</a></li></ol>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/VagnEZ5uJDwoiutr7RDNTLtGPLM/0/da"><img src="http://feedads.g.doubleclick.net/~a/VagnEZ5uJDwoiutr7RDNTLtGPLM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/VagnEZ5uJDwoiutr7RDNTLtGPLM/1/da"><img src="http://feedads.g.doubleclick.net/~a/VagnEZ5uJDwoiutr7RDNTLtGPLM/1/di" border="0" ismap="true"></img></a></p><p>To all my readers.</p>
<p>I&#8217;ve been honoured to author an article for dZone, &#8220;<a href="http://www.dzone.com/links/r/waterfall_vs_agile_can_they_be_friends.html" target="_blank">Waterfall vs Agile: Can they be friends?</a>&#8221; If you follow the link you should be able to read it.</p>
<p>Thanks!</p>


<p>Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2010/06/15/waterfall-vs-agile-development-and-business/' rel='bookmark' title='Permanent Link: Waterfall vs Agile: Development and Business'>Waterfall vs Agile: Development and Business</a></li><li><a href='http://www.makinggoodsoftware.com/2010/07/19/waterfall-vs-agile-qa-and-management/' rel='bookmark' title='Permanent Link: Waterfall vs. Agile: QA and Management'>Waterfall vs. Agile: QA and Management</a></li><li><a href='http://www.makinggoodsoftware.com/2009/04/27/are-you-doing-agile-or-are-you-doing-waterfall-with-some-agile-practices/' rel='bookmark' title='Permanent Link: Are you doing agile or are you doing waterfall with some agile practices?'>Are you doing agile or are you doing waterfall with some agile practices?</a></li></ol></p><img src="http://feeds.feedburner.com/~r/MakingGoodSoftware/~4/ZA2RpWO0qSo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.makinggoodsoftware.com/2010/06/02/waterfall-vs-agile-can-they-be-friends/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.makinggoodsoftware.com/2010/06/02/waterfall-vs-agile-can-they-be-friends/</feedburner:origLink></item>
		<item>
		<title>10+1 things they never teach in college about programming.</title>
		<link>http://feedproxy.google.com/~r/MakingGoodSoftware/~3/Mxq8TZZBsOI/</link>
		<comments>http://www.makinggoodsoftware.com/2010/05/27/10-things-they-never-teach-in-college-about-programming/#comments</comments>
		<pubDate>Thu, 27 May 2010 11:29:49 +0000</pubDate>
		<dc:creator>Alberto Gutierrez</dc:creator>
				<category><![CDATA[Popular]]></category>

		<guid isPermaLink="false">http://www.makinggoodsoftware.com/?p=1347</guid>
		<description><![CDATA[I still remember how naive I was  just after I finished my studies. I was convinced that I was ready to  join any software company and start shining as a top class developer.  Obviously, no long after I started working, I realized how many things I  didn&#8217;t know.
As I have been [...]


Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2010/08/16/how-to-prepare-a-programming-job-interview/' rel='bookmark' title='Permanent Link: How to prepare a programming job interview'>How to prepare a programming job interview</a></li><li><a href='http://www.makinggoodsoftware.com/2009/05/15/5-tips-for-creating-good-code-every-day-how-to-become-a-good-software-developer/' rel='bookmark' title='Permanent Link: 5 Tips for creating good code every day; or how to become a good software developer'>5 Tips for creating good code every day; or how to become a good software developer</a></li><li><a href='http://www.makinggoodsoftware.com/2009/12/03/programming-is-it-still-fun-for-you/' rel='bookmark' title='Permanent Link: Programming, is it still fun for you?'>Programming, is it still fun for you?</a></li></ol>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/LlwsGMpnKsY5pVAhXnEe5I4e-4I/0/da"><img src="http://feedads.g.doubleclick.net/~a/LlwsGMpnKsY5pVAhXnEe5I4e-4I/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/LlwsGMpnKsY5pVAhXnEe5I4e-4I/1/da"><img src="http://feedads.g.doubleclick.net/~a/LlwsGMpnKsY5pVAhXnEe5I4e-4I/1/di" border="0" ismap="true"></img></a></p><p>I still remember how naive I was  just after I finished my studies. I was convinced that I was ready to  join any software company and start shining as a top class developer.  Obviously, no long after I started working, I realized how many things I  didn&#8217;t know.</p>
<p>As I have been acquiring experience, I have  been learning things the hard way, stuff which I was never taught, and  which its understanding, is basic to become a good developer. This is my  list of the 10 things I wish I had been taught.</p>
<h2><strong>1.- We&#8217;re  always wrong.</strong></h2>
<p>Developers, among other non technical  defects, have quite <a href="http://www.makinggoodsoftware.com/2009/07/07/5-top-non-technical-mistakes-made-by-programmers/" target="_blank">big egos</a>, that´s why is very hard for us to  recognize that we were wrong about something. I&#8217;ve seen many endless  design discussions where developers will go on and on with their own  ideas&#8230; well, guess what.. We are all wrong, the only difference  between our positions is the degree of wrongness.</p>
<p>Is very  important to understand and embrace this fact, only once that we do so  we will be open to listen to others and use their own ideas to build a  better solution.</p>
<h2><strong>2.- If something can break, it will break.</strong></h2>
<p>Aka  &#8220;<a href="http://www.makinggoodsoftware.com/2009/05/12/hdd/" target="_blank">hope driven development</a>&#8220;, if you are not sure about something, if you  find yourself using the word &#8220;should&#8221;, then you are in trouble.</p>
<p>There  is only one solution for this, do whatever is necessary to make sure  that it doesn&#8217;t break, this could mean that you will have to write a  test, debug, clarify the requirements&#8230;</p>
<h2><strong>3.- All code is crap.</strong></h2>
<p>After  10 years complaining about all the code that surrounds me, I have come  to a brilliant conclusion, <a href="http://www.makinggoodsoftware.com/2009/11/09/the-four-golden-rules-to-be-a-better-software-developer/" target="_blank">all code (including mine), is crap</a>. Of course  there are many degrees of crappy code, but even the best code I&#8217;ve ever  seen is not easy to read.</p>
<p>This doesn&#8217;t mean that  is not worthy trying to make your code better, all the opposite, there&#8217;s  a huge difference between the best kind of code and the worst kind of  code.</p>
<h2><strong>4.- There is always a bug.</strong></h2>
<p><a href="http://www.makinggoodsoftware.com/2009/12/16/testing-facts-and-principles/" target="_blank">ALWAYS</a>!  Is just a matter of how hard you look for it.</p>
<h2><strong>5.- The most  important thing is the client.</strong></h2>
<p><strong> </strong>Among many  things the client doesn&#8217;t care are: the technologies you use in the  project, how many more things that required the application does&#8230; or  in general, if you use good practices.</p>
<p>And since I can  imagine how much hate comments I will get if I only leave the previous  paragraph, let me clarify what I want to say&#8230; We should never  forget the client perspective, sometimes developers use technologies or  insist in over engineering just for the sake of using best practices,  but remember, if it doesn&#8217;t add any value for the client, drop it.<br />
<strong><br />
</strong></p>
<h2><strong> 6.- Design  on paper doesn&#8217;t work.</strong></h2>
<p><strong> </strong>I used to believe that I  could put my whole design in a paper upfront, and then just fill in the  gaps, but it simply doesn&#8217;t work.</p>
<p>Software development is  complex, is hard to see all the entities and their relationships until  you don&#8217;t get the hands dirty. So keep planning and designing upfront,  it is very helpful, just don&#8217;t try too hard, and don&#8217;t take the diagrams  as contracts.</p>
<h2><strong>7.- Less is more.</strong></h2>
<p>Or  as you probably know it better: <a href="http://www.makinggoodsoftware.com/2009/08/11/for-gods-sake-make-it-easy/" target="_blank">&#8220;Keep it simple, stupid!&#8221; (KISS)</a>. So if  is not necessary drop it, because remember: &#8220;If something can break,  will break&#8221;.</p>
<h2><strong>8.- Coding is only 20% of what we do.</strong></h2>
<p><strong> </strong>Be  ready to spent 80% of your time thinking, debugging, testing, in  meetings, conversations&#8230; And all of the other activities are very  important, so you have to develop a wide range of skills, not only  technical, to become a good software developer.</p>
<h2><strong>9.- The  customer doesn&#8217;t know what he/she wants NEVER!.</strong></h2>
<p>Customers  have a necessity, or an idea, but they don&#8217;t know the details&#8230;  Software development is all about discovering the details and removing  all the uncertainty and converting them into an application.</p>
<h2><strong> 10.- Someone  has done it before.</strong></h2>
<p>So don&#8217;t reinvent the wheel, use Google,  or better yet, ask your colleagues, many times they may have done  already the same or something very similar.</p>
<h2><strong>Bonus: Hey! Our  job is cool!</strong></h2>
<p>On the bright side, <a href="http://www.makinggoodsoftware.com/2009/12/03/programming-is-it-still-fun-for-you/" target="_blank">programming is still cool!</a></p>


<p>Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2010/08/16/how-to-prepare-a-programming-job-interview/' rel='bookmark' title='Permanent Link: How to prepare a programming job interview'>How to prepare a programming job interview</a></li><li><a href='http://www.makinggoodsoftware.com/2009/05/15/5-tips-for-creating-good-code-every-day-how-to-become-a-good-software-developer/' rel='bookmark' title='Permanent Link: 5 Tips for creating good code every day; or how to become a good software developer'>5 Tips for creating good code every day; or how to become a good software developer</a></li><li><a href='http://www.makinggoodsoftware.com/2009/12/03/programming-is-it-still-fun-for-you/' rel='bookmark' title='Permanent Link: Programming, is it still fun for you?'>Programming, is it still fun for you?</a></li></ol></p><img src="http://feeds.feedburner.com/~r/MakingGoodSoftware/~4/Mxq8TZZBsOI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.makinggoodsoftware.com/2010/05/27/10-things-they-never-teach-in-college-about-programming/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		<feedburner:origLink>http://www.makinggoodsoftware.com/2010/05/27/10-things-they-never-teach-in-college-about-programming/</feedburner:origLink></item>
		<item>
		<title>How to create a good domain model. Top 10 advices</title>
		<link>http://feedproxy.google.com/~r/MakingGoodSoftware/~3/T7S09vXSspA/</link>
		<comments>http://www.makinggoodsoftware.com/2010/05/17/how-to-create-a-good-domain-model-top-10-advices/#comments</comments>
		<pubDate>Mon, 17 May 2010 23:57:39 +0000</pubDate>
		<dc:creator>Alberto Gutierrez</dc:creator>
				<category><![CDATA[Software Development Theory]]></category>

		<guid isPermaLink="false">http://www.makinggoodsoftware.com/?p=1342</guid>
		<description><![CDATA[Domain  modeling is the most important part of software design. Having a good  model allows developers and business to have a common language, which in  turn, makes much simpler the communication of requirements and the  maintenance of the application.
Having a good model is  synonym of having a low representational gap. [...]


Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2009/06/22/how-to-write-readable-code/' rel='bookmark' title='Permanent Link: How to write readable code? 5 Tips to improve your code readability.'>How to write readable code? 5 Tips to improve your code readability.</a></li><li><a href='http://www.makinggoodsoftware.com/2009/11/17/how-to-create-services-in-java/' rel='bookmark' title='Permanent Link: How to create services in Java'>How to create services in Java</a></li><li><a href='http://www.makinggoodsoftware.com/2009/10/20/5-practices-to-create-good-code/' rel='bookmark' title='Permanent Link: 5 practices to create good code.'>5 practices to create good code.</a></li></ol>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/cPvTEU6WBbn08xK0EZhl9jv7ogk/0/da"><img src="http://feedads.g.doubleclick.net/~a/cPvTEU6WBbn08xK0EZhl9jv7ogk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/cPvTEU6WBbn08xK0EZhl9jv7ogk/1/da"><img src="http://feedads.g.doubleclick.net/~a/cPvTEU6WBbn08xK0EZhl9jv7ogk/1/di" border="0" ismap="true"></img></a></p><p>Domain  modeling is the most important part of software design. Having a good  model allows developers and business to have a common language, which in  turn, makes much simpler the communication of requirements and the  maintenance of the application.</p>
<p>Having a good model is  synonym of having a <a id="kz6p" title="low representational gap" href="../2009/06/22/how-to-write-readable-code/">low representational gap</a>.  Having a low representational gap means that the main concepts and  their relationships from the real business model are represented almost  identically in the software domain model.</p>
<p>Creating a  good domain model is one of the most difficult challenges developers  have to face. What follows are some advices to create a good domain  model</p>
<h2><strong>1.- Understand the business model completely</strong>.</h2>
<p>In order to create a good domain model, developers need to look into  the detail of the the business model, not only in the surface. It  requires to understand and distill the main entities and then find their  closest equivalent software abstractions.</p>
<h2><strong>2.-  Use good names for all your domain model classes. </strong></h2>
<p><strong> </strong>Naming is critical  in software domain modeling. There are two qualities that you should be  looking for in a <a id="kani" title="good name for an entity in your model" href="../2009/05/04/71-tips-for-naming-variables/">good name for  an entity in your model</a>:</p>
<ul>
<li>Consistent. Business  and developers should always use the same term to define a single  concept.</li>
<li>Exact. A name should exactly define the  responsibilities of an entity in the domain model.</li>
</ul>
<h2><strong>3.-  Use metaphors</strong>.</h2>
<p>Many times is necessary to model abstract  operations/entities in software development, (processing orders,  simulations&#8230;), for these cases, metaphors will help you to simplify  the design of the domain model.</p>
<h2><strong>4.- Make the  domain model self-contained. </strong></h2>
<p>The domain model should contain the raw  logic of the application. Any additional logic should be contained in  some other layers, as for instance the work-flow, dependency injection,  persistence&#8230;</p>
<h2><strong>5.- Make the domain model  independent.</strong></h2>
<p><strong> </strong>The domain model shouldn&#8217;t change because the  underlying persistence implementation or the <span>UI</span> or any other layer changes.</p>
<h2><strong>6.-  <a id="knna" title="Make the domain model technically simple" href="../2009/08/11/for-gods-sake-make-it-easy/">Make the  domain model technically simple</a></strong>.</h2>
<p>It should only contain <span>POJOs</span>.  The responsibilities assigned to an entity in the domain model should  be limited to only those necessary for the software domain</p>
<h2><strong>7.-  Keep the domain model updated.</strong></h2>
<p>Synchronize it always with the  business domain model, having two <span>unsynchronized</span> models is one of the biggest sources of productivity killers.  Synchronization requires <a id="zmw3" title="refactoring" href="../2009/05/26/refactoring-the-main-5-questions-why-when-what-how-who/">refactoring</a> and enough <a id="p815" title="test coverage" href="../2009/08/25/how-to-write-a-good-test-case5-tips-to-write-better-test-cases/">test coverage</a> to make sure that  things don&#8217;t break as they are refactored.</p>
<h2><strong>8.- Make  the software domain model match the business domain model.</strong></h2>
<p>A  software domain model should be easy to understand for a business domain  model expert and it shouldn&#8217;t have any discrepancy.</p>
<h2><strong>9.-  <a id="bqfd" title="Care for the quality of the code of your domain  model." href="../2010/03/13/my-ten-development-principles/">Care for the code quality of your domain model.</a></strong></h2>
<p>There  are two reasons why you want to make sure that the code quality of the  domain model is top-notch.</p>
<ul>
<li>The domain model is the  foundation of your application, if it is bad, the whole thing can fall  apart</li>
<li>It changes a lot. There are very few areas in your code that  are going to change so many times as the domain model</li>
</ul>
<h2><strong>10.-  Test the domain model independently, and involve the customer in the  test.</strong></h2>
<p>As already mentioned, the domain model is an independent and  very important part of the architecture of the application. That&#8217;s why  is so important to pay attention to test it in isolation. Involving the  customers in this test phase can be very productive as they can identify  test cases that are likely in production and which probably are the  most interesting ones to test.</p>


<p>Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2009/06/22/how-to-write-readable-code/' rel='bookmark' title='Permanent Link: How to write readable code? 5 Tips to improve your code readability.'>How to write readable code? 5 Tips to improve your code readability.</a></li><li><a href='http://www.makinggoodsoftware.com/2009/11/17/how-to-create-services-in-java/' rel='bookmark' title='Permanent Link: How to create services in Java'>How to create services in Java</a></li><li><a href='http://www.makinggoodsoftware.com/2009/10/20/5-practices-to-create-good-code/' rel='bookmark' title='Permanent Link: 5 practices to create good code.'>5 practices to create good code.</a></li></ol></p><img src="http://feeds.feedburner.com/~r/MakingGoodSoftware/~4/T7S09vXSspA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.makinggoodsoftware.com/2010/05/17/how-to-create-a-good-domain-model-top-10-advices/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.makinggoodsoftware.com/2010/05/17/how-to-create-a-good-domain-model-top-10-advices/</feedburner:origLink></item>
		<item>
		<title>Before coding… Think!</title>
		<link>http://feedproxy.google.com/~r/MakingGoodSoftware/~3/z4sEqBRY62I/</link>
		<comments>http://www.makinggoodsoftware.com/2010/05/10/before-coding-think/#comments</comments>
		<pubDate>Mon, 10 May 2010 22:59:13 +0000</pubDate>
		<dc:creator>Alberto Gutierrez</dc:creator>
				<category><![CDATA[Software Development Theory]]></category>

		<guid isPermaLink="false">http://www.makinggoodsoftware.com/?p=1325</guid>
		<description><![CDATA[There is lately a lot of hype around engineering practices as TDD, Refactoring, keeping things simple (KISS)&#8230; and while they are great, it is important to remember that they will never replace your intelligence and experience.

Engineering practices are considered by some developers to be the best tools in your toolbox for coding but the best [...]


Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2009/08/11/for-gods-sake-make-it-easy/' rel='bookmark' title='Permanent Link: For god&#8217;s sake! Keep it simple!'>For god&#8217;s sake! Keep it simple!</a></li><li><a href='http://www.makinggoodsoftware.com/2009/08/06/5-tips-to-make-good-code-reviews/' rel='bookmark' title='Permanent Link: 5 tips to make good code reviews'>5 tips to make good code reviews</a></li><li><a href='http://www.makinggoodsoftware.com/2010/08/16/how-to-prepare-a-programming-job-interview/' rel='bookmark' title='Permanent Link: How to prepare a programming job interview'>How to prepare a programming job interview</a></li></ol>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/rpTSKnEwv8i8uy1t5z2JHFf0f6A/0/da"><img src="http://feedads.g.doubleclick.net/~a/rpTSKnEwv8i8uy1t5z2JHFf0f6A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/rpTSKnEwv8i8uy1t5z2JHFf0f6A/1/da"><img src="http://feedads.g.doubleclick.net/~a/rpTSKnEwv8i8uy1t5z2JHFf0f6A/1/di" border="0" ismap="true"></img></a></p><p>There is lately a lot of hype around engineering practices as <a href="http://www.makinggoodsoftware.com/2009/11/21/tdd-is-not-about-testing/" target="_blank">TDD</a>, <a id="culm" title="Refactoring" href="../2010/03/13/my-ten-development-principles/">Refactoring</a>, <a id="x:t1" title="keeping things simple" href="../2009/08/11/for-gods-sake-make-it-easy/">keeping things simple</a> (KISS)&#8230; and while they are great, it is important to remember that they will never replace your intelligence and experience.</p>
<p><img class="size-full wp-image-1327 alignright" title="thinker" src="http://www.makinggoodsoftware.com/wp-content/uploads/2010/05/thinker.jpg" alt="thinker" width="430" height="322" /></p>
<p>Engineering practices are considered by some developers to be the best tools in your toolbox for coding but the best tools are still the very old same ones used to solve any problem: a board, or a piece of paper, and some other good programmers to discuss the issue with.</p>
<p>Some developers, usually <a id="k8pn" title="action heroes" href="../2010/01/27/types-of-programmer-or-%E2%80%9Cwhy-can%E2%80%99t-we-be-friends%E2%80%9D/">action heroes,</a> tend to overuse engineering practices (mainly refactoring and KISS), falling in the &#8220;no need to think&#8221; mode. This particular kind of <a id="ay76" title="Hope Driven Development (HDD)" href="../2009/05/12/hdd/">Hope Driven Development (HDD)</a> is a constant source of bugs and productivity killers. It is like if we try to go from A to B only looking at our feet. It can only work when there isn&#8217;t any big, or unexpected obstacle in the path.</p>
<p>Engineering practices only help you to drive your code, but they can&#8217;t take any decisions for you, so before you start coding Think!</p>
<ul>
<li>Always <a href="http://www.makinggoodsoftware.com/2009/08/06/5-tips-to-make-good-code-reviews/">ask other colleagues to review your ideas and code</a>, and offer yourself to do the same.</li>
<li>Use meeting rooms with big boards. It might look ridiculous if your are not used to it, but drawing on a board is a great way to share your ideas.</li>
<li>Thinking beforehand doesn&#8217;t mean that you have to come up with the complete design of the application. That is impossible, but at least try to identify the big  picture of  what you need to design.</li>
<li>Don&#8217;t let the enthusiasm for engineering practices make you forget that your intelligence and analysis are your best tools to create good code.</li>
<li>Use engineering practices.  They are great and will make you a better developer, but don&#8217;t hope that they will come up with the design for you.</li>
<li>Don&#8217;t ignore parts of your design because they are complex. If you have to ignore them, do it because it is not necessary to deal with them right now. If you are going to code something and you know already that you are going to deal with some complexity try to fit how you are going to deal with it in your code.</li>
<li>When coding a part of the application, think on the big picture and how are you going to integrate that part with the rest of components of your application.</li>
<li>Remember that apart from your intelligence there are other things that are more important than the engineering practices such as <a href="http://www.makinggoodsoftware.com/2009/12/03/programming-is-it-still-fun-for-you/" target="_blank">having fun</a> or <a href="http://www.makinggoodsoftware.com/2009/07/07/5-top-non-technical-mistakes-made-by-programmers/" target="_blank">other non technical skills</a>.</li>
</ul>


<p>Related posts:<ol><li><a href='http://www.makinggoodsoftware.com/2009/08/11/for-gods-sake-make-it-easy/' rel='bookmark' title='Permanent Link: For god&#8217;s sake! Keep it simple!'>For god&#8217;s sake! Keep it simple!</a></li><li><a href='http://www.makinggoodsoftware.com/2009/08/06/5-tips-to-make-good-code-reviews/' rel='bookmark' title='Permanent Link: 5 tips to make good code reviews'>5 tips to make good code reviews</a></li><li><a href='http://www.makinggoodsoftware.com/2010/08/16/how-to-prepare-a-programming-job-interview/' rel='bookmark' title='Permanent Link: How to prepare a programming job interview'>How to prepare a programming job interview</a></li></ol></p><img src="http://feeds.feedburner.com/~r/MakingGoodSoftware/~4/z4sEqBRY62I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.makinggoodsoftware.com/2010/05/10/before-coding-think/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.makinggoodsoftware.com/2010/05/10/before-coding-think/</feedburner:origLink></item>
	</channel>
</rss>
