Abstract Factory and IoC Container in asp.net MVC


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.

Consider a simple search form, but you want to be able, with the same form, to search in different data stores.

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.

I use StructureMap here, but it could of course be swapped by any other IoC container.

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 :

public interface ISearchManager
{
    IEnumerable<ResultItem> Search(string keyword);
}

And the possible implementations :

public class TwitterSearchManager : ISearchManager
{
    public IEnumerable<ResultItem> Search(string keyword){ //Search using Twitter Api and returns a collection of Tweets }
}

public class FacebookSearchManager : ISearchManager
{
    public IEnumerable<ResultItem> Search(string keyword){ //Search in the Facebook Api and returns a collection of Status }
}

public class ForumSearchManager : ISearchManager
{
    public IEnumerable<ResultItem> Search(string keyword){ //Search in another Api and returns a collection of Forum posts}
}

You controller could then receive an ISearchManager in his constructor

public SearchController:IController
{
    private readonly ISearchManager _searchManager;

    public SearchController(ISearchManager searchManager)
    {
        _searchManager = searchManager;
    }
}

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.

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);
        …
    }
}

And the implementation of the factory often ends up like this :

class SearchManagerFactory : ISearchManagerFactory
{
    public ISearchManager Create(string provider)
    {
        switch (provider)
        {
            case "twitter" : return new TwitterSearchManager();
            case "facebook": return new FacebookSearchManager();
            ….
        }
     }
}

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.

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. They allow you to assign a key to the different implementations of an interface. With StructureMap we have IContainer.GetInstance<T>(string key); Let’s see how we can use that in our factory.

public class SearchManagerFactory : ISearchManagerFactory
{
    readonly IContainerWrapper _container;

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

    public ISearchManager Create(string provider)
    {
        return _container.Resolve<ISearchManager>(provider);
    }
}

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 :

public interface IContainerWrapper
{
    T Resolve<T>(string key);
}

public class StructureMapWrapper : IContainerWrapper
{
    private readonly StructureMap.IContainer _container;

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

    public T Resolve<T>(string key)
    {
        return _container.GetInstance<T>(key.ToLower());
    }
}

Now we’re all set. All we need to do is wire up all those components in the IoC configuration:

ObjectFactory.Initialize(x =>
{
     x.For<ISearchManager>().Use<TwitterSearchManager>().Named("twitter");
     x.For<ISearchManager>().Add<FacebookSearchManager>().Named("facebook");
});

ObjectFactory.Configure(x =>
{
     x.For<ISearchManagerFactory>()
       .Use(new SearchManagerFactory(new StructureMapWrapper(ObjectFactory.Container)))
);

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.

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.

author: Stephane | posted @ Monday, June 28, 2010 6:08 PM | Feedback (3)

Stop the war between NUnit and MSTest : Make them friends


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.

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.

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.

Roy Osherove :

  • MsTest's ExpectedException attribute has a bug where the expected message is never really asserted even if it's wrong - the test will pass.
  • 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)
  • Nunit contains a fluent version of Assert api (as already mentioned - Assert.That..)
  • NUnit was created SOLELY for the idea of unit testing. MsTest was created for Testing - and also a bit of unit testing.

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):

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();
            bool areFriends = blog.Leave();
            Assert.That(() => blog.Leave(),
                                         Throws.TypeOf(typeof(ActionNotSupportedException)).
                                         With.Message.EqualTo("You haven’t subscribed to the RSS or followed me on Twitter yet!"));
        }
}

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.

Follow me on twitter to avoid the exception : @serbrech

author: Stephane | posted @ Tuesday, March 09, 2010 7:38 PM | Feedback (10)

First sprint retrospective


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.

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.

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.

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!

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.

The retrospective has a simple goal : Continuous Improvement.
 chickenprocess

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 :

  1. Positive +++
  2. Negative ---
  3. Solutions

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.

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.

To give you an idea, here is the Retrospective report I sent by mail to everybody after the meeting :

Scrum Retrospective Report 23/09/2009

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.

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.

Positive points notified.

· Daily standup meeting +++
· Team work +++
· Collaboration
· Pair programming
· Focus ++
· Feedback on results
· General atmosphere

Negative points

I will group the items in 2 categories :

