Friday, February 23, 2007
This is far from complete but it is working and that is where I wanted to get it before letting others have a look.

Please let me know if you try it and how it works for you.  I would LOVE some feedback from someone with a different subscription from mine just to ensure that it works generically.

Currently it only supports a user story workspace and you can only update certain fields on stories and tasks. 

I'll be updating this regularly.  Eventually, I plan to post this on sourceforge but for now you can download it from me bloggernaut.

RallyDev.VSAddIn

RallyDev.zip (download) note:
note: there is an error in the "RallyDev.VSAddIn.AddIn" file found in your "My Documents\Visual Studio 2005\Addins" directory.  Please open "RallyDev.VSAddIn.AddIn" in notepad and change the line <Assembly>RallyDev.VSAddIn.dll</Assembly>
to
<Assembly>RallyDev.VSAddIn\RallyDev.VSAddIn.dll</Assembly>

I'll fix it later but my wife is hovering over me wishing me to stop working on this for a moment!
2/23/2007 12:46:43 AM (GMT Standard Time, UTC+00:00)  #    Comments [1]  |  Trackback
Monday, February 19, 2007

I'm writing an Add-In that provides a Rally Agile Project Management Software interface inside Visual Studio.  I was feeling a little jealous of the people using Microsoft Team Foundation Server and realized that the consolidated development experience is critical if one wants to get the greatest benefit from the tools they invest in.  I sometimes won't check my email for two days because Lotus Notes takes too much memory and too long to load.  Its not a matter of not caring, its a matter of limited resources and screen realestate.  I also believe that convenience encourages compliance.  Make it easy and painless and people won't mind participating. 

Now that I have a start, I am excited for what new possibilities might present themselves.  For example, if an add-in were to show a test case, then perhaps a developer could drop a test case onto a unit test to associate that code with that test case.  Hmmm, one step at a time.

