Agile Coaching: The daily stand-up meeting

I’m starting a new blog series based on my experiences doing agile coaching at clients.  Along with agile projects in .Net, my company also offers agile coaching and training.  Right now, the agile coaching practice consists of me, but I’m actively working on finding people to expand that practice.  I started doing this March 2007, and since then, I’ve seen some of the same patterns repeated in very different businesses.  In this series of posts, entitled “Agile Coaching”, I’ll talk about some of the common solutions to the common problems I’m finding.  This first installment is about a daily stand-up meeting.

The daily stand-up meeting

At several clients, I’ve seen developers who aren’t co-located.  Many organizations value individual offices, and what I observed is that sometimes developer won’t communicate much day-to-day.  Perhaps there is a weekly development meeting where folks report on status.  I attended one of these, and one developer reported spending the entire last week on a single blocking issue.  A whole week!  I recommended the instituting of a daily stand-up meeting immediately.  This would give a daily sync-up opportunity for the development team.  There are plenty of other things to improve, but a daily stand-up meeting is low-hanging fruit.  It is easy to implement and returns immediate gains.

What is it?

Every morning (I like 0830 or 0900), gather the development team in the same area.  That area could be a hallway, a meeting room or whatever space is available for standing.  No chairs allowed.  The meeting should be over in under 10 minutes.  The agenda:

  • What I accomplished yesterday
  • What I plan to accomplish today
  • What issues are blocking progress

Every person in the development team reports on the three items to the rest of the team.  This is not a report to management or the coach/scrummaster/project manager.  This is so each person has a clear understanding of what is going on.  When issues are exposed early, others can help resolve them quickly.  I recommend this practice be used in every software organization. 

ASP.NET MVC: Goodbye SmartBag, Hello ViewDataExtensions

A while back, I thought up the idea of the SmartBag, which has a very friendly API for working with viewdata objects.  With the December CTP, adding objects to ViewData was a bit difficult, but now that the ViewData property is an IDictionary on the Controller base class, getting objects in is very easy.  If you like this post, subscribe to my feed at http://feeds.feedburner.com/jeffreypalermo.

Consider the following usage

[Test]
public void ShouldRetrieveSingleObjectByType()
{
    var bag = new Dictionary<string, object>();
    var url = new Url("/asdf"); //arbitrary object
    bag.Add(url);
 
    Assert.That(bag.Get<Url>(), Is.EqualTo(url));
    Assert.That(bag.Get(typeof(Url)), Is.EqualTo(url));
}

We are adding a Url object to the dictionary, and then we can retrieve the object through the Get<T> method or by passing the type.  No need for a string key if only a single Url is in the dictionary.  If you have multiple Url objects, you can fall back to keys, or you can pass in a Url[] and then Get<Url[]>(). 

In CodeCampServer, I’ve removed SmartBag and added these ViewDataExtensions.  These are extension methods to IDictionary<string, object> and System.Web.Mvc.ViewData.  In my opinion, System.Web.Mvc.ViewData should inherit from Dictionary<string, object>, so maybe that will happen in the next release.

I’ve added ViewDataExtensions to MvcContrib, so you you’d like to use them, just build the trunk of MvcContrib, and you’ll have them.  Look at CodeCampServer for widespread use of these extension methods.  Strongly typed views don’t scale when the application complexity increases, but these view data extensions make working with the dictionary a snap.  My annoyance factor is very low with viewdata now.

MvcContrib is a free, open-source project.  Feel free to use it and contribute patches to it.  Building it takes less than 1 minute on my box, and the build runs all 840 unit tests to verify the features continue to work.

So much easier to test plain ASP.NET MVC controllers!!

I was having a hard time easily testing controller classes with the MVC Framework December CTP.  Now it’s easier.  For some background, I’m writing ASP.NET MVC in Action for Manning, so I’m going through all kinds of scenarios, and in the first chapter with the tiny little Hello World samples, it’s now easier to test these.  Consider the following controller:

 

using System.Web.Mvc;
 
namespace MvcApplication.Controllers
{
    public class HelloWorld1Controller : IController
    {
        public void Execute(ControllerContext controllerContext)
        {
            controllerContext.HttpContext.Response.Write(
                "<h1>Hello World1</h1>");
        }
    }
}

 

And here’s my unit test:

 

using MvcApplication.Controllers;
using NUnit.Framework;
using NUnit.Framework.SyntaxHelpers;
 
namespace MvcApplicationTest.Controllers
{
    [TestFixture]
    public class HelloWorld1ControllerTester
    {
        [Test]
        public void ShouldRender()
        {
            var response = new ResponseWriteStub();
            var contextStub = new HttpContextStub(response);
            var controller = new HelloWorld1Controller();
 
            controller.Execute(new ControllerContextStub(controller, contextStub));
 
            Assert.That(response.ActualWritten, Is.EqualTo("<h1>Hello World1</h1>"));
        }
    }
}

 

Pretty darned simple.  Below are my stub classes.

 

 

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
 
namespace MvcApplicationTest
{
    public class ControllerContextStub : ControllerContext
    {
        public ControllerContextStub(IController controller)
            : base(new RequestContext(new HttpContextStub(), new RouteData()), controller)
        {
        }
 