Interrupted work
· Multiple urgent projects in parallel (can't let any aside) Interrupted work
· Access to technical info for support.

Work tools optimization :
· server
· slow system (sources)
· legacy code => hard to change, hard to improve, not confident in making changes...
· Workstation problems (Tonje, Antonio, Kai)
· Burn-down chart has not been kept up to date at the end of sprint (lack of metrics)

As a result of this meeting the following practices have been agreed on :

1. 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.

2. 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.

3. Technical are being taken care of starting today (server installation)

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.

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!

Thanks to Sean Hicks and RallySoftware for their hints on twitter.

Mots clés Technorati : ,,,

author: Stephane | posted @ Friday, September 25, 2009 2:00 AM | Feedback (0)

Scrum : with a small team, in a small organization


Running scrum on a very small team is a bit confusing. You start wondering why you have all this formal meetings to communicate just with 1 other developer, or agree with your product owner. You wonder why you would set up a stand up meeting, when you could just tell your partner what’s your status, and so on.

However, I found that some of the concepts of scrum can be applied more generally at the organization level. As an example, we decided after I introduced scrum to my colleagues that the daily scrum could involve everybody. After 1 month practicing this, I can attest of the efficiency of it. A daily stand up meeting is a benefit to everybody.

  • The sales people get to know more about what’s being worked on in the development team. they have a better overview of where the product they are selling is heading, and they are able to answer some technical questions.
  • The support feedback is directed to everybody, and we are now all aware of the issues we face.
  • Developers are aware of what others developers are working on and what kind of problems they are trying to solve, even if not working on the same project.
  • Everybody gets more feedback of the current sales, and the current health of the business.

There is probably more to add to this list. The daily scrum never takes more than 15 minutes to us, and we are 10 people. Maybe the fact that we do it just before lunch helps to keep it short ;). Anyway, it solved many issues that we wouldn’t even have noticed otherwise! I can also see everybody getting more concerned about the general objectives of the company. People are not anymore just doing their job. They are now part of a team and each of us works towards the same goal. We push in the same direction. Isn’t that what scrum is about?

If you are a small organization and you don’t know how to implement some Scrum concepts, or just how to create a team feeling, this is where you have to start :

scrummoine_m

Mots clés Technorati : ,,

author: Stephane | posted @ Friday, September 25, 2009 1:07 AM | Feedback (0)

Agile planning, A different feeling?


What is agile planning?

Some detractors say that agile is about forgetting plans and documentations to rush straight to the development and go with the flow. Well, I would answer that those are people who didn’t practice agile software development really, or at least not the way it’s intended to be done. Or maybe they didn’t understand it fully.

We value working software over comprehensive documentation. (Agile Manifesto)

An agile process is not about forgetting the documentation, but about prioritizing this task lower than a working feature. Why? Because we prioritize the steps of a projects by their business value.

Planning, on the contrary, is at the center of an agile process because it is critical to the success of a software development project. One of the powerful things of Scrum is that it tells a team to gather every 2 to 4 weeks (or whatever the length of your sprint is, though it should probably be in that range), to review the plans made before, change them if necessary, and polish the plans for the next sprint.

What is important in the scrum template is not the plans that we produce during those meetings. Documents are just a snapshot of our minds at a specific moment. No scrum doesn’t emphasize the plans, but the act of planning on a regular basis, and of updating our ideas with the latest knowledge. After each sprint, a team knows more about its capacity of delivery, about the architecture of the database needed, or about the technology that provides best performance for another feature. The more information you have when you estimate and plan, the fewer mistakes you will make. Agile allows you to look at your plan from an other angle and rethink your ideas more often.

On an agile project, the next planning meeting is never far away. I think this is the key that helps the team to focus on a goal and get things done. More than the rule that scrum implements “no change inside a sprint”, knowing that we will review our vision soon helps letting the team focused on the current goal. We’ll set a new one in the next planning anyway!

Personal experience : What is different?

I can distinguish 3 situations in a software development project :

Waterfall-model

I have not been part of a big project that followed the waterfall model in a professional environment. But as every information system student (sadly), I studied it long. What I remember from it (that was 3 years ago :) ) is that it was a lot of “guessing” about how long an activity might take. We were even told during classes that our estimations were usually half of what will happen, so we should double it. Ouch! At least the message was honest and clear :  You wont get it right. I also remember that we were pushed to apply a heavy waterfall process on a 3 months school project. I had never thought again about it, but the result won’t be surprising : We made plans, wrote documentation, and diagrams… and never looked at it again…

Mess-model

I’ve also been on projects were we didn’t plan anything. Or at least never further than the classic question to the developer “how long do you think it will take?”. On this kind of project, the classic questions comes at an increasing rate. the work accumulates, and we don’t know what to do anymore. It is very hard to focus because we get multiple objectives to reach at the same time. The project I am talking about had a lot of features, but most were only half working, or sometimes the feature would even miss the original idea. Being part of this kind of project was a pain as a developer. It is not pleasant, because we don’t see the end of it. I felt stuck, and overwhelmed.

Agile-model

By this point in this article, or just by the name of this blog, it’s probably clear that this will be my preference, but I am going to make my point anyway. Agile planning starts by setting different horizons. let’s focus on the sprint and the release. When planning an agile project, every one is involved, because everyone has to commit to the plan as a team. this is an important fact that gives the “we’re in this all together ” mindset.

When making an sprint planning, we focus on a short term goal, and on a close delivery. we cut the work into user-stories. I love user-stories. It is a feature expressed by a sentence that points out its business value and the targeted user.

As a Blogger // Targeted user
I want to be able to write my post in Live Writer // Feature
So that I can post without logging in // Business Value

Thanks to this model, the risks of not seeing progress during a sprint are null. We are sure to understand the purpose and the need of the functionality.

What I can see after just 2 sprints on this same project that was following the “mess-model” is that things get done. Turning the requirements into user stories makes developers think about the end-user needs. It is also very rewarding to work in short iteration with user stories. Why? because we see our work delivers value and we can track our progress with a working software. We can also see the progress on different artifacts that Scrum recommends like the Task Board, or the Burn Down Chart.

And last, Scrum is FUN. Yes it’s fun to work as a team, to communicate more, to learn from your colleagues. Software development must be fun, and the Scrum spirit helps you with that one. Here is an example of a great Scrum workspace :) I dare any developer to say it’s not attractive!

Mots clés Technorati : ,,,

author: Stephane | posted @ Wednesday, September 16, 2009 12:17 AM | Feedback (0)

97 Things every programmer should know (or at least read)


O’Reilly has made public those pearls of wisdom that every programmer should read with this long list of small articles about varied perspectives such as coding, programming culture, algorithms, agile thinking, design pattern, style, or just advices.

Among the contributors are some of the craftsmen I keep mentioning on this blog as references like Michael Feathers and Uncle Bob Martin.

Let me give you some extracts among my favorites Things :

By Uncle Bob :

Small!

[…]The point is that functions should be small. How small? Just a few lines of code with one or two levels of indent.
"You can't be serious!" I hear you say. But serious I am. It is far better to have many small functions than a few large ones.
"But doesn't the proliferation of functions make the code more confusing?" […]

Speed Kills

[…]Bad code slows everyone down. You've felt it. I've felt it. We've all been slowed down by bad code. We've all been slowed down by the bad code we wrote a month ago, two weeks ago, even yesterday. There is one sure thing in software. If you write bad code, you are going to go slow. If the code is bad enough, you may just grind to a halt.[…]

By Kevlin Henney :

Comment Only What the Code Cannot Say

[…]What about comments that are not technically wrong, but add no value to the code? Such comments are noise.[…]

Among others you will find things like :

Happy reading! :)

97 Things Every Programmer Should Know


author: Stephane | posted @ Tuesday, September 15, 2009 10:36 PM | Feedback (0)

Transition to Agile : Easy set of rules, Hard to apply - part2


Planning Meetings

Scrum has 2 important planning ceremonies. The release planning, to have an overview of all the features we want or imagine what could fit in our software, and the iteration planning to have a short term fixed goal that the team agrees on, and more importantly, a set of features that the team commits to delivering by the end of the next sprint.

For the first iteration that we planned, we didn't separate release and iteration planning, because the project is already in a quite advanced state. We already knew what needed to be there for the release. I think that this is a mistake. Why? Because the release planning is supposed to tell the team WHERE you want to go. It gives a scope to the project, while the iteration planning will tell you more about HOW you will reach the next step. I think it is important to separate these two. We have a different picture of what is coming for the next 2 weeks (our iteration length), and what is coming for the next 2 months. Therefore, we have to watch these two horizons in a different way. Mixing them is just confusing.

The second mistake was in the process of selecting the stories for the sprint. We started our meeting by creating user stories with the product owner (that would be more the release planning). Then, we tried to prioritize them, to know what we would need to include in the upcoming  sprint. Unfortunately, in an attempt to shorten this meeting to let the product owner do what he has to do, we did that without estimating the stories. I thought we could do this later, once we know what we want to include in the sprint, and just with the members who will concretely work on the features. That was a bad mistake. The result was that the product owner wanted everything by the end of the next sprint. Of course! if the stories are not estimated, it’s hard to explain why it cannot fit. :)

 overload

Always estimate before prioritizing, even if it’s a quick and imprecise estimate. For the previous reason, and also because based on the complexity of the feature, and the time it might take (understand the price it costs…) the priority will most probably change. Maybe a feature seems mandatory to the product owner, but he might accept to delay it or even to drop it if it’s too much time consuming!

Daily Scrum

As we are a very small company, we agreed that it could be benefit if we would do a Daily Scrum all together, to synchronize everybody on what’s happening at the office. That work very well, and we still keep it under 15 minutes very easily, since we are under 10 participants.

It’s incredible how efficient this short daily meeting can be. Since it has been started, every day has its new discovery of underlying problems that were surprisingly unknown. Good feedback comes from every part : Sales guys are happy to get to know what the tech guys are working on. they have a better picture of what is coming for the customers, and the challenges that other features would bring to the developer teams. The tech guys get to know a bit more what the customer want to hear from the salesmen, what features would be nice to include, and so on. and the management is happy to have a better overview of what everybody is working on, he is finally able to redirect the employee to work on the most important things first. That makes us a little bit more flexible, but still, a lot of work before saying we are agile! :)

However, because everybody is included in this daily scrum, we even more need to summarize the information, and we need to remember that this is not a problem solving meeting. If some problem show up during this meeting, they have to be solved later. This is the only rule that absolutely has to be followed to keep this practice efficient. One other tendency that i have observed is to fall into micromanagement because pigs and chicken are all talking here.

060911-scrumtoon 

Mots clés Technorati : ,,,

author: Stephane | posted @ Sunday, September 13, 2009 1:17 AM | Feedback (0)

Transition to Agile: Easy set of rules, Hard to apply – part 1


When talking about becoming agile or using agile methods and processes, the set of rules to follow are generally quite short (at least in the case of Scrum) . Those are actually more principles as opposed to real rules. But when it comes to apply them and implementing SCRUM in the real life of a software development environment, things become more difficult very quickly, especially when lacking experience. But we all have to learn one time, and we learn best by doing mistakes

Transitioning to Scrum requires modifying the process at all the organizational levels. As Mike Cohn writes in the first chapter of his book “Succeeding with Agile”, it involves everybody, need the support from the management (the CEO in my case) but also the enthusiasm of all team members. Fortunately, all those conditions were fulfilled.

The problems come more from all the habits to change. In my organization, we have several products running in parallel. The support comes in everyday, and the lack of structure on past projects comes back to bite us in the ass on a regular basis. Change is needed, everybody agrees on that, but it is a long process that won’t show a total improvement right away. Let me detail what are the challenges I meet.

Engineering practices

Scrum does not define any engineering processes, and it is sometimes criticized by the agile community because it would let one believe that a team can be agile without changing their way of coding the software. This is wrong in my opinion. Scrum is a framework to manage agile teams on agile projects. It doesn’t mean we don’t need to follow good practices though.

“Scrum is a fine example of a Lean environment. Scrum is a set of practices; this is how you do things. Lean would be the principles behind those practices. Lean is the general principles that encourage you to use something like Scrum”. – Mary Poppiendiek http://www.infoq.com/interviews/poppendieck-lean-2007

I really started to push the move to agile several months ago, by implementing progressively those so important engineering practices. No project had unit tests associated, and the code base structure didn’t support a continuous integration set up. This has been fixed now, and every new project has its set of unit tests which run on a build server after each commit. Metrics such as code coverage can finally be measured! (We use TFS, and stick to MSTest testing framework for this particular reason).

We started pair programming more and more, and we can see the improvement instantly. Developers learn from each other. Work is more fun, and we accomplish more during one day, with a better quality.

Stop Working on parallel project

This is a hard issue. When you have several applications in production, and the developers have not been working as a team on those projects in the past, or some have moved to another job, the knowledge is not shared within the team. That means that developers are working on different areas. It is a slow process to get out of this cycle.

