Thursday, August 19, 2010

TFS 2010 ScrumForTeamSystem burndown chart modification

Well, I've been working on adding a total workload measure on our burndown chart, as well as a custom burndown for a subset of team members. A lot of the standard rules are not being followed by the team due to a reluctance to really embrace the process, so there are a lot of items moving between team members, and coming in and out of the sprint, so it has highlighted a few issues in the ScrumForTeamSystem charts.

Firstly, the default burndown filters on "not in" ( "done", "deleted", "descoped") SBTs. This works fine for the standard burndown, as "Done" items have 0 time remaining, so omitting them them simply improves the report performance.

However, adding the 'total workload' to the burndown incorrectly shows a 'drop' in workload when an item is completed, which is incorrect (we only what to drop the workload when an item is removed from the list). Simply adding 'done' items to the burndown list resolved this, so that was easy enough.

The second issue was somewhat more confusing until it 'clicked'. The initial capacity was vastly overstated, so I removed some items from the sprint. The team also decided to swap in some new items to the sprint as well (removing a few others).

After making the changes, I ran the burndown again, and noticed the workload, and work remaining, had risen, despite moving items out of the sprint.

Trying to figure this one out was a nightmare due to the complexity of the report query. In the end, it turns out that the burndown query was filtering incorrectly (possibly to try improve performance).

The way the query should work is that it returns the 'latest work item revision per day', and then checking if the work item is in the sprint (and/or assigned to a specific team member). The way it works was that it returned the 'latest work item revision in the sprint per day' which meant that the revision where it was still in the sprint was returned, so it was still included in the chart.

Once I realised what was going on (no mean feat the way the queries are designed, it took me half the day to figure it out), it was simple enough to fix.

1) Remove the filter that limits the revision list to the specified iteration (so we get all the revisions for each day)
2) add the iteration (and assigned to person) to the revision list
3) when aggregating the 'last revision item per day' items, filter by iteration and person.

All Fixed, now back to getting click-once working on TFS Build 2010 (we have a couple of custom requirements that will be the subject of another post.

Wednesday, August 18, 2010

On how I might be a hypocrite

I recently started looking at Windows Phone 7, and based on my previous anti-iphone/ipad rant I figured I would hate it. My main criticisms still apply (vendor lock-in, forced application registration, no multi-tasking), there is something about the architecture that I really do like.

I figure my excitement comes from the fact that MS make really good application development tools and frameworks, and as an MS developer for some time now, I am pretty confident that should I want to do something with my phone, I could probably do it. The thing I don't like is the need to register as a developer ($99/annum fee), but that does give you access to the MS store if you do decide to release any software. I guess if I was an apple person, I would feel the same way about the iPhone, so it makes me a big fat hypocrite.

Although it will be heavily criticised for the lack of multitasking, which will kill it until they bring it in (work on this is 'in progress' but won't make launch), I think the other application design features are pretty cool.

The way you interact with core services is very interesting. As each application uses isolated storage, it is not possible to create an application that will access the images on your phone directly. However, in order to list and select images from an application is as simple as invoking an image chooser service, that loads the built-in image browser/selector ('tombstoning' the parent application), and when complete, the parent application is restored. This effectively provides a number of core features within the phone accessible, with a consistent interface and usability.

Sure if the core services suck, then you are stuck with them, but it does improve phone security (you can't create a malicious app that will upload people's photos to the internet) and usability (to find a photo in app A is exactly the same as app B).

The other thing I really like is the messaging service that MS has developed for Windows Phone 7. There are core APIs that will allow web services to publish events to windows phone accounts (not individual phones). Once linked, your phone can receive these message much like push email notifications. These messages can update an application icon (to show that a new email has arrived on the home screen for example), or it can 'pop-up' a message on the screen no matter what you are doing, and you can choose to action the pop-up (loading the appropriate app), or ignore it and continue working. This sort of thing has been around a while, for example when a new sms comes through on my nokia I get a popup that i can action to load the sms. However the scope of this service is such that it can be used for any notification via web services.

An example of how this could be cool is a turn-based multiplayer game where each player receives a notification message when it is your turn. The game does not need to have each player running the app at the same time, each player can open the game, make a move, and the game server will issue the update to each other player. The players can receive the notification and view the move (loading the game), or ignore it until they have the opportunity to load the game in their own time. When it is a particular player's turn, they can also be notified by a separate message letting them know that the rest of the players are waiting.

Anyway, I admit it, I am somewhat excited by Windows Phone 7 and will be playing with the beta development tools. Early next year I will be due for a new phone, and by then there should be a couple of windows phone 7 devices out, so it'll be interesting to see whether android, wp7, or nokia will be my poison this time.

Tuesday, August 17, 2010

VMWare Server + Windows 7 = RAM hog

I've been annoyed in the past with installing Dev tools on my PC and having so many new services slowing my gaming down that I spend hours killing services just to get things back to normal again.

So I figured I would try creating VMWare virtual machines for the dev tools, and just run the images when I want to do some development. It also lets my try a few things that I hadn't had the opportunity to explore, such as Windows Server set up and configuration. The plan was to set up a Windows Server 2008 R2 system with TFS (Team Foundation Server) to track a mini project, and a Windows 7 development PC to do the work on.

Installing the base OSs was straight forward, and the individual VMs ran well enough with 1gb ram assigned to them. TFS stand-alone (TFS application and database on the one server) requires 2gb ram before it will even install however, which begain the problems. Adding the extra ram took a reboot, TFS installed, and everything seemed to be ok. Time to boot the Dev machine.

I figured i'd be good to go with them both running, 3gb for the VMs, 1gb for my host system (win7 64bit, 4gb ram). Unfortunately running both at once brought my system to a grinding halt. Fail. Ok, so try drop the server image to 1.5gb, slightly better, but not much.

Finally, dropping both systems to 1GB allowed them to run in tandem, but unfortunately the TFS image ran too slowly to be of much use. Fail.

In the end I decided to drop the TFS server, and just stick to a 2gb development image. It works well, I am just a little disappointed because I was hoping to use the TFS instance to help plan the mini-project, and having a plan in place might help with my procrastination.