I still have to work in paging, provide the ability to search tasks first (currently, I'm querying for stories then showing child tasks), provide more detail about each item, allow a user to add tasks, allow them to reassign tasks or stories to other users and link back to the appropriate url in Rallyin an intelligent way (doubleclick?).

Here are some screens to wet your appetite.

 

2/19/2007 5:05:40 AM (GMT Standard Time, UTC+00:00)  #    Comments [0]  |  Trackback
Friday, February 16, 2007

Today the Rentals.com team joined up with out RentClicks counterparts to estimate a joint project that was less the trivial in scope.  We started with a simple model of where we were and what needed to be changed, in what way, and then broke that down into digestable chunks.  We estimated each one as a team and I was surprised by how easy it was to have agreement with vague requirements.  We had a feel for what we needed to do and a hunch as to how long it would take.  Its fantastic to see the team operating as one with such efficiency.

After we logged points for each story, I counted up the points and came up with what represented, according to our time to point conversion factor, 10 developer weeks.  A quandry came over me as I realized we'd landed two months late on our current release and began to wonder how to factor that into our planning.  It is not reasonable, after all, to assume the same thing would not happen again.  A suggestion was made to bloat the estimates with a fudge factor.  This is the traditional way to account for unforeseen circumstance when plannig a project.  I think this would take 3 weeks so I'll add 30% to account for things that I haven't thought of.  I used to do this myself with amazing accuracy.  I'd tack on 30% to all my estimates and I would almost always be right on the money.  Something didn't feel right, however, with that approach.  First, this was essentially just lying strategically.  We think it will take two days so we'll say three?  Considering the whole purpose for using points in place of time is that you can adjust point translation according to circumstance...  ah hah!  The amount of work you can accomplish per iteration is called velocity.  Don't adjust the estimate, adjust the velocity!

During our last project, we lost one developer and I was split between two independent products.  I was also distracted with unrelated initiatives that sucked most of my time and energy and effectively lost me to the team.  This contributed to our missed Dec 20 target date.  Missing that date introduced the holidays which pretty much eats a week.  Then a separate, unplanned release was inserted right in the middle that caused a slide in both schedule and scope.  None of these things were accounted for in our project plan.  When something impacts the project, its important to reflect that in some visible way against one of the vectors of the project projection.  Its either going to complete on some other date or scope myust be adjusted to accomodate the changes.  The preferred approach is to adjust scope.  I did not and therefore had no idea when things would wrap up until the project started to show a steate of completion.

The appropriate thing to do would have been to subtract the scope of the developer who left and calculate the new velocity.  Then we should have reduced the scope of that iteration to meet the date planned for delivery or, if necessary, change the date. 

Looking back, this is what makes the most sense going forward.  Rather then fudge the estimates in some arbitrary way, I've tried to calculate the impact of the lost developer and the holidays and factor in the intermediate release.  From there I think a 30% factor is appropriate for adjusting or plan.  Rather then bloat the estimates, I will reduce velocity for iteration planning by 30%.  This will visibly show that we are experiencing some inefficiencies that have reduced our productivity.  If this is concering to decision makers, its a great topic for conversation.  Why have you reduced your velocity to 66 points per 2 week iteration?  ...well, our last release was off track and we're adjusting to reflect that something is slowing us down.  Our goal is to bring that back up to 80 points per week and we're activley seeking ways to accomplish that.  The reduced velocity will keep everyone aware of our present condition.  That's not a bad way to talk about it.  Its a good measure to keep an eye on and set a goal against.  In fact, the two new developers on the team will only provide a fraction of their optimal velocity until they are through the HR hurdles, familiar with the product and work flow and have their environment configured.  Now its really making sense.  We have a logical way say, "this is a two week task but it will take us a little longer."

Frankly, this was a good day

2/16/2007 12:57:35 AM (GMT Standard Time, UTC+00:00)  #    Comments [2]  |  Trackback
Wednesday, February 14, 2007

I've realized something valuable after reading http://martinfowler.com/articles/itsNotJustStandingUp.html.  A pattern emerged on my present team where people show up to work around 10am, usually.  Sometimes they call in to the scrum and lately, often really, we end up with more then one caller.  Frankly, more times then not, the caller is me.

I have been curious as to why I have shifted my schedule unintentionally and why the whole team now works a later day.  We all have families so its unlikely that anyone is out partying late into the night.  The article pointed out that the daily stand-up either starts the day or it doesn't.  If your stand-up is in the morning, make it appropriately early so that it kicks of the core work hours.  If its not on by, say 9:30, move it to the afternoon.  Psychologically, the team will associate that meeting with the beginning of their day and they won't be motivated to begin any work until that commitment is behind them.  This is perfectly normal and makes sense in hindsight but it hadn't occurred to me until I read it.  I'm not advocating strict working hours or even suggesting that a later start is inherently bad, merely that one should be aware of scheduling impact.

I believe there is tremendous value to starting the day with the daily stand up or "scrum".  Don't wait until its is convenient for everyone to be present.  Rather, schedule it at a reasonable time that everyone can agree to be ready.  9:30 for example.  The team should plan to be at work around 9, log in, check their email, reboot Windows 6 times, and fill their coffee.  Then, at 9:30, come together and hit it like gangbusters. 

Granted, if the team is composed of a bunch of young punks who like to stay out late and prefer to start work at 10 am and work into the evening hours, there is nothing at all wrong with a 10:30 scrum.  Adjust accordingly but understand the impact of your kick off time.

2/14/2007 8:02:20 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  |  Trackback
Tuesday, February 06, 2007

I use NUnit extensively.  Since discovering the virtues of unit testing a couple of years ago, I will never turn back to unverified code.  However, that does not mean I do not have, nor sometimes write, unverified code.  There's all the legacy code (technical baggage) that you carry with you as well as the things you write in a rush when you just miss the test first philosophy.  I won't go into philosophy here and I understand that generating tests from existing code violates the very priciples of test driven purists.  duly noted...

After the fact, I want the tests to be so easy to write that there just ain't no good excuse for not writing them.  Doubler to the rescue!  Doubler has several features but I was most interested in unit test generation from concrete classes.

Since I failed to make this work more then a year ago and still yearn for a tool like this, I tried again, this time with success.  It turns out to be an unexpected config requirement, possibly due to my old computer having three frameworks on it.

If you don't have Reflector, get it!  Next, download Doubler.  Unzip the dlls into a directory above Reflector.  I am not sure why this is necessary but it will fail to find references if you have it as a Reflector sub directory.

Follow the Doubler installation video.

If Reflactor fails to load the add-in, double click on the failure message to see the exception details.  Read on if you see the following message: System.BadImageFormatException: The format of the file
'ReflectorDouble.dll' is invalid.

from here

Create a config file for Reflector
(Reflector.exe.config) and add 'supportedRuntime' elements to it so
the .NET runtime will bind to the 2.0 framework 
ReflectorDouble.dll will load successfully. The other two
release versions are there to make the configuration more flexible for those who
may need it.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <startup>
      <supportedRuntime version="v2.0.50727"/>
      <supportedRuntime version="v1.1.4322"/>
      <supportedRuntime version="v1.0.3705"/>
   </startup>
</configuration>

 

 

C# | NUnit
2/6/2007 4:56:22 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  |  Trackback

Theme design by Jelle Druyts

Pick a theme: