<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Fun with Agile practices and .Net Development</description><title>Alsagile</title><generator>Tumblr (3.0; @alsagile)</generator><link>http://alsagile.com/</link><item><title>This is how I want all my tools. I had lots of ideas for better...</title><description>&lt;iframe src="http://player.vimeo.com/video/36579366" width="400" height="225" frameborder="0"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;This is how I want all my tools. I had lots of ideas for better tools popping up in my head while watching this video. The kind of paradigms that he talks about are applicable to most of the creative processes. It’s really amazing to watch, whether you understand code or not.&lt;/p&gt;

&lt;p&gt;via &lt;a href="http://boingboing.net/2012/02/15/technology-interaction-and-eth.html"&gt;http://boingboing.net/2012/02/15/technology-interaction-and-eth.html&lt;/a&gt;&lt;/p&gt;</description><link>http://alsagile.com/post/17704567198</link><guid>http://alsagile.com/post/17704567198</guid><pubDate>Thu, 16 Feb 2012 09:32:34 +0100</pubDate></item><item><title>myNoSQL: Document Databases Compared: CouchDB, MongoDB, RavenDB</title><description>&lt;a href="http://nosql.mypopescu.com/post/978742866/document-databases-compared-couchdb-mongodb-ravendb"&gt;myNoSQL: Document Databases Compared: CouchDB, MongoDB, RavenDB&lt;/a&gt;: &lt;blockquote&gt;
&lt;p&gt;Brian Ritchie has two posts (&lt;a href="http://weblogs.asp.net/britchie/archive/2010/08/12/document-databases.aspx" rel="external" target="_blank"&gt;☞ here&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/britchie/archive/2010/08/17/document-databases-compared-mongodb-couchdb-and-ravendb.aspx" rel="external" target="_blank"&gt;☞ here&lt;/a&gt;) covering three document databases: CouchDB, MongoDB, and RavenDB concluding with the matrix below:&lt;/p&gt; &lt;div id="" class="embedded"&gt;
&lt;a href="http://weblogs.asp.net/britchie/archive/2010/08/17/document-databases-compared-mongodb-couchdb-and-ravendb.aspx" rel="external nofollow" target="_blank"&gt;
&lt;img src="http://media.tumblr.com/tumblr_l7f33oSmzG1qappj8.png"/&gt;&lt;/a&gt;
&lt;/div&gt; &lt;p&gt;But before using this as a reference material there are a couple of corrections needed:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;They have some special characteristics…&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;</description><link>http://alsagile.com/post/17419690001</link><guid>http://alsagile.com/post/17419690001</guid><pubDate>Sat, 11 Feb 2012 11:50:28 +0100</pubDate></item><item><title>Git Is Simpler Than You Think</title><description>&lt;p&gt;&lt;a href="http://nfarina.com/post/9868516270/git-is-simpler" class="tumblr_blog"&gt;nfarina&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It was about one year ago that we switched to Git. Previously, we used Subversion, through the Mac app &lt;a href="http://versionsapp.com"&gt;Versions&lt;/a&gt;, which (rightly) holds an Apple Design Award.&lt;/p&gt;

&lt;p style="text-align:center;position:relative;left:-20px;"&gt;
    &lt;img src="http://cl.ly/1w3c282U1I34073u0W3D/screen2.png"/&gt;&lt;/p&gt;

&lt;p&gt;I made the executive decision to leave our comfy world of Versions because it seemed clear that Git was winning the Internet. There was much grumbling from my teammates, who were busy enough doing actual work thank you very much.&lt;/p&gt;

&lt;p&gt;But I pressed forward. We signed up for accounts on &lt;a href="http://github.com"&gt;Github&lt;/a&gt;. We learned how to type &lt;code&gt;'git push'&lt;/code&gt; and &lt;code&gt;'git pull'&lt;/code&gt;. We became more confident. Git is just like any other source control system! But it wasn’t long before one of our devs called me over to look at a…situation.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://nfarina.com/post/9868516270/git-is-simpler"&gt;Read More&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://alsagile.com/post/9929253471</link><guid>http://alsagile.com/post/9929253471</guid><pubDate>Wed, 07 Sep 2011 22:54:39 +0200</pubDate><category>git</category></item><item><title>Silverlight unit testing - Test Not Initialized</title><description>&lt;p&gt;It has been a year now that I work on a silverlight project. As any respectful developer I write unit tests. But in silverlight, things are not all that easy when it comes to testing.&lt;/p&gt;

&lt;p&gt;First of all, the unit testing framework doesn’t come out of the box. Instead, you will find it in the &lt;a href="http://silverlight.codeplex.com," title="Silverlight Toolkit on Codeplex"&gt;Silverlight Toolkit&lt;/a&gt;. On the bright side, this allow a separate release cycle than the one from silverlight.&lt;/p&gt;

&lt;p&gt;Then, you might be aware that you need to run your silverlight tests in the browser, because the silverlight runtime can only run in the browser, or hosted by a wpf application since silverlight 4.&lt;br/&gt;
A very important part of unit testing is to have a fast feedback loop. I want to run my tests often, and therefore, I want them to run fast. Having to run them in the browser unfortunately doesn’t help it.&lt;/p&gt;

&lt;p&gt;Those are common complains from developers who write unit tests on a silverlight project.&lt;br/&gt;
But the issue I will expand is different.&lt;/p&gt;

&lt;h4&gt;TestInitialize Bug&lt;/h4&gt;

&lt;p&gt;In MsTest framework, if you mark a method with a [TestInitialize] attribute, it will run before each tests. As the attribute name suggest, this is useful to initialize the state of the system before running each tests of the fixture.&lt;br/&gt;
Here is the problem. if the initialization fails, I really want to see my test fail. But with the silverlight testing framework, if an exception is thrown in the testinitialize method, &lt;strong&gt;the test will not fail&lt;/strong&gt;. This can result in &lt;strong&gt;false positive&lt;/strong&gt;, and that’s an issue because I can’t trust my tests anymore.&lt;/p&gt;

&lt;p&gt;To work around it we have a simple &lt;a href="https://gist.github.com/1160978" title="Gist"&gt;base class&lt;/a&gt; that looks something like the following :&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;public class TestBase
{
    private Exception _exception;

    [TestInitialize]
    public void TestInitialize()
    {
        try
        {
            Initialize();
        }
        catch (Exception exception)
        {
            _exception = exception;
        }
    }

    [TestMethod]
    public void InitializeTest()
    {
        if (_exception != null)
        {
            throw new InvalidOperationException("Failure running test setup", _exception);
        }
    }

    public virtual void Initialize() { }
}  
&lt;/pre&gt;

&lt;p&gt;So when I write a test fixture now, I don’t add a TestInitialize attribute above a method. Instead, I inherit from this base class and override the Initialize method. But this is obviously a dirty workaround. My tests still don’t fail. What I get is another test that tests the initialize method…
At least I have a failing test when an exception is thrown.&lt;/p&gt;

&lt;p&gt;If you don’t like this easy workaround, you might want to have a look at the &lt;a href="http://xunitcontrib.codeplex.com/"&gt;xunit.contrib project&lt;/a&gt;, or at &lt;a href="http://greenicicleblog.com/2010/04/27/nunit-for-silverlight-updated/"&gt;nunit for silverlight&lt;/a&gt;. These have other advantages that I will expand in another post.&lt;/p&gt;</description><link>http://alsagile.com/post/9217189577</link><guid>http://alsagile.com/post/9217189577</guid><pubDate>Sun, 21 Aug 2011 21:15:00 +0200</pubDate></item><item><title>ocourtois:

Une animation intéressante sur les multiples façons...</title><description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/O94kYyzqvTc?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://www.ocourtois.fr/post/6821627733" class="tumblr_blog"&gt;ocourtois&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Une animation intéressante sur les multiples façons de mesurer les retours sur investissement du design de l’expérience utilisateur (façon animation RSA). &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Toujours pas convaincus?&lt;/p&gt;</description><link>http://alsagile.com/post/6950118221</link><guid>http://alsagile.com/post/6950118221</guid><pubDate>Sun, 26 Jun 2011 23:30:00 +0200</pubDate></item><item><title>Abstract Factory and IoC Container in asp.net MVC</title><description>&lt;p&gt;Sometimes, you want to be able to change the implementation of a component depending on a variable that you don’t control at design time, a user action for example. This will be a lot easier to explain if we use a concrete example. I will present the problem that I faced to illustrate the usage of the method.&lt;/p&gt;

&lt;p&gt;Consider a simple search form, but you want to be able, with the same form, to search in different data stores.&lt;/p&gt;

&lt;p&gt;You already know that more data stores will be added to the requirements, so you also need a way to extend this it easily. The following solution supposes that you know the basic concepts of dependency injection and how to setup your mvc application to take advantage of it.&lt;/p&gt;

&lt;p&gt;I use StructureMap here, but it could of course be swapped by any other IoC container.&lt;/p&gt;

&lt;p&gt;Consider that you will have different implementations of this Search action, which will build the query in different ways, and each will make calls to different APIs. You create an interface ISearchManager as follow :&lt;/p&gt;

&lt;pre class="brush:csharp"&gt;public interface ISearchManager 
{ 
    IEnumerable&lt;ResultItem&gt; Search(string keyword); 
}&lt;/pre&gt;

&lt;p&gt;And the possible implementations :&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;public class TwitterSearchManager&amp;#160;: ISearchManager 
{ 
    public IEnumerable&lt;ResultItem&gt; Search(string keyword){ //Search using Twitter Api and returns a collection of Tweets } 
}&lt;/pre&gt;

&lt;pre class="brush:csharp"&gt;public class FacebookSearchManager : ISearchManager 
{ 
    public IEnumerable&lt;ResultItem&gt; Search(string keyword){ //Search in the Facebook Api and returns a collection of Status } 
}&lt;/pre&gt;

&lt;pre class="brush:csharp"&gt;public class ForumSearchManager : ISearchManager 
{ 
    public IEnumerable&lt;ResultItem&gt; Search(string keyword){ //Search in another Api and returns a collection of Forum posts} 
}&lt;/pre&gt;

&lt;p&gt;You controller could then receive an ISearchManager in his constructor&lt;/p&gt;

&lt;pre class="brush:csharp"&gt;public SearchController:IController 
{ 
    private readonly ISearchManager _searchManager;

    public SearchController(ISearchManager searchManager) 
    { 
        _searchManager = searchManager; 
    } 
}&lt;/pre&gt;

&lt;p&gt;And you can happily search in different store without changing anything in the controller… Well, not exactly, because your IoC controller doesn’t have a clue of what radio button is ticked when it creates your SearchController, therefore it cannot resolve the dependency on ISearchManager. What you need is a factory to create the correct instance of ISearchManager depending on a parameter.&lt;/p&gt;

&lt;pre class="brush:csharp"&gt;public SearchController:IController 
{ 
    private readonly ISearchManagerFactory _searchManagerFactory;

    public SearchController(ISearchManagerFactory searchManagerFactory) 
    { 
        _searchManagerFactory= searchManagerFactory; 
    }

    public ActionResult Index(string provider, string keywords) 
    { 
        var searchManager = _searchManagerFactory.Create(provider);    
        var results = searchManager.Search(keywords); 
        … 
    } 
}&lt;/pre&gt;

&lt;p&gt;And the implementation of the factory often ends up like this :&lt;/p&gt;

&lt;pre class="brush:csharp"&gt;
public class SearchManagerFactory : ISearchManagerFactory 
{ 
    public ISearchManager Create(string provider) 
    { 
        switch (provider) 
        { 
            case “twitter” : return new TwitterSearchManager(); 
            case “facebook”: return new FacebookSearchManager(); 
            … 
        } 
     } 
}&lt;/pre&gt;

&lt;p&gt;Well, that’s ok if you have a very small dependency graph, but you still, you start to spread the configuration of your dependencies in multiple places. You have an IoC container which decides which type each controller should receive, and you have this switch statement hidden inside a factory to decide which SearchManager. If my SearchManager have further dependency on, let’s say, a QueryBuilder (because the queries need to be built differently to satisfy the different APIs), it really becomes messy.&lt;/p&gt;

&lt;p&gt;It would really be nicer if my factory could ask my container which implementation to return, with all its dependencies resolved. This turns out to be rather easy with most of the IoC containers.
  &lt;br/&gt;They allow you to assign a key to the different implementations of an interface. With StructureMap we have IContainer.GetInstance&lt;T&gt;(string key); Let’s see how we can use that in our factory.&lt;/p&gt;

&lt;pre class="brush:csharp"&gt;public class SearchManagerFactory : ISearchManagerFactory 
{ 
    readonly IContainerWrapper _container;

    public SearchManagerFactory(IContainerWrapper container) 
    { 
        _container = container; 
    }

    public ISearchManager Create(string provider) 
    { 
        return _container.Resolve&lt;ISearchManager&gt;(provider); 
    } 
}&lt;/pre&gt;

&lt;p&gt;That was easy. Our factory is now asking our IoC container for a ISearchManager, but I don’t really want my factory to know which IoC Container I am using. Instead, I have this simple IContainerWrapper. Its implementation for StructureMap is straight forward :&lt;/p&gt;

&lt;pre class="brush:csharp"&gt;public interface IContainerWrapper 
{ 
    T Resolve&lt;t&gt;(string key); 
}
public class StructureMapWrapper : IContainerWrapper 
{ 
    private readonly StructureMap.IContainer _container;

public StructureMapWrapper(StructureMap.IContainer container) 
{ 
    _container = container; 
} 

public T Resolve&lt;T&gt;(string key) 
{ 
    return _container.GetInstance&lt;T&gt;(key.ToLower()); 
} 


}&lt;/pre&gt;

&lt;p&gt;Now we’re all set. All we need to do is wire up all those components in the IoC configuration:&lt;/p&gt;

&lt;pre class="brush:csharp"&gt;ObjectFactory.Initialize(x =&amp;gt; 
{ 
     x.For&lt;ISearchManager&gt;().Use&lt;twittersearchmanager&gt;().Named(“twitter”); 
     x.For&lt;ISearchManager&gt;().Add&lt;facebooksearchmanager&gt;().Named(“facebook”); 
});

ObjectFactory.Configure(x =&gt; 
{ 
     x.For&lt;ISearchManagerFactory&gt;() 
       .Use(new SearchManagerFactory(new StructureMapWrapper(ObjectFactory.Container))) 
);&lt;/pre&gt;

&lt;p&gt;This is the trick. I first set up the ISearchManager implementation, and give them a name in the Initialize method of StructureMap. Since I need to pass a reference of the container to my factory, the container needs to be already initialized when that happens. That’s why I set up the ISearchManagerFactory dependency after the initialization is done, in the Configure method.&lt;/p&gt;

&lt;p&gt;That’s it, the dependency to the SearchManagers is now resolved by the IoC Container, depending on a runtime parameter. Why I think this is better? because that way, you keep all the configuration in one single place. You could even potentially change that configuration without recompiling if you configure your IoC using an XML config file.&lt;/p&gt;</description><link>http://alsagile.com/post/9707604191</link><guid>http://alsagile.com/post/9707604191</guid><pubDate>Sat, 26 Jun 2010 17:38:00 +0200</pubDate><category>Asp.net</category><category>IoC</category><category>MVC</category></item><item><title>Stop the war between NUnit and MSTest : Make them friends</title><description>&lt;q&gt;&lt;b&gt;Note : this is an old article from my previous blog that I ported here&lt;/b&gt;&lt;/q&gt;

&lt;p&gt;Recently, Roy Osherove blogged NUnit vs. MsTest: NUnit wins for Unit Testing in an answer to this StackOverflow question  My team is using TFS2008 (and soon 2010) for source control. When I introduced Continuous Integration and Unit Testing in my team, I considered using NUnit and a separate continuous integration server like CruiseControl.NET.&lt;/p&gt;
&lt;p&gt;
Setting this up is a burden. I quickly changed my mind and decided to stick with TFS for the continuous integration. When it comes to the testing framework, you can get TFS to run NUnit, but you will loose the the nice reports including detailed tests results, code coverage data, and so on… no point.
&lt;/p&gt;
&lt;p&gt;
So I run my test using MSTest. Just like many other, and as Roy points out, the API from Assert API from NUnit is much nicer than MSTest one.
&lt;/p&gt;
&lt;q&gt;
Roy Osherove :
&lt;p&gt;MsTest’s ExpectedException attribute has a bug where the expected message is never really asserted even if it’s wrong - the test will pass.&lt;/p&gt;
&lt;p&gt;Nunit has an Assert.Throws API to allow testing an exception on a specific line of code instead of the whole method (you can easily implement this one yourself though)&lt;/p&gt;&lt;p&gt;
Nunit contains a fluent version of Assert api (as already mentioned - Assert.That..)&lt;/p&gt;
…&lt;br/&gt;&lt;p&gt;NUnit was created SOLELY for the idea of unit testing. MsTest was created for Testing - and also a bit of unit testing.
&lt;/p&gt;
&lt;/q&gt;
&lt;p&gt;
Here is the trick, it’s really so easy. I wonder how come nobody mentions it anywhere. so hit me if that’s a No-No, but I haven’t got any problem so far (most recent MVC project having about 150 Unit Tests and growing):
&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Assert = NUnit.Framework.Assert;  
… 
    [TestClass]   //MSTest 
    public class AlsagileTests 
    { 
        [TestMethod]   //MSTest 
        public void MakeFriends_NUnitAndMSTestWorkTogetherFTW_ReturnsTrue() 
        { 
            var blog= new Alsagile(); 
            bool areFriends = blog.MakeFriends(); 
            Assert.That(areFriends, Is.True); //NUnit  
        } 


        [TestMethod]   //MSTest 
        public void Leave_ReaderLeavesMyBlog_ThrowsActionNotSupportedException() 
        { 
            var blog = new Alsagile(); 
            Assert.That(() =&gt; blog.Leave(), 
            Throws.TypeOf(typeof(ActionNotSupportedException)). 
            With.Message
                   .EqualTo("You are not following me on Twitter yet!")); 
        } 
}

&lt;/pre&gt;
&lt;p&gt;
That’s it! The test is now using MSTest test runner, but all the assert will be performed by NUnit. I can take full advantage of the great Fluent Assert.That(…) API and other Assert methods from Nunit, and still use the automated build and tests and report power from TFS.
&lt;/p&gt;
&lt;p&gt;Follow me on twitter to avoid the exception : &lt;b&gt;@serbrech&lt;/b&gt;&lt;/p&gt;</description><link>http://alsagile.com/post/9705266525</link><guid>http://alsagile.com/post/9705266525</guid><pubDate>Tue, 09 Mar 2010 00:00:00 +0100</pubDate></item><item><title>First sprint retrospective</title><description>&lt;p&gt;It has been now 4 weeks that I started the transition to scrum in my company. The first sprint was very chaotic, and I couldn’t even qualify is as a sprint, We had a backlog that we discussed with the product owner, and our business expert, but it was not well prioritized, we didn’t estimate the items, neither did we select a set of features to commit to. It was a first shot, trying to get the feeling of it, and warm up a bit the tools and the idea behind this. It was chaotic, but still better than no plans at all, we could feel the difference brought by the communication required when creating a product backlog, and during the daily scrums.&lt;/p&gt;

&lt;p&gt;Unfortunately, In the rush, I forgot to set up a retrospective after the first sprint. Well, it was a lot of improvement required on my side, to coach the team, and drive us to better practices, I knew already what was missing, and that was enough work to achieve before asking them for feedback about our new processes and practices.&lt;/p&gt;

&lt;p&gt;The second sprint was already slightly better, we tried to create our first sprint backlog, estimated the user stories using planning poker, and we created a burn-down chart to monitor our progress.&lt;/p&gt;

&lt;p&gt;The result was quite good. We managed to finish almost all the stories that we planned, And the few items that had not been finished were due to a incredible amount of support suddenly coming in. Consequently the sprint review was very satisfying for everybody. the progress was obvious, and we could really be proud of showing our work for the first time!&lt;/p&gt;

&lt;p&gt;This time I am happy that I didn’t forget the sprint retrospective. But before telling you about the retrospective, you need to know more about how we implemented some scrum concepts in our organization.&lt;/p&gt;

&lt;p&gt;The retrospective has a simple goal : &lt;b&gt;Continuous Improvement&lt;/b&gt;. &lt;/p&gt;

&lt;p&gt;The process is quite simple, and give a maximum of feedback on how efficient is your workflow. Here is how I proceeded. I used a white board on which I drew 3 Columns :&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Positive +++  &lt;/li&gt;
&lt;li&gt;Negative —-  &lt;/li&gt;
&lt;li&gt;Solutions&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;I first asked each person what were the positive points they could notice during the last 2 weeks and listed them in the positive column. It is very important to start with the positive things not to cast a cloud over the meeting… After that I asked each person what were impediments that hindered their work during the last 2 weeks, and listed them in the negative column. And finally I invited everybody to find a way to reduce the problems they just mentioned, and list the propositions in the Solution problems.&lt;/p&gt;

&lt;p&gt;We concluded the meeting by agreeing on few practices that we will follow during the next iteration, and see in the next retrospective if they improved the quality of our process.&lt;/p&gt;

&lt;p&gt;To give you an idea, here is the Retrospective report I sent by mail to everybody after the meeting :&lt;/p&gt;

&lt;q&gt;
&lt;h2 style="color:Grey;"&gt;Scrum Retrospective Report 23/09/2009&lt;/h2&gt;

&lt;p&gt;As I presented it to all of you 1 month ago, being agile is not only about being able to accept changes easily, it is also to commit to a continuous improvement of the processes and the quality of our work.&lt;/p&gt;

&lt;p&gt;We will be having this meeting after each sprint, to get a feedback from everybody on the current practices, and try to find ways to improve them.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Positive points&lt;/th&gt;
&lt;th&gt;Negative points&lt;/th&gt;
&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="350px"&gt;
&lt;ul&gt;&lt;li&gt;Daily standup meeting +++ &lt;/li&gt;
&lt;li&gt;Team work +++ &lt;/li&gt;
&lt;li&gt;Collaboration &lt;/li&gt;
&lt;li&gt;Pair programming &lt;/li&gt;
&lt;li&gt;Focus ++ &lt;/li&gt;
&lt;li&gt;Feedback on results &lt;/li&gt;
&lt;li&gt;General atmosphere &lt;/li&gt;
&lt;/ul&gt;&lt;/td&gt;
&lt;td width="350px"&gt;
I will group the items in 2 categories :&lt;br/&gt;&lt;b&gt;Interrupted work&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Multiple urgent projects in parallel (can’t let any aside) Interrupted work &lt;/li&gt;
&lt;li&gt;Access to technical info for support.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Work tools optimization&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;server &lt;/li&gt;
&lt;li&gt;slow system (sources) &lt;/li&gt;
&lt;li&gt;legacy code =&gt; hard to change, hard to improve, not confident in making changes &lt;/li&gt;
&lt;li&gt;Workstation problems (Tonje, Antonio, Kai) &lt;/li&gt;
&lt;li&gt;Burn-down chart has not been kept up to date at the end of sprint (lack of metrics) &lt;/li&gt;
&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4&gt;As a result of this meeting the following practices have been agreed on :&lt;/h4&gt;

&lt;ol&gt;&lt;li&gt;Support should be first given a rough estimate of the complexity of it by the developers, then discussed with Kai or Morten to prioritize it according to the time it would take.&lt;/li&gt;
&lt;li&gt;Small meeting to update the burn-down chart will be hold every day. Ultimately, having those metrics done by the system would be the best.&lt;/li&gt;
&lt;li&gt;Technical are being taken care of starting today (server installation)&lt;/li&gt;
&lt;/ol&gt;&lt;/q&gt;

&lt;p&gt;After this sprint, I feel confident that we are heading to the right direction. The next sprint will be better, and the one after even better! This is what we must aim at.&lt;/p&gt;

&lt;p&gt;The detail that was very nice to get as a feedback is that we welcomed a new employee 3 days earlier. Like everybody else, I invited him to be part of the Daily scrums, and to give his opinion in this first retrospective. His positive contribution was probably the most positive I marked on the board : General atmosphere. I strongly believe that the new processes we adopted are a playing a major factor in this feeling. :]. Scrum makes your office a place you enjoy working!&lt;/p&gt;

&lt;p&gt;Thanks to Sean Hicks and RallySoftware for their hints on twitter.&lt;/p&gt;</description><link>http://alsagile.com/post/9746593594</link><guid>http://alsagile.com/post/9746593594</guid><pubDate>Fri, 25 Sep 2009 16:35:00 +0200</pubDate></item></channel></rss>

