<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.dervalp.com &#187; Agile</title>
	<atom:link href="http://blog.dervalp.com/category/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.dervalp.com</link>
	<description>Think before Programming (Public learning)</description>
	<lastBuildDate>Sat, 20 Mar 2010 22:22:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Unity Application Block</title>
		<link>http://blog.dervalp.com/2009/10/20/unity-application-block/</link>
		<comments>http://blog.dervalp.com/2009/10/20/unity-application-block/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 11:51:57 +0000</pubDate>
		<dc:creator>dervalp</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://blog.dervalp.com/?p=382</guid>
		<description><![CDATA[I know It&#8217;s a shame, but I did not know Unity Application Block. I was searching for an IOC/Depedency Injection and a colleage advised me to learn Unity. If like me, you did not know the existence of Unity (developed by Microsoft), let&#8217;s take a look on Unity&#8217;s Codeplex website. They are some nice screencasts [...]]]></description>
			<content:encoded><![CDATA[<p>I know It&#8217;s a shame, but I did not know Unity Application Block. I was searching for an IOC/Depedency Injection and a colleage advised me to learn Unity. If like me, you did not know the existence of Unity (developed by Microsoft), let&#8217;s take a look on <a href="http://www.codeplex.com/unity/">Unity&#8217;s Codeplex website</a>. They are some nice screencasts and a good doc on mdsn.</p>
<p>And you, what do you think about Unity ?</p>
<p>Note : I am also currently learning PRISM V.2, that&#8217;s a very interesting topic. PRISM uses Unity and it is why it&#8217;s important to understand how it works.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d382').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d382" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.dervalp.com/2009/10/20/unity-application-block/&amp;title=Unity+Application+Block" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.dervalp.com/2009/10/20/unity-application-block/&amp;title=Unity+Application+Block" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://blog.dervalp.com/2009/10/20/unity-application-block/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.dervalp.com/2009/10/20/unity-application-block/&amp;title=Unity+Application+Block" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.dervalp.com/2009/10/20/unity-application-block/&amp;title=Unity+Application+Block" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.dervalp.com/2009/10/20/unity-application-block/&amp;title=Unity+Application+Block" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Unity+Application+Block+@+http://blog.dervalp.com/2009/10/20/unity-application-block/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.dervalp.com/2009/10/20/unity-application-block/&amp;t=Unity+Application+Block" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d382').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d382').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://blog.dervalp.com/2009/10/20/unity-application-block/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC C# Linq to Stored procedure with Dynamic Query (a quick phone book, piece of Cake !)</title>
		<link>http://blog.dervalp.com/2009/06/12/aspnet-mvc-c-linq-to-stored-procedure-with-dynamic-query-a-quick-phone-book-piece-of-cake/</link>
		<comments>http://blog.dervalp.com/2009/06/12/aspnet-mvc-c-linq-to-stored-procedure-with-dynamic-query-a-quick-phone-book-piece-of-cake/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 18:53:02 +0000</pubDate>
		<dc:creator>dervalp</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://blog.dervalp.com/?p=330</guid>
		<description><![CDATA[Salut les Gars !
I am back with a little code I wrote today for my business. I had to create a little phone book.
The db I had to query was pretty complicated and I did not want to create all the stuff you need for an effective Linq ot Sql classes. Therefore, I decided to [...]]]></description>
			<content:encoded><![CDATA[<p>Salut les Gars !</p>
<p>I am back with a little code I wrote today for my business. I had to create a little phone book.</p>
<p>The db I had to query was pretty complicated and I did not want to create all the stuff you need for an effective Linq ot Sql classes. Therefore, I decided to use a stored procedure who retrieve all the users (about 5000) with all the information I need. This application will be a one-shot application and  his time life will be about 1 or 2 years. Also, the release date is very tight.</p>
<h2><span id="more-330"></span></h2>
<h2>Step 1 : Create the stored procedure :</h2>
<p>I am not going to teach you how to create one. All you need to know is the result of the query. My stored prod will return a row with the Email column, the city, the office address,&#8230;</p>
<p>Here, an example of a stored prod you might deal with :</p>
<pre class="brush: c;">

SELECT uEmail, Offices.ofPostalCode , uTelExtension, uMobilePhone, uDefaultLang,
Offices.ofTelephone, ofFax, rsName.value, rsCity.value as 'City', rsAdd.value as 'Address', rsAddSuite.value as 'Suite',
(Select Resources.value
FROM States
join Resources ON Resources.rsID = States.rsStName AND Resources.loID = Users.uDefaultLang
WHERE States.stID = Offices.stID) as 'State/Province',
(Select Resources.value
FROM Countries
join Resources ON Resources.rsID = Countries.rsCnName AND Resources.loID = Users.uDefaultLang
WHERE Countries.cnID = Offices.cnID) as 'Country'
FROM Users
join Offices ON Users.ofID = Offices.ofID
join Resources AS rsName ON rsName.rsID = Offices.rsOfName AND rsName.loID = Users.uDefaultLang
join Resources AS rsCity ON rsCity.rsID = Offices.rsOfCity AND rsCity.loID = Users.uDefaultLang
join Resources AS rsAdd ON rsAdd.rsID = Offices.rsOfAddress AND rsAdd.loID = Users.uDefaultLang
join Resources AS rsAddSuite ON rsAddSuite.rsID = Offices.rsOfAddressSuite AND rsAddSuite.loID = Users.uDefaultLang
join States ON States.stID = Offices.stID
join Countries ON Countries.cnID = Offices.cnID
WHERE uTelExtension != ''
</pre>
<p>I know, there is no parameter in the stored prod but we could add some later (the language for example).</p>
<h2>Step 2 : Add the Stored Procedure in a Sql to Linq Class :</h2>
<p>Create an Linq to Sql class to you solution or use one you already have. Open you Server Explorer, add a connection to the db you want simply drag and drop the stored procedure in the dbml.</p>
<p><img class="alignnone size-full wp-image-335" title="linqtostoredprod" src="http://blog.dervalp.com/wp-content/uploads/2009/06/linqtostoredprod.png" alt="linqtostoredprod" width="1143" height="648" /></p>
<h2>Step 3 : Create your pseudo Factory :</h2>
<p>So I added this in a SqlUserRepository class which I will use in my controller to retrieve data and filter it.</p>
<pre class="brush: c;">

public IEnumerable&lt;UserDB&gt; getUserFromDb()

{

LinqToUsersDataContext db = new LinqToUsersDataContext();

var res = from Users in db.spUserGetUserDB()

select new UserDB()

{

Email = Users.uEmail,

Address = Users.Address,

City = Users.City,

Country = Users.Country,

StateProvince = Users.State_Province,

MobilePhone = Users.uMobilePhone,

ofTelephone = Users.ofTelephone,

Suite = Users.Suite,

TexExtension = Users.uTelExtension

};
return res.AsEnumerable();
}
</pre>
<h2>Step 4 : Create Filter :</h2>
<p>For this example, I will create two filters, one which will filter by Email and the other which will filter by City Name. Note that we do not speak here about best design and performance. We want something quickly. I guess when you read the stored prod, you said &#8220;Oh what for a crap&#8221;, yes I know but it was an old db with bad design and I must deal with&#8230;</p>
<p>Back to our Filters, the magic word here is &#8220;this&#8221;. You create a static class with an Ubiquitous Language (DDD style, traduction explicit name) and you create some static methods. In this example, it is &#8220;this IQueryable&lt;UserDB&gt;&#8221; and if you play with an object of that type, the intellisense will detect automatically and will show it to you (Like we saw in a previous post, <a href="http://blog.dervalp.com/2009/06/12/cnet-how-to-extend-the-net-framework-easily-extension-method/" target="_blank">here</a>).</p>
<pre class="brush: text;">

public static class UserDBFilter
{
public static IQueryable&lt;UserDB&gt; LikeEmail(this IQueryable&lt;UserDB&gt; qry, string Email )
{
return from user in qry where user.Email.Contains(Email) select user;

}

public static IQueryable&lt;UserDB&gt; WithCity(this IQueryable&lt;UserDB&gt; qry, string City)
{
return from user in qry where user.City == City select user;

}
}
</pre>
<h2>Step 5 : Create the dynamic query :</h2>
<p>To test if everything works fine, I created a little integration test.</p>
<pre class="brush: c;">

[TestMethod]
public void GetRetrieveUserFromDbwithparam()
{
string email;
string city;

email = &quot;pierre@dervalp.com&quot;;
city = &quot;Tokyo&quot;;
var res = _service.getUserFromDb().AsQueryable();

if (!string.IsNullOrEmpty(email))
res = res.LikeEmail(email);

if (!string.IsNullOrEmpty(city))
res = res.WithCity(city);

Assert.IsNull(res);

}
</pre>
<p>It tried to put the string email to null, after the sting city to null, after both. In every case I receive what I wanted to have.</p>
<h2>Step 6 : Create the controller and the view:</h2>
<p>We create a basic controller and add a function ListUsers(). Per default, we render all the users (for example).</p>
<pre class="brush: c;">

private readonly SqlRepositoryService _dbService;
//CTOR (instantiate the service you need)
public MergeController()
{
_dbService = new SqlRepositoryService();
}

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult ListUsers()
{
// PagedList&lt;UserDB&gt; userlist = new PagedList&lt;UserDB&gt;(_dbService.getUserFromDb().ToList(),0, 5);

IList&lt;UserDB&gt; userlist = new List&lt;UserDB&gt;(_dbService.getUserFromDb());
return View(userlist);
}
</pre>
<p>Right-click on ListUsers() and create a strong typely-type view List. If you run the application, you will receive all the user in a List.</p>
<p>I cannot show you the result (private information inside).</p>
<h2>Step 7 : Add the search form in you view:</h2>
<p>I add my little form on the view :</p>
<pre class="brush: c;">

&lt;% using (Html.BeginForm(&quot;List&quot;,&quot;Merge&quot;))
{%&gt;

&lt;label for=&quot;Email&quot;&gt;Email:&lt;/label&gt;
&lt;%=Html.TextBox(&quot;Email&quot;)%&gt;

&lt;label for=&quot;City&quot;&gt;City:&lt;/label&gt;
&lt;%=Html.TextBox(&quot;City&quot;)%&gt;

&lt;input id=&quot;searchform&quot;  type=&quot;submit&quot; value=&quot;Search&quot; /&gt;
&lt;%}%&gt;
</pre>
<p>We add a method for the post :</p>
<pre class="brush: c;">

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult List(FormCollection forms)
{

string Email = Request.Form[&quot;Email&quot;];
string City = Request.Form[&quot;City&quot;];

var res = _dbService.getUserFromDb().AsQueryable();

if (!string.IsNullOrEmpty(Email))
res = res.LikeEmail(Email);

if (!string.IsNullOrEmpty(City))
res = res.WithCity(City);

return View(res);
}
</pre>
<p>Run the application and make a search with  an email and it works !</p>
<h2>Step 8 : Conclusion and improvements :</h2>
<p>Of course, the design of this little application could be discussed but I make a phone book in 10 minutes and I am sure that after one day of refactoring, I could put this application in a production status (Add pagination, add improvemnts for query, some javascript,&#8230;).</p>
<p>So, I am waiting for your feedback&#8230;</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d330').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d330" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.dervalp.com/2009/06/12/aspnet-mvc-c-linq-to-stored-procedure-with-dynamic-query-a-quick-phone-book-piece-of-cake/&amp;title=ASP.NET+MVC+C%23+Linq+to+Stored+procedure+with+Dynamic+Query+%28a+quick+phone+book%2C+piece+of+Cake+%21%29" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.dervalp.com/2009/06/12/aspnet-mvc-c-linq-to-stored-procedure-with-dynamic-query-a-quick-phone-book-piece-of-cake/&amp;title=ASP.NET+MVC+C%23+Linq+to+Stored+procedure+with+Dynamic+Query+%28a+quick+phone+book%2C+piece+of+Cake+%21%29" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://blog.dervalp.com/2009/06/12/aspnet-mvc-c-linq-to-stored-procedure-with-dynamic-query-a-quick-phone-book-piece-of-cake/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.dervalp.com/2009/06/12/aspnet-mvc-c-linq-to-stored-procedure-with-dynamic-query-a-quick-phone-book-piece-of-cake/&amp;title=ASP.NET+MVC+C%23+Linq+to+Stored+procedure+with+Dynamic+Query+%28a+quick+phone+book%2C+piece+of+Cake+%21%29" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.dervalp.com/2009/06/12/aspnet-mvc-c-linq-to-stored-procedure-with-dynamic-query-a-quick-phone-book-piece-of-cake/&amp;title=ASP.NET+MVC+C%23+Linq+to+Stored+procedure+with+Dynamic+Query+%28a+quick+phone+book%2C+piece+of+Cake+%21%29" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.dervalp.com/2009/06/12/aspnet-mvc-c-linq-to-stored-procedure-with-dynamic-query-a-quick-phone-book-piece-of-cake/&amp;title=ASP.NET+MVC+C%23+Linq+to+Stored+procedure+with+Dynamic+Query+%28a+quick+phone+book%2C+piece+of+Cake+%21%29" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+ASP.NET+MVC+C%23+Linq+to+Stored+procedure+with+Dynamic+Query+%28a+quick+phone+book%2C+piece+of+Cake+%21%29+@+http://blog.dervalp.com/2009/06/12/aspnet-mvc-c-linq-to-stored-procedure-with-dynamic-query-a-quick-phone-book-piece-of-cake/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.dervalp.com/2009/06/12/aspnet-mvc-c-linq-to-stored-procedure-with-dynamic-query-a-quick-phone-book-piece-of-cake/&amp;t=ASP.NET+MVC+C%23+Linq+to+Stored+procedure+with+Dynamic+Query+%28a+quick+phone+book%2C+piece+of+Cake+%21%29" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d330').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d330').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://blog.dervalp.com/2009/06/12/aspnet-mvc-c-linq-to-stored-procedure-with-dynamic-query-a-quick-phone-book-piece-of-cake/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>French blog is comming</title>
		<link>http://blog.dervalp.com/2009/06/04/french-blog-is-comming/</link>
		<comments>http://blog.dervalp.com/2009/06/04/french-blog-is-comming/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 16:27:35 +0000</pubDate>
		<dc:creator>dervalp</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://blog.dervalp.com/?p=322</guid>
		<description><![CDATA[I decide to create a french blog, I notice that they are not a lot of interesting blogs in french which talks about agile, ddd, tdd,&#8230;
So, in place to express my little knowledge in a language who is not mine, I prefer to use my native language and improve the quality of my post.
Anyway, I [...]]]></description>
			<content:encoded><![CDATA[<p>I decide to create a french blog, I notice that they are not a lot of interesting blogs in french which talks about agile, ddd, tdd,&#8230;</p>
<p>So, in place to express my little knowledge in a language who is not mine, I prefer to use my native language and improve the quality of my post.</p>
<p>Anyway, I will keep this blog for the technical parts (C#, ASP.NET,..).</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d322').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d322" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.dervalp.com/2009/06/04/french-blog-is-comming/&amp;title=French+blog+is+comming" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.dervalp.com/2009/06/04/french-blog-is-comming/&amp;title=French+blog+is+comming" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://blog.dervalp.com/2009/06/04/french-blog-is-comming/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.dervalp.com/2009/06/04/french-blog-is-comming/&amp;title=French+blog+is+comming" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.dervalp.com/2009/06/04/french-blog-is-comming/&amp;title=French+blog+is+comming" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.dervalp.com/2009/06/04/french-blog-is-comming/&amp;title=French+blog+is+comming" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+French+blog+is+comming+@+http://blog.dervalp.com/2009/06/04/french-blog-is-comming/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.dervalp.com/2009/06/04/french-blog-is-comming/&amp;t=French+blog+is+comming" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d322').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d322').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://blog.dervalp.com/2009/06/04/french-blog-is-comming/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC : Url Helper Extension CSS, Javascript, Picture</title>
		<link>http://blog.dervalp.com/2009/05/29/aspnet-mvc-url-helper-extension-css-javascript-picture/</link>
		<comments>http://blog.dervalp.com/2009/05/29/aspnet-mvc-url-helper-extension-css-javascript-picture/#comments</comments>
		<pubDate>Fri, 29 May 2009 20:16:56 +0000</pubDate>
		<dc:creator>dervalp</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[helper]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Url]]></category>

		<guid isPermaLink="false">http://blog.dervalp.com/?p=303</guid>
		<description><![CDATA[Here a url helper, maybe it can interests you :


public static class UrlHelperExtension
{
public static string Image(this UrlHelper helper, string fileName)
{
return helper.Content(string.Format(&#34;~/Content/Images/{0}&#34;,fileName));
}

public static string Stylesheet(this UrlHelper helper, string fileName)
{
return helper.Content(string.Format(&#34;~/Content/Css/{0}.css&#34;,fileName));
}

public static string Javascript(this UrlHelper helper, string fileName)
{
return helper.Content(string.Format(&#34;~/Content/Scripts/{0}.js&#34;, fileName));
}
}

And here is how I use it :
For CSS :


&#60;link rel=&#34;stylesheet&#34; type=&#34;text/css&#34; href=&#34;&#60;%= Url.Stylesheet(&#34;reset&#34;) %&#62;&#34; media=&#34;all&#34; /&#62;

For javascript


&#60;script [...]]]></description>
			<content:encoded><![CDATA[<p>Here a url helper, maybe it can interests you :</p>
<pre class="brush: c;">

public static class UrlHelperExtension
{
public static string Image(this UrlHelper helper, string fileName)
{
return helper.Content(string.Format(&quot;~/Content/Images/{0}&quot;,fileName));
}

public static string Stylesheet(this UrlHelper helper, string fileName)
{
return helper.Content(string.Format(&quot;~/Content/Css/{0}.css&quot;,fileName));
}

public static string Javascript(this UrlHelper helper, string fileName)
{
return helper.Content(string.Format(&quot;~/Content/Scripts/{0}.js&quot;, fileName));
}
}
</pre>
<p>And here is how I use it :</p>
<p>For CSS :</p>
<pre class="brush: html;">

&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;&lt;%= Url.Stylesheet(&quot;reset&quot;) %&gt;&quot; media=&quot;all&quot; /&gt;
</pre>
<p>For javascript</p>
<pre class="brush: html;">

&lt;script src=&quot;&lt;%= Url.Javascript(&quot;jquery-1.3.2.min&quot;) %&gt;&quot; type=&quot;text/javascript&quot; language=&quot;javascript&quot;&gt;&lt;/script&gt;
</pre>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d303').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d303" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.dervalp.com/2009/05/29/aspnet-mvc-url-helper-extension-css-javascript-picture/&amp;title=ASP.NET+MVC+%3A+Url+Helper+Extension+CSS%2C+Javascript%2C+Picture" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.dervalp.com/2009/05/29/aspnet-mvc-url-helper-extension-css-javascript-picture/&amp;title=ASP.NET+MVC+%3A+Url+Helper+Extension+CSS%2C+Javascript%2C+Picture" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://blog.dervalp.com/2009/05/29/aspnet-mvc-url-helper-extension-css-javascript-picture/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.dervalp.com/2009/05/29/aspnet-mvc-url-helper-extension-css-javascript-picture/&amp;title=ASP.NET+MVC+%3A+Url+Helper+Extension+CSS%2C+Javascript%2C+Picture" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.dervalp.com/2009/05/29/aspnet-mvc-url-helper-extension-css-javascript-picture/&amp;title=ASP.NET+MVC+%3A+Url+Helper+Extension+CSS%2C+Javascript%2C+Picture" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.dervalp.com/2009/05/29/aspnet-mvc-url-helper-extension-css-javascript-picture/&amp;title=ASP.NET+MVC+%3A+Url+Helper+Extension+CSS%2C+Javascript%2C+Picture" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+ASP.NET+MVC+%3A+Url+Helper+Extension+CSS%2C+Javascript%2C+Picture+@+http://blog.dervalp.com/2009/05/29/aspnet-mvc-url-helper-extension-css-javascript-picture/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.dervalp.com/2009/05/29/aspnet-mvc-url-helper-extension-css-javascript-picture/&amp;t=ASP.NET+MVC+%3A+Url+Helper+Extension+CSS%2C+Javascript%2C+Picture" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d303').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d303').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://blog.dervalp.com/2009/05/29/aspnet-mvc-url-helper-extension-css-javascript-picture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile &#8211; Test Driven Design &#8220;Need it or not Need it&#8221;</title>
		<link>http://blog.dervalp.com/2009/05/27/agile-test-driven-design-i-do-need-it/</link>
		<comments>http://blog.dervalp.com/2009/05/27/agile-test-driven-design-i-do-need-it/#comments</comments>
		<pubDate>Wed, 27 May 2009 09:43:34 +0000</pubDate>
		<dc:creator>dervalp</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[C#.NET]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://blog.dervalp.com/?p=237</guid>
		<description><![CDATA[What my colleagues often say when they hear TDD is :  &#8220;It makes no sense&#8221;, &#8220;We do not need that&#8221;, &#8220;I am doing without TDD since ten years&#8221;.
Indeed, maybe, you do not need it. Indeed, you were doing without it but if you are a developer, you should be open to new technologies, curious and [...]]]></description>
			<content:encoded><![CDATA[<p>What my colleagues often say when they hear TDD is :  &#8220;It makes no sense&#8221;, &#8220;We do not need that&#8221;, &#8220;I am doing without TDD since ten years&#8221;.</p>
<p>Indeed, maybe, you do not need it. Indeed, you were doing without it but if you are a developer, you should be open to new technologies, curious and maybe you should test it before saying that you do not need it.</p>
<p>Main bugs come from stupid errors. If you use TDD, a lot of this (syntax, typo, omission) error will emerge quickly.</p>
<h2><span id="more-237"></span></h2>
<p>To make your code testable you have to understand all the methods and objects you use. I think it is the main reason why some developers fear about TDD cause if you want to simulate your httpcontext for example, you have to understand how a httpcontext works.  Also, to do that, you have to &#8220;mock&#8221;, good tools exist to help developers to setup fake context but It cost you time.</p>
<p>Is it worth? I would say yes. In the end of the process,  you can be self-confident with your code and you can explain to everyone what you are doing without gray area. Moreover, if you change something in your code, you should be able to know if there are side effects or not. You will execute all your tests and if all your tests pass, you are safe. If not, you can immediately  know where you have to change.</p>
<p>The other great thing with TDD is the iterative way. You create a test, it fails, you write some code, you execute the test, if it is ok, you write a new test,&#8230; Like this you feel less overwhelmed by your project.</p>
<p><img class="alignnone size-full wp-image-244" title="tdd_test" src="http://blog.dervalp.com/wp-content/uploads/2009/05/tdd_test.jpg" alt="tdd_test" width="380" height="732" /></p>
<p>The definition from Wikipedia :</p>
<p><em>Test-driven development (TDD) is a software development technique that uses short development iterations based on pre-written test cases that define desired improvements or new functions. Each iteration produces code necessary to pass that iteration&#8217;s tests. Finally, the programmer or team refactors the code to accommodate changes. A key TDD concept is that preparing tests before coding facilitates rapid feedback changes. Note that test-driven development is a software design method, not merely a method of testing.</em></p>
<p>“The act of writing a unit test is more an act of design than of verification.<span> </span>It is also more an act of documentation than of verification.<span> </span>The act of writing a unit test closes a remarkable number of feedback  loops, the least of which is the one pertaining to verification of function”.<a href="http://www.amazon.com/exec/obidos/ASIN/0135974445/ambysoftinc"> Bob Martin</a></p>
<p>I guess it is what a developer should understand. Writing a test is not only test but it a act of design.</p>
<p>For example, we have an application who manage flights in the Airport X. And the client want to see all the flight details who land between 3 PM and 4 PM in that Airport. The questions are : What do you need ? Where do I have to query the data ? Also, maybe you have to deal with 5 or 6 web services.  How are you going to test this function without unit tests ?  Are you going to create a gridview to see the results and go in debug mode ? It is going to be a nightmare. But if you go step by step by using TDD, I am sure it will be easier cause when you will write your tests, you will ask the right questions and you will better understand the domain you are dealing with. It is, &#8220;Think before programming&#8221;.</p>
<p>In conclusion, I am not going to explain how TDD is working. I know some websites explain that better than me. I will give you some links that I&#8217;ve found usefull during my learning process.  Also, maybe my opinion on TDD will change, in that case, I will update this post. As usual, feeback is welcome.</p>
<p>Related Links :</p>
<p><a href="http://www.agiledata.org/essays/tdd.html">Wikipedia</a></p>
<p><a href="http://www.agiledata.org/essays/tdd.html">AgileData</a></p>
<p><a href="http://blog.wekeroad.com/tag/tdd/">Rob Connery</a></p>
<p><a href="http://haacked.com/Tags/TDD/default.aspx">Phil Haack</a></p>
<p>NOTE : For my unit tests, I am using Visual Studio 2008 SP1. I used <a href="http://www.nunit.org/index.php">Nunit</a> in the past but, for me, VS makes a good job with unit test so I&#8217;ve switched. If you have feedback in that topic, you&#8217;re welcome.</p>
<p>NOTE2 : TDD without Mocking is not TDD, I will write a post about that in the future.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d237').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d237" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.dervalp.com/2009/05/27/agile-test-driven-design-i-do-need-it/&amp;title=Agile+%26%238211%3B+Test+Driven+Design+%26%238220%3BNeed+it+or+not+Need+it%26%238221%3B" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.dervalp.com/2009/05/27/agile-test-driven-design-i-do-need-it/&amp;title=Agile+%26%238211%3B+Test+Driven+Design+%26%238220%3BNeed+it+or+not+Need+it%26%238221%3B" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://blog.dervalp.com/2009/05/27/agile-test-driven-design-i-do-need-it/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.dervalp.com/2009/05/27/agile-test-driven-design-i-do-need-it/&amp;title=Agile+%26%238211%3B+Test+Driven+Design+%26%238220%3BNeed+it+or+not+Need+it%26%238221%3B" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.dervalp.com/2009/05/27/agile-test-driven-design-i-do-need-it/&amp;title=Agile+%26%238211%3B+Test+Driven+Design+%26%238220%3BNeed+it+or+not+Need+it%26%238221%3B" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.dervalp.com/2009/05/27/agile-test-driven-design-i-do-need-it/&amp;title=Agile+%26%238211%3B+Test+Driven+Design+%26%238220%3BNeed+it+or+not+Need+it%26%238221%3B" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Agile+%26%238211%3B+Test+Driven+Design+%26%238220%3BNeed+it+or+not+Need+it%26%238221%3B+@+http://blog.dervalp.com/2009/05/27/agile-test-driven-design-i-do-need-it/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.dervalp.com/2009/05/27/agile-test-driven-design-i-do-need-it/&amp;t=Agile+%26%238211%3B+Test+Driven+Design+%26%238220%3BNeed+it+or+not+Need+it%26%238221%3B" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d237').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d237').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://blog.dervalp.com/2009/05/27/agile-test-driven-design-i-do-need-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile &#8211; One thing to do before starting a new project</title>
		<link>http://blog.dervalp.com/2009/05/13/one-thing-to-do-before-starting-a-new-project/</link>
		<comments>http://blog.dervalp.com/2009/05/13/one-thing-to-do-before-starting-a-new-project/#comments</comments>
		<pubDate>Wed, 13 May 2009 10:46:31 +0000</pubDate>
		<dc:creator>dervalp</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://blog.dervalp.com/?p=86</guid>
		<description><![CDATA[A colleague gave me an article about things you have to do and things you do not have to do during a project. I found it very funny, true and usefull. Thus, I allow myself to recopy it on my blog.
One thing to do before starting a new project
1. Invest time in getting organized.
2. Clean [...]]]></description>
			<content:encoded><![CDATA[<p>A colleague gave me an article about things you have to do and things you do not have to do during a project. I found it very funny, true and usefull. Thus, I allow myself to recopy it on my blog.</p>
<h2><span id="more-86"></span>One thing to do before starting a new project</h2>
<h3>1. Invest time in getting organized.</h3>
<h3>2. Clean up your desk.</h3>
<p>Getting rid of the visual clutter around you will establish an environment where creativity can flourish.</p>
<p><strong>3. Estimate your capabilities and capacities.</strong></p>
<p>Always ensure that you have enough time and resources to do the job justice, otherwise you&#8217;ll end up cutting corners, pushing back deadlines, and deliver a sub standard experience to the client and the user base.</p>
<h3>4. Be updated about current trends.</h3>
<p>React to, don&#8217;t blindly follow, trends. Ask yourself, &#8220;Will those new practises look as perfect tomorrow?&#8221;</p>
<h3>5. Get to know your clients.</h3>
<p>Ask questions. A lot. Don&#8217;t be afraid of sounding stupid, or being a pain in the butt. Its better you get a complete grasp of a project before embarking on it.</p>
<h3>6. Communicate and listen to your clients.</h3>
<p>Immerse yourself in who the client is and who the visitors are. Get to know the client as well as humaly possible, understand motivation, their golas and really listen to their responses.</p>
<p>Ensure you incorporate what tehys have to say into your thinking rather than deciding everything in advance.</p>
<p><strong>7. Make sure client&#8217;s needs are defined.</strong></p>
<p>Get to know what the project is all about and what the client needs. Not what they want, what they need.</p>
<p><strong>8. Make sure the scope is defined.</strong></p>
<p>Dive deep into any data you can find to help frame your project. That includes xisting product metrics, custromer feedback, market landscape, and more. Saturate yourself with context. Find out excalty what&#8217;s involved and work out (in your head, at least) how you&#8217;re going to go about delivering.</p>
<p><strong>9. Make sure the goal is defined.</strong></p>
<p>Talk with the client. Understand their goals. Once you know this, your solutions can target those goals. Without it, it&#8217;s hard to defend a design. With it, you can explain how and why your design solves those problems.</p>
<p><strong>10. Make sure you have a good plan.</strong></p>
<p>Planning on paper helps you stay focused and ensures you won&#8217;t forget any of your ideas as you dive into work. You don&#8217;t have to come up with a rigid schedule, but identifiying key milestones, and what steps you need to do to complete them BEFORE you start will help keep you on track.</p>
<p><strong>11. Affirm the vision for the project.</strong></p>
<p>Often objectives summaries and punch lists aren&#8217;t enough even a seminal vision should be reviewed in a casual brainstroming session to be sure that the initial steps taken are going to be productive and adversity averted.</p>
<p><strong>12. Observer the competion.</strong></p>
<p>You want to learn from the mistakes of your competition, event if you&#8217;re not out to make a buck on whatever it is you&#8217;re creating. Find out what they did right, what they did wrong, and what they didn&#8217;t do at all.</p>
<p><strong>13 Get money up front.</strong></p>
<p>Did is say get money up front? No matter how small you are, the client should respect you enough to pay you to get started.</p>
<p><strong>14. Clear your mind.</strong></p>
<p>If possible, finish up previous projects or at least major milestones before starting a new project. This will help take any pressure off and clear your mind.</p>
<p><strong>15. Brainstorm, sketch !</strong></p>
<p>Write down as many random ideas and sketches as you can on pieces of paper. Nothing has to make sense or have any real value but just get the ideas out on paper.</p>
<p><strong>16. Discuss your decisions.</strong></p>
<p>Bounce off your ideas with someone who has a keen critical sense. Research till you drop. Get as much collateral information about the market, similar projects. Clarify the brief till there are NO gray zones, because this will become your twilight zone.</p>
<h2>One common mistake you should always avoid developing web-sites</h2>
<p><strong>1. Starting with a strong approach</strong></p>
<p>Never assume clients have the same goals as you. At least an hour out of your day should be dedicated to email, IM, phone. Never try to fit an idea into a design or CMS.</p>
<p><strong>2. Designing before planning</strong></p>
<p>Building the design before planning the structure of the HTML templates can too often result in last-minute hacks.</p>
<p><strong>3. Thinking that at some point you&#8217;re done.</strong></p>
<p>Successful webistes are organic. You are never done.</p>
<p><strong>4. Rushing in.</strong></p>
<p>Don&#8217;t rush into production. The ink is barely dry on the contract and already they are opening Photoshop and editing code. Not enough time is given to laying the ground work. A good web designer needs to understand the context of the project. Why is the site being built ? Who is the target audience? What call to action do you want them to complete? Who is the competition? How is the sites success going to be judged? Having all of this informationat your fingertips makes the design and development stages much easier.</p>
<p><strong>5. Having a print mentality</strong></p>
<p>A web page isn&#8217;t a piece of paper, and accommodating different font sizes, or even different window sizes (or different media!) is a brilliant, powerful feature of the web.</p>
<p><strong>6. Not accounting for unknowns.</strong></p>
<p>Schedules change. Availability changes. Things happen. This kind of gets back to organization. Good planning is difficult and takes a significant amount of time.</p>
<p><strong>7. Planning up front</strong></p>
<p>Thinking about the results before you&#8217;ve done the process. Don&#8217;t just split out a site that fits the CMS template.</p>
<p><strong>8. Copying ideas.</strong></p>
<p>Looking to much at other sites to determine what the design should look like, instead of thinking about the specific needs of the site on which you&#8217;re working. Don&#8217;t worry about what the other guy is doing. Think for yourself. If all social networking sites had the same features and design, what would be the point of having more than one?</p>
<p><strong>9. Copying yourselft</strong></p>
<p>Don&#8217;t settle with what&#8217;s comfortable, or try to force a style on yourself. This goes for fonts, colors, techniques&#8230; try to something different every time. If you have a distinct style, it&#8217;s going to come through anyway, without having to force it.</p>
<p><strong>10. Putting yourself or/and your clients first.</strong></p>
<p>Don&#8217;t design or develop for yourslef or for your client instead of for your client&#8217;s visitors. The best sites always focus on the needs of the user and are designed from the outside in.</p>
<p><strong>11. &#8220;I&#8217;ll fix it later&#8221;</strong></p>
<p>Never writepoor markup or programming and say &#8220;Oh, I&#8217;ll fix that later&#8221;. That seldom works out well. No, do it right the first time. Every time.</p>
<p><strong>12. Leaving the content until last.</strong></p>
<p>Creating structure based on appearance as opposed to the role of the content. Deciding to use a heading element because &#8220;the text is big&#8221; is the wrong way to go about it. Instead you want to pick a heading element because the content in question is a page or section title/heading.</p>
<p><strong>13. Making it more complicated than it needs to be.</strong></p>
<p>Keep it simple. Do a little research; understand the technology you&#8217;re working with.</p>
<p><strong>14. Never concentrate on only one thing.</strong></p>
<p>A good site needs good concept, writing, design, and code. Details are great but you can still care for them when 90% of the work is done. Try to give every aspect of the webpage the time it deserves.</p>
<p><strong>15. Sticking to your plan &#8211; whatever happens</strong></p>
<p>Build to scale. Don&#8217;t think that your initial plan is all you want to build and end up building it in such a way that you can&#8217;t extend it later. Otherwhise you&#8217;ll be regretting it when you realize you need to add new functionality and you end up having to rewrite a lot of things.</p>
<p><strong>16. Starting to test your site with IR.</strong></p>
<p>Make sure that you always start coding for a standards compliant browser. After that you can fix the remaining IE related bugs.</p>
<p><strong>17. Norrowing your perspective.</strong></p>
<p>Don&#8217;t design looking solely at your enormous uber-designer-friendly monitor. Take a look at your design on multiple resolutions right from the very start, so you can keep problems down the line to a bare minimum. Don&#8217;t just think about today&#8217;s desktop browsers &#8211; keep forward compatibility in mind whenever possible (even if that&#8217;s just writing clean markup).</p>
<p><strong><br />
</strong></p>
<p><strong><br />
</strong></p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d86').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d86" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.dervalp.com/2009/05/13/one-thing-to-do-before-starting-a-new-project/&amp;title=Agile+%26%238211%3B+One+thing+to+do+before+starting+a+new+project" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.dervalp.com/2009/05/13/one-thing-to-do-before-starting-a-new-project/&amp;title=Agile+%26%238211%3B+One+thing+to+do+before+starting+a+new+project" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://blog.dervalp.com/2009/05/13/one-thing-to-do-before-starting-a-new-project/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.dervalp.com/2009/05/13/one-thing-to-do-before-starting-a-new-project/&amp;title=Agile+%26%238211%3B+One+thing+to+do+before+starting+a+new+project" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.dervalp.com/2009/05/13/one-thing-to-do-before-starting-a-new-project/&amp;title=Agile+%26%238211%3B+One+thing+to+do+before+starting+a+new+project" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.dervalp.com/2009/05/13/one-thing-to-do-before-starting-a-new-project/&amp;title=Agile+%26%238211%3B+One+thing+to+do+before+starting+a+new+project" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Agile+%26%238211%3B+One+thing+to+do+before+starting+a+new+project+@+http://blog.dervalp.com/2009/05/13/one-thing-to-do-before-starting-a-new-project/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.dervalp.com/2009/05/13/one-thing-to-do-before-starting-a-new-project/&amp;t=Agile+%26%238211%3B+One+thing+to+do+before+starting+a+new+project" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d86').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d86').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://blog.dervalp.com/2009/05/13/one-thing-to-do-before-starting-a-new-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile &#8211; Scrum &#8220;I believe in a better way&#8221;</title>
		<link>http://blog.dervalp.com/2009/05/08/scrum-i-believe-in-a-better-way/</link>
		<comments>http://blog.dervalp.com/2009/05/08/scrum-i-believe-in-a-better-way/#comments</comments>
		<pubDate>Fri, 08 May 2009 14:22:07 +0000</pubDate>
		<dc:creator>dervalp</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Scrum Master]]></category>

		<guid isPermaLink="false">http://www.blog.dervalp.com/?p=3</guid>
		<description><![CDATA[If Ben Harper was a developper, sure, he would have use Scrum.
First of all, Scrum is just a methodology and not a magic word that would erase all the problems during your development lifecycle. Rather than invent a new definition of Scrum, look at the wikipedia definition:
Scrum is an iterative incremental process of software development [...]]]></description>
			<content:encoded><![CDATA[<p>If Ben Harper was a developper, sure, he would have use Scrum.</p>
<p>First of all, Scrum is just a methodology and not a magic word that would erase all the problems during your development lifecycle. Rather than invent a new definition of Scrum, look at the wikipedia definition:</p>
<p><em><strong>Scrum</strong> is an iterative incremental process of software development commonly used with agile software development. </em></p>
<p>The significant word here is <strong>iterative</strong>.</p>
<p>I have sometimes lack of motivation, sure, you sometimes have too, so let&#8217;s begin with a too classic Developper Story :</p>
<p>Your project manager arrive with a really really really important project from the business with a f***** high top priority. The release date is tomorrow and you have half a post-it as specifications.</p>
<h2><span id="more-3"></span></h2>
<p>After crying, screaming, &#8220;black outing&#8221;, think about a resignation, you will begin to feel overwhelmed by the whole project.</p>
<p>At this point, take a break and learn Scrum.</p>
<p>Scrum splits an entire project in little comprehensive action. It helps us to focus on what is important now and not what you will do in one week. Sure, do not forget to think before programming but do not believe the user specification as the holy grail cause there is 95 % that it will change.</p>
<p>Overview from <a title="http://www.mountaingoatsoftware.com/" href="http://www.mountaingoatsoftware.com/" target="_blank">Mountaingoatsoftware</a></p>
<p><a href="http://webconfig.ca/wp-content/uploads/2009/04/scrummediumlabelled1.png"><img class="aligncenter size-full wp-image-50" title="Scrum overview" src="http://webconfig.ca/wp-content/uploads/2009/04/scrummediumlabelled1.png" alt="Scrum overview" width="471" height="228" /></a></p>
<p style="clear:both;">
<p><strong>Let&#8217;s play : the roles in Scrum</strong></p>
<p>Two groups : the pigs and the chickens, based on a joke.</p>
<p>Here is the joke :</p>
<p><em>A pig and a chicken are walking down a road. The chicken looks at the pig and says, &#8220;Hey, why don&#8217;t we open a restaurant?&#8221; The pig looks back at the chicken and says, &#8220;Good idea, what do you want to call it?&#8221; The chicken thinks about it and says, &#8220;Why don&#8217;t we call it &#8216;Ham and Eggs&#8217;?&#8221; &#8220;I don&#8217;t think so,&#8221; says the pig, &#8220;I&#8217;d be committed, but you&#8217;d only be involved.&#8221;</em></p>
<p>From wikipedia :  The &#8220;pigs&#8221; are committed to building software regularly and frequently, while everyone else is a &#8220;chicken&#8221; &#8211; interested in the project but really indifferent because if it fails they&#8217;re not the pigs &#8211; that is, they weren&#8217;t the ones that committed to doing it. The needs, desires, ideas and influences of the chicken roles are taken into account, but are not in any way allowed to affect, distort or get in the way of the actual Scrum project.</p>
<p><em><strong>PO</strong></em> (product owner) :  <em>The Product Owner represents the voice of the customer. He/she ensures that the Scrum Team works with the &#8220;right things&#8221; from a business perspective. The Product Owner writes user stories, prioritizes them and then places them in the product backlog</em></p>
<p>Generally, it is you manager or you project leader. The point here is to convinced you manager to play that game. Explain him that Scrum will help to have a better view on what the team is doing. Do not forget to show him the product backlog and the sprint backlog with the little graphics (we will see that later). I am sure he will be happy. If he is still not convinced, try a strike or organize a strategy with your colleagues to find out how you could transform you boss as a product owner. There are plenty of arguments on the net and in your head.</p>
<p><strong>ScrumMaster (or Facilitator</strong>) :</p>
<p><em>Scrum is facilitated by a ScrumMaster, whose primary job is to remove impediments to the ability of the team to deliver the sprint goal. The ScrumMaster is not the leader of the team (as the team is self-organizing) but acts as a buffer between the team and any distracting influences. The ScrumMaster ensures that the Scrum process is used as intended. The ScrumMaster is the enforcer of rules. A key part of the ScrumMaster&#8217;s role is to protect the team and keep them focused on the tasks in hand.</em></p>
<p>He acts like a shield for the team. Avoid the word <em>&#8220;self-organizing</em>&#8221; near you boss, he will be scared to lose the control. Another tip, use the word Facilitator instead of Scrummaster, the scrum master is not a manager or a leader so avoid the full of meaning word &#8220;master&#8221;. If you want, you can change your facilitator at the end of the sprint. It brings fresh air for the facilitator himselft and the developer who will take the place for a sprint. Sure, you facilitator can act as a developer or you have a strange team (Yeah, I know It happens).</p>
<p><strong>The Team </strong><br />
<em>The team has the responsibility to deliver the product. A team is typically made up of 5–9 people with cross-functional skills who do the actual work (designer, developer, tester, technical communicator, etc.).</em></p>
<p>I know, sometimes you are only 3 or 4. I do not know if there is a minimum number. I used to develop in a 3 people team with SCRUM and I can say that It is make sense.</p>
<p>Try to find a funny name for you team, it can bring fun and jokes&#8230;</p>
<p>The Team, the ScrumMaster and the PO are pigs.</p>
<p><strong>The User :</strong></p>
<p><em>The software is being built for someone</em></p>
<p><strong>Stakeholders (customers, vendors) :</strong></p>
<p><em>These are the people who enable the project and for whom the project will produce the agreed-upon benefit[s], which justify its production. They are only directly involved in the process during the sprint reviews.</em></p>
<p>Sometimes Stakeholders are Users, prepare to have a lot of changes in your specifications.</p>
<p><strong>Managers :</strong></p>
<p><em>People who will set up the environment for the product development organizations.</em></p>
<p><strong>The important thing : communication</strong></p>
<p>- The Daily Scrum</p>
<p>Each morning (8:00 am for us), the scrumaster (see below) organize a little meeting (about 15 minutes) next the cofee machine and ask three questions to all the team members:</p>
<ul>
<li>What did you do yesterday ?</li>
</ul>
<ul>
<li>What will you do today?</li>
</ul>
<ul>
<li>Are there any impediments in your way?</li>
</ul>
<p style="clear:both;">The daily scrum is not a place for debating technical problems and personal life, it is just a quick overview which helps everyone to know what you are doing, what you finished and what you will do.  You have to answer quickly like &#8220;I need some help for &#8230;&#8221; or &#8220;I am strugling with &#8230;&#8221; At the end of the meeting, if the SCRUM master cannot help you directly, he will take the point and decide who can help you or what you have to do.</p>
<p>- Sprint Planning Meeting (PO + ScrumMaster + Team + others significant manager or custormers)</p>
<p>At the beginning of the sprint cycle (every 15–30 days)</p>
<p>The Sprint Planning Meeting is attended by the Product Owner, Scrum Master, the entire Scrum Team, and any interested and appropriate management or customer representatives. During that meeting, you define which tasks will move from the product backlog to the sprint back log. Team members ask questions to know more about specifications and together you define the priority of the tasks. The PO and the ScrumMaster define the goals for the sprint. After the sprint planning meeting, the team discuss if the goals are realistic and negotiate with the PO if there is some change to do.</p>
<p>Please, PO and ScrumMaster, involve your team in the sprint planning meeting, it is very important that the team feels the issues and the context of the projects they are working on.</p>
<p>- Sprint Review Meeting (PO + ScrumMaster + Team + others significant manager or custormers)</p>
<p>During that meeting you will discuss on what is completed and not completed. The limit of time is 4 hours. I encourage the team to make a demo of the new features. It is more visual than a powerpoint. The most important for the team is that the general aims are achieved. If not, it is normal in the beginning cause you need more experience to evaluate correctly the sprint backlog.</p>
<p>- Sprint Retrospective (PO + ScrumMaster + Team)</p>
<p>Discuss on what it works and did not work.  Two main questions during that meeting : What went well during the sprint? What could be improved in the next sprint? Do not hesitate to improve you process.</p>
<p>The artifacts :</p>
<p>The product backlog :</p>
<p>From Mountain Goat Software : The Product Backlog is the master list of all functionality desired in the product. When a project is initiated there is no comprehensive, time-consuming effort to write down all foreseeable tasks or requirements. Typically, a project writes down everything obvious, which is almost always more than enough for a first sprint. The Product Backlog is then allowed to grow and change as more is learned about the product and its customers.</p>
<p>Here is the example of a product backlog : <a href="http://webconfig.ca/wp-content/uploads/2009/04/simpleproductbacklog.xls">simpleproductbacklog</a></p>
<p>The Sprint backlog (wikipedia):</p>
<p>This is a greatly detailed document containing information about how the team is going to implement the features for the upcoming sprint. Features are broken down into tasks; as a best practice tasks are normally estimated between four and 16 hours of work. With this level of detail the whole team understands exactly what to do, and anyone can potentially pick a task from the list. Tasks on the sprint backlog are never assigned; rather, tasks are signed up for by the team members as needed, according to the set priority and the team member skills. The sprint backlog is property of the Team. Estimations are set by the Team. Often an according <strong>Task Board</strong> is used to see and change the state of the tasks of the current sprint, like &#8220;to do&#8221;, &#8220;in progress&#8221; and &#8220;done&#8221;.</p>
<p>Example of a sprint backlog <a href="http://webconfig.ca/wp-content/uploads/2009/04/template_scrumsprint_backlog.xlsx">template_sprint_backlog</a></p>
<p style="clear:both;">You can find others sprint backlog and product backlog after a quick search on google&#8230;</p>
<p style="clear:both;"><strong>Conclusion</strong></p>
<p style="clear:both;">Like I said before, Scrum is not magic and does not resolve lack of communication, programming errors and environment difficulties. It is just a methodology. I choose Scrum because you do not need 100 hours to understand it and to setting up the environment. You only need your team and some post-it. Managers and customers can easily understand how it works and this is not necessary the case in an IT department. Scrum helps also to avoid an overwhelmed feeling and brings democracy in a team (which is a good thing in my point of view). This is the team who is responsible and not a particular member. It brings also cohesion and team spirit.  I advise you to try it and see if it can fit to your team.</p>
<p style="clear:both;">I hope I give you a good overview.</p>
<p style="clear:both;">If you have questions, do not hesitate to ask me by comments.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d3').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d3" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.dervalp.com/2009/05/08/scrum-i-believe-in-a-better-way/&amp;title=Agile+%26%238211%3B+Scrum+%26%238220%3BI+believe+in+a+better+way%26%238221%3B" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.dervalp.com/2009/05/08/scrum-i-believe-in-a-better-way/&amp;title=Agile+%26%238211%3B+Scrum+%26%238220%3BI+believe+in+a+better+way%26%238221%3B" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://blog.dervalp.com/2009/05/08/scrum-i-believe-in-a-better-way/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.dervalp.com/2009/05/08/scrum-i-believe-in-a-better-way/&amp;title=Agile+%26%238211%3B+Scrum+%26%238220%3BI+believe+in+a+better+way%26%238221%3B" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.dervalp.com/2009/05/08/scrum-i-believe-in-a-better-way/&amp;title=Agile+%26%238211%3B+Scrum+%26%238220%3BI+believe+in+a+better+way%26%238221%3B" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.dervalp.com/2009/05/08/scrum-i-believe-in-a-better-way/&amp;title=Agile+%26%238211%3B+Scrum+%26%238220%3BI+believe+in+a+better+way%26%238221%3B" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Agile+%26%238211%3B+Scrum+%26%238220%3BI+believe+in+a+better+way%26%238221%3B+@+http://blog.dervalp.com/2009/05/08/scrum-i-believe-in-a-better-way/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.dervalp.com/2009/05/08/scrum-i-believe-in-a-better-way/&amp;t=Agile+%26%238211%3B+Scrum+%26%238220%3BI+believe+in+a+better+way%26%238221%3B" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.dervalp.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d3').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d3').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://blog.dervalp.com/2009/05/08/scrum-i-believe-in-a-better-way/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