An issue that I can’t exactly figure out how to get rid of is the situation where a customer has a request to test what we are capable of which needs to start up a small prototype (basically a small service that could turn into bigger a project). Of course, those tasks are assigned a high priority, because it could mean signing a new customer right away. But this leads again to parallel work and prevent from using all the developers as a team on one single project during a sprint.

The solution I see here would be to demonstrate to the management the hurt that is done by starting up multiple projects at the same time on a small team. For this, the article of Stephan Schmidt “The high cost of overhead when working in parallel” is a very good start.

This is the first part of an ongoing serie of the difficulties I encounter while transitionning to Agile in my company. In the second part, I will talk more about the different Scrum meetings and the impact observed, together with the problems I find on the way.

Mots clés Technorati : ,,

author: Stephane | posted @ Thursday, September 10, 2009 1:26 AM | Feedback (0)

Agile en français !


Un site de podcast français sur les méthodes agiles vois le jour. Français, ou presque, puisque c’est François Beauregard de l’entreprise Pyxis Montréal qui à l’origine de cette superbe initiative, et qui nous fait partager ses connaissances sur les méthodes agiles en même temps que sont accent canadien =). Merci à lui!

A suivre donc, puisque les sources d’informations sur le développement de software agile en français ne sont (malheureusement) pas très fournies.

le site du podcast : http://voxagile.pyxis-tech.com/

via le blog d’Etienne

Mots clés Technorati : ,,

author: Stephane | posted @ Monday, September 07, 2009 11:08 PM | Feedback (0)

SCRUM, time to make it happen


Hey welcome on my blog! It is just starting its life. It’s young, has a basic design… well, It’s the beginning. Let me tell you about the motivation behind it.

My name is Stéphane. I am from Strasbourg in France. I’m 22 years old  and about to finish a Master of Information System at the school of Supinfo Strasbourg. During those years of studies, I have been mostly becoming a developer on the .NET platform. I am now working in a news monitoring company in Oslo.

I am passionate about .net technologies, but lately, the art of agile and its engineering practices became a second passion. I was last summer working in never.no as a trainee on a very interesting project Frikanalen (careful, it means free channels, not freak an…). On this project I was introduced to Agile with SCRUM and XP. It was a great experience, and I became very interested and enthusiastic about it, read a lot of articles, books, and watched many podcasts. Unfortunately the adventure was shortened by my studies starting again in november.

6 months ago, I started in a totally new environment here in Oslo again. Unfortunately, nobody had introduced Agile here before, and I then really felt the difference. Missing the burn-chart telling me how we’ve been doing the last days, missing the sprint backlog showing me the pile of tasks decreasing, and feeling like “trashing”, jumping from one project to another. Fortunately, mid-June was the conference NDC2009. Amazing gathering of talented speakers, so good at transmitting their knowledge and  enthusiasm! Uncle Bob Martin, Scott Hanselman, Michael Feathers, Mike Cohn, Roy Osherove, and more… The flow of agile was really motivating, and it confirmed to my colleagues the goodness I was telling them about those methods.

Enough complains, It was time to make it happen. Little by little the idea spread among the dozen of employees, managers included. Let the holidays pass and I was ready for the next move step. I held a presentation about scrum, following more or less the great the one of Mike Cohn (you can download all his powerpoint presentation here, I will make my version disponible soon here :) ). People were enthusiast, asked questions, that raised a discussion, and the decision was taken. We give it a try! We operate in 2 weeks long sprints, have a daily scrum meeting, create a backlog and try to continuously improve the process over time. I know that this alone is far from what we could call “Agile”, but we can hardly turn the whole world of everybody upside down so suddenly. It takes time, especially on the side of people habits, and for the engineering practices, but we are moving in the right direction. And I will not give up on this!

As a final word, why trying to find the perfect workplace and a team that would be already agile, with above 90 % code coverage on all its projects, and so on? I decided instead to take the leap of making it happen at my current workplace. It might not be perfect right away, it might be hard, it will be. Nevertheless, I strongly believe that the personal experience I will get from this ambition is worth more than any other. I will keep track of the progress on this blog, and hope to get some feedback of other scrum masters out there to help me achieve this hard transition.

Mots clés Technorati : ,,

author: Stephane | posted @ Wednesday, September 02, 2009 1:06 AM | Feedback (0)