        public ControllerContextStub(IController controller, HttpContextBase contextBase)
            : base(new RequestContext(contextBase, new RouteData()), controller)
        {
        }
    }
}

 

 

using System.Web;
 
namespace MvcApplicationTest
{
    public class HttpContextStub : HttpContextBase
    {
        private readonly HttpResponseBase _response;
 
        public HttpContextStub(HttpResponseBase response)
        {
            _response = response;
        }
 
        public HttpContextStub()
        {
            
        }
 
        public override HttpResponseBase Response
        {
            get { return _response; }
        }
    }
}

 

 

using System.Web;
 
namespace MvcApplicationTest.Controllers
{
    public class ResponseWriteStub : HttpResponseBase
    {
        public string ActualWritten;
 
        public override void Write(string s)
        {
            ActualWritten = s;
        }
    }
}

Extreme Programmers wanted in Austin, TX

It’s time again.  I’m hiring.  If you’d like to work for me at Austin’s leading agile consulting company, please apply through our website job posting.  The applications all get routed to me, so if you apply and fit well, I’ll end up giving you a call.  We’re hoping to hire locally, so if you already live in Austin, TX, that’s a plus.

Here’s our team page.

Here’s the job posting.

For a little more on what what do, read here.

We are a corporate member of the AgileAlliance.

For information on our Agile Boot Camp.

And, finally, if you’d like me to visit your company for a day to give you an agile assessment of your software department, just let us know.  I’m doing more and more of those lately.

Original altnetconf (cli_dev) list has now been deprecated

http://tech.groups.yahoo.com/group/cli_dev/ is closed.  A poll of the group showed that this was the best course of action.  The archives are still there.  Anyone who was a member can still search the archives.  Unfortunately, Yahoo doesn’t provide a mechanism for public message access for a closed group, so this is as good as I could get it.  All messages are still there.

If you would like to participate in more Alt.Net stuff, go to http://tech.groups.yahoo.com/group/altdotnet/

March Agile Boot Camp was fun

Last week I taught the March Headspring Agile Boot Camp.  Since it’s a course for developers, it’s all about Extreme Programming, process, and architecture decisions that lead to a zero-friction project.   Stay tuned to my rss feed at http://feeds.feedburner.com/jeffreypalermo because I’ll be releasing the source code for the reference application we work on during the course.  It’s a work order system, and it has all the hairy things you expect in a line of business application, like statuses, state transitions, notifications, etc. 

Mke Palermo (MVP and Microsoft Regional Director) was in my course, and I was glad to see him again.  No we’re not related, but he’s a good friend, and I normally only see him at conferences. 

John Blackman (former Microsoft employee – moved to Austin, TX) was also in the course, and he wrote a review on his blog.

Karthik from Telligent Systems was in the January course, and his blog review is here.

MVP Summit Party with Palermo planning in full swing

Party with Palermo: MVP Summit 2008 Edition – rsvp here!!

April 13, 2008 @ 7:00PM – 10:00PM
Jillian’s:  http://www.jilliansbilliards.com/
731 Westlake Ave N, Seattle, EA
Ph: 206-223-0300
 
Cover charge is 1 business card.  This will get you in the door and register you for the grand prize drawings.
  • Free to attend
  • Free fingerfood
  • Free drink
  • Free swag

KEEP TABS ON HTTP://www.PartyWithPalermo.com — THIS IS WHERE THE INFORMATION WILL BE POSTED.
Feel free to blog and link back to this site. 

ASP.NET MVC Framework on the Polymorphic Podcast

If you don’t care about podcasts, stop reading now.  If you don’t care about ASP.NET MVC, stop reading now.  If you haven’t stopped reading, then please continue. :-), and subscribe to my feed at http://feeds.feedburner.com/jeffreypalermo

Craig Shoemaker recently interviewed me on the Polymorphic Podcast regarding the MVC Framework and the MvcContrib project.

I, along with Ben Scheirman and Dave Verwer, are writing ASP.NET MVC in Action for Manning, and I talk a little about that.

I spoke a lot about MvcContrib.  I really have to brag on the folks contributing to MvcContrib and to Eric Hexter, who does a lot of work to keep that project’s CI setup going.  Here’s the latest build report below.  If you are curious how you can get nearly 1000 unit tests runing in an automated build and have it run in less than 3 minutes, pull down the source and see how the build and tests are put together.

————————————————————-

CruiseControl.NET Build Results for project MVCContrib (web page)


BUILD SUCCESSFUL

Project:
MVCContrib

Date of build:
2008-03-19 13:43:57

Running time:
00:02:12

Integration Request:
IntervalTrigger triggered a build (IfModificationExists)

Last changed:
2008-03-19 13:43:29

Last log entry:

Patch #1003 - kbaley
Patch includes:
- the ability to use TestControllerBuilder with controllers that have constructor arguments
- associated unit test

Tests run: 802, Failures: 0, Not run: 0, Time: 40.704 seconds

All Tests Passed

Modifications since last build (4)

GoDaddy could use some unit tests

For those who frequent the TechPodcasts network, like I do, you’ve probably heard of the 10% discount code for GoDaddy.com orders.  Everybody and their brother gives away GoDaddy 10% off codes.  The problem is that today it doesn’t seem to work.  Could it be a hidden policy (fine print) or could GoDaddy use some unit tests around thier shopping cart total calculations?