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