Thursday, August 21, 2008
#
Last I attended a TFS User Group meeting in Minneapolis. Bill Maurer explained how Microsoft used Team Foundation Server to build the next release of Visual Studio.
It was really interesting to hear how the development team used TFS to track their own work. The most interesting thing to me was to hear about how TFS is being used to manage Java projects (Not at Microsoft of course!) Previously it had not occurred to me to consider TFS as anything other than a .NET development tool. But, of, course, data is data, and it makes perfect sense now that TFS would be used to track any type of project.
Bill mentioned that quite frequently, the software development team doesn't want management to have this detailed kind of visibility into the process. "If they knew how bad things really were, we would get fired!" Ten years ago I started putting Manufacturing Execution Systems into factories in my previous life as a Chemical Engineer. The operators nearly staged a mutiny over the fact that their actions would be tracked down to every operation they performed on every item. One plant was a union plant and the union was looking into whether or not the contract even allowed this type of data to be tracked! Management was also unsure... they were spending millions to dollars to implement systems that had no direct affect on the product.
Now, of course, you cannot imagine a manufacturing plant that does not have traceability down through the process for each unit produced. The operators work in an environment of reasonable expectations and an optimized process. No one thinks twice about logging into a system and then scanning each unit as it comes down the line.
Similarly, I think that one day no one will believe that we actually tried to build software without tracking this kind of data. The value of the data will be many times the cost of purchasing and implementing the system that supports it. Bill's comment to the teams that are concerned about giving management an actual picture of what is going on is that management will finally understand what can actually be accomplished, and remove bottlenecks if performance is unsatisfactory. "The working environment for the software team will actually improve", Bill says.
I do believe in the promised of optimized performance through Defining metrics, measuring what matters, analyzing the data, and improving and controlling the process. I have lived it in my years as a manufacturing engineer. TFS promises to be a huge asset to the teams that choose to use it for this purpose. I am anxious for Microsoft to give us a hint as to what Rosario will do. Perhaps at the upcoming PDC. I guess we will just have to wait.
Blogging so that I can find these again when I have time to watch them...:)
Ø Introduction to Microsoft Dynamics CRM, Susan Sauls
Ø Intro to SQL Server Data Services, Soumitra Sengupta
Ø The Spy Who Hacked Me! , Alex Smolen, Rudolph Araujo
Ø How Microsoft SQL Server Helps You to Lower Your Cost of Storage, Torsten Grabs
Ø Microsoft System Centre Virtual Machine Manager 2008: Overview, Edwin Yeun
Ø A Hackers Diary: How I Can Hack Your Vulnerable Services and How You Can Stop Me, Marcus Murray
Ø Advances Microsoft SQL Server PowerShell Tips and Tricks, Dan Jones
Ø Technical Introduction to Microsoft System Center Data Protection Manager 2007, Jason Buffington
Ø Introduction to Microsoft Forefront Code Name "Stirling", Brad Wright
Ø Hyper-V Architecture, Scenarios and Networking, Jeff Woolsey, Mike Sterling
Ø Windows, PowerShell, and Windows Management Instrumentation: Unveiling Microsoft's Best Kept Secret, Ben Pearce
Ø Windows Logins Revealed, Mark Minasi
Ø Virtualization and Security: What Does it Mean For Me? Steve Riley
Ø Windows Security Boundaries Mark Russinovich
Ø How to Build Your next Generation IT Infrastructure Using Windows Server 2008, Corey Hynes
Ø Deploying Windows Server 2008 Hyper V and System Centre Virtual Machine Manager 2008 Best Practices Edwin Yeun, Alan Stewart
Ø Deploying Microsoft Dynamics CRM, Ryan Casey
Ø Microsoft System Centre Service Manager Paul Ross, Travis Wright
Ø Windows Server 2008 Hyper-V: Scripting & Programmatic Management for Fun & Profit (VBS & PowerShell), John Kelbley, Alexander Lash
Saturday, August 02, 2008
#
A colleague of mine is organizing a community event to benefit Children's Hospitals and Clinics of Minnesota.
The Charity Fragathon will be held September 24, 2008 at the Microsoft office in Bloomington.
This is an amazing hospital, not only due to the world-class health care, but for the family experience they provide.
So come on out, have some fun, and benefit this great cause!
I'll be there, and I don't even game!
Thursday, July 31, 2008
#
There is a great new site dedicated to educating developers on all sorts of topics. It is run by developers, and the contributors are developers.
My first episode had been released: Creating a Project in Team Foundation Server!
I am really excited to be a part of this great project... look for more episodes from me coming soon!
Thursday, July 03, 2008
#
We've all done it. More often than we'd like to admit. Yesterday I spent half a day working on an issue where the end result turned out to be SO SIMPLE as to make me ashamed to call myself a developer. There was the feeling as I slogged through the problem that "This shouldn't be this difficult". When the problem resolved with 4 simple lines of code, my giddiness with solving the problem was tempered by my feeling like a complete idiot for having spent half a day producing those four lines. Hearing that I was the third person to tackle this issue, that two others had tried and failed made me feel only marginally better.
Software development is extremely rewarding and mind-numbingly frustrating at the same time. You can go for days, even weeks, where progress is steady and the project marches along right on schedule, maybe even a bit ahead. And then you hit it. The problem you can't solve - the functionality you can't quite implement, the bug that you just can't fix. And there you sit, working on one stupid little thing for hours, perhaps a day or more. You go home feeling as if you have made no progress, as if you have produced nothing for all your laboring at the keyboard. Then you finally solve the problem, and all you have to say is "Duh!" And the task that was supposed to take 4 hours has morphed into a two-day effort. And now you're behind schedule.
When estimating projects, I know to add 30% to whatever number I come up with. This is my "fudge factor". A fudge factor that allows for the inevitable "Duh" moments not accounted for up front, even if I make an effort to be conservative as to the anticipated productivity in my estimate. Breathing room for the things that pop up during a project.
Thirty percent sounds like a lot. And it is. I always feel as if I am padding the estimate. It is tempting to to be the hero who can deliver the project in an impressively timely manner. But the stress and loss of credibility of delivering late more than cancels that out. And time and time again, I am grateful for that thirty percent. I am glad that I planned for "Duh!"
What was my latest "Duh!" you ask?
I was working on a web application that was using the asp menu control. One section of the app was to function as a wizard, with "Continue" and "Back" buttons serving as the navigation, and the menu simply indicating which step of the wizard the user is at for non-authenticated users. The desired behavior for a non-authenticated user was that the menu be completely disabled, with the menu items indicating which step the user is at by which one is selected. An authenticated user would be have the ability to use the menu to land on which ever step (page) they desire. Hmm, that's easy. Just make the menu disabled for non-authenticated users. Oops, now the page won't load because it can't reference the selected item in a group that is disabled. Move this to the end of the Page Load. Now the page loads fine, but the menu item of the current step does not appear as selected. Assumption: Setting the Enabled or Selectable properties of the menu or the menu items would cause the menu to be rendered with no item appearing as selected when the page finished loading. DID NOT TEST ASSUMPTION. Onto another path. Playing with style sheets. Playing with the controls' methods. Playing with javascript because we don't even want to post back if the user clicks on the menu. Getting another set of eyes to look at the problem, and demonstrating to him that setting the Selectable property of the menu items to false at the end of Page Load renders the menu with nothing selected. Umm... it's working as I need it to. The menu is disabled and non-clickable, but the current selection is highlighted on the menu. Click through the wizard, and the highlighted menu item changes. My assumption held true only for the menu control and it's enabled property, not the selectable property of the menu items.
protected void Page_Load(object sender, EventArgs e)
{
//snip...
if (!User.Identity.IsAuthenticated)
{
LeftMenu.Items[0].Selectable = false;
LeftMenu.Items[1].Selectable = false;
LeftMenu.Items[2].Selectable = false;
}
}
Duh!
Four hours. Four lines of code.
Update: I should point out that the 30% addition applies only to the development phase, not the estimate in its entirety.
Monday, June 23, 2008
#
One of the questions that came out of my TFS talk at the Magenic Technology Summit was:
How do you go about customizing one of the existing templates provided for TFS, such as MSF Agile? We may want to add new types for Work Items, for example, or add new states that work items can be in.
The easiest way to do this is through the Visual Studio Team System 2008 Team Foundation Server Power Tools.
If you do not have the Power Tools installed, you can still do this by editing the XML that makes up the templates.
First, get the existing template that you want to customize by clicking Team > Team Foundation Server Settings > Process Template Manager. Select the template you want to customize by selecting it and click "Download".
The process template will be downloaded to the specified directory. The process template is nothing more than a set of XML files organized into folders by function. The top-level folder is the name of the template.
In this case, I have downloaded the MSF for Agile Software Development - v4.2:
I HIGHLY suggest changing the name of the template as your first modification, so that if you mess up the template (easy to do), you can start over by downloading the unchanged vanilla template. A this point I also change the name of the top-level directory for the Process Template.
In ProcessTemplate.xml, make the following changes:
<?xml version="1.0" encoding="utf-8" ?>
<ProcessTemplate>
<metadata>
<name>MSF for Agile Software Development - v4.2 - MODIFIED</name>
Now you are ready to create a new type of work item.
First, open workitems.xml and add your new work item type:
- <task id="WITs" name="WorkItemType definitions" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work item types created">
- <taskXml>
- <WORKITEMTYPES>
<WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Bug.xml" />
<WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Task.xml" />
<WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Qos.xml" />
<WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Scenario.xml" />
<WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Risk.xml" />
<WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\NewWorkItemType .xml" />
</WORKITEMTYPES>
</taskXml>
</task>
Next you need to create the template for your work item type: in the TypeDefinitions folder, open the XML for the work item most like the new one that you are creating.
The FIRST step is to save this XML document with the new name. The name is the what you typed into the ProcessTemplate.xml, in this case, "NewWorkItemType.xml"
After you have saved the new template, you can make the modifications that you need.
In the <FIELDS> section, you can delete, modify, or add the fields that you want to appear on your new work item type.
In the <WORKFLOW> section, you can add, modify, or delete states for your new work item.
For example: to add a new state called "Estimate", you would add the following xml to the <WORKFLOW><STATES> section:
<STATE value="Estimate" /> </STATE>
Here, you can also set field values and transition behavior - topics that will be covered in a future post.
When you are finished with your modifications, you can Upload the process template the same way that you downloaded it, by browsing to the new folder and clicking "Upload".
Here you can see my Process Template Dialog after a successful Process Template upload:
This template is now available for me to create a project from:
When I select the new template for my new project, I can see the new work item type:
Using the Power Tools gives us a graphical interface to the process templates: A few screen shots are shown, but we will not go into using the Power Tools here. Using the Power Tools is a much easier and safer way to modify your process templates, and I highly recommend that you download them and give them a whirl!

Update: Your TFS User or Group must have been granted the "Manage process template" permission in order to customize the templates.
The Magenic Technology Summit has come and gone. It was a great event with many good sessions and lots of networking. I spoke on TFS, and it was a good session. It was way too short though! I was tagged to give an over-view 100-level "what is TFS", and found that after walking through the slide deck, there wasn't time for hardly any of my cool demos. I am looking forward to the talks where I can walk-through more demos.
Catch me at:
Chicago Day of Dot Net: Sept 6
Twin Cities Code Camp: Oct 11
Iowa Code Camp: Nov 8
Tuesday, June 17, 2008
#
You know that Fibonacci is not a fine wine or type of bread.
Your Christmas list is a color-coded spreadsheet with sort capabilities on person, store, and price.
The last party you attended was a slide deck check.
Your MP3 player contains more .NET podcasts than music.
The average shelf life of the books you purchase is 3 months.
You have more email addresses than you have digits in your phone number.
That's ok, because you have linked them all together with single sign-on from your smart phone.
You think that Facebook and MySpace are so-o-o 2007.
You know more people by their twitter handle than by their real names.
You can't multitask worth @%&@ in the real world, but you can handle a debugging session, a SQL window, three IM windows, and a twitter client simultaneously.
If Google went down, your productivity would plummet.
When you hear the acronym "MVP" you don't think "Most Valuable Player".
When you hear "waterfall", you don't think of Niagara, and you need to restrain yourself from running away screaming.
When your boss asks you "When was the last time you worked with COM?", he doesn't mean communications, and you do run away screaming.
A night of drinking involves everyone consulting their GPS before proceeding to the next venue.
A night of drinking ends up at the office where everyone can fire up their laptops and swap MP3 files.
When you're feeling old, you give your age in base-11.
You divide the world into 10 types of people - the ones that understand binary, and the ones that don't.
You laughed at at least half the items on this list.
Thursday, June 12, 2008
#
Mike Eaton, a member of my twitter tribe, is trying to get to know his tweeps better. As part of that, he asks a few questions to get a better understanding of our background. I figured that rather than answer in his comments, I'll post it here instead.
Then, I got tagged by Jeff Brand... So the pressure was on!!
How old were you when you started programming?
Ten years old the first time.
23 the second time.
How did you get started in programming?
My parents bought a Commodore Vic 20 (they couldn't spring for the 64). I remember that we had some games that we could load into the tape drive and play, but they all bored me. I started programming in BASIC. I went to computer camp that year and the following year.
Fast forward a few years, and I was at the U of MN majoring in Chemical Engineering. The plan was to double major in Computer Science, but early on in the Chem E curriculum (before I had taken a single C Sci class) we had a numerical methods class where we had to use FORTRAN77. I hated it so much that I swore off programming forever. I used to buy Jamie Thingelstad pizza in order to help me finish those @#%@% programs.
Early into my Chem E career, I was doing statistical process control before there was any good software to do it. So I rolled my own in Visual Basic 3.0 and Access. I was hooked, and eventually got an MS in Software Engineering and crossed over to the dark side.
What was your first language?
BASIC
Both times
What was the first real program you wrote?
A data collection app for my nickel plating process.
What languages have you used since you started programming?
(I don't count FORTRAN)
Visual Basic
Java (briefly)
C
C++
PeopleCode (is that a language?)
C#
ASP
JavaScript
All flavors of DB languages
What was your first professional programming gig?
I don't know because my Chem E and Software jobs all kind of blended together.
If you knew then what you know now, would you have started programming?
Hell yeah! I wouldn't have wasted all that time with Chemical Engineering. I blame FORTRAN!
If there is one thing you learned along the way that you would tell new developers, what would it be?
If you don't love it, don't do it. Don't do because your parents would like it if you were technical or you think you'll make a good living. To really do well, you have to love it, because things change so fast. If you don't love it, you will be chasing the people who live and breathe it, and you will never be happy.
If you love it, but don't think you're smart/good/talented enough, do it. We all feel that way every day, and even the best programmers out there have someone who is better than them. If you have the passion for it, you will be good. Passion is more important than anything else.
What's the most fun you've ever had ... programming?
Man, that's a tough one. I love being the dumbest programmer on a project because the learning curve goes exponential. I love figuring stuff out - especially when production is down, they are bleeding red ink at the rate of $50k an hour, and I'm the only one who can get it going again. That is my adrenaline fix.It's better than crack. (At least I think it would be). I love being part of a team that is "in the zone": making progress, trading banter, cooperating, and things are just flowing. I love that there is always something cool to learn.
I was just reflecting the other day how lucky I am that I get to learn and solve problems for a living. I am truly one of those people who can honestly say that I would do my job for free.
Sunday, June 08, 2008
#
The Magenic Technology Summit in Chicago on Friday, June 20 is just around the corner! This is a FREE event with many amazing speakers such as Jay Schmelzer, Group Program Manager on the Visual Studio Team at Microsoft and Rockford Lhotka, Magenic’s Principal Technology Evangelist.
I will be presenting:
Really…what is Team Foundation Server?
Team Foundation Server (TFS) has been out on the market for a couple years and there is still more confusion about it, what it does and who can benefit from it. In this session Kirstin Juhl will show how each member of your team, project and company can use and benefit from TFS and how it can make life much simpler when it comes to all application lifecycle tasks.
Registration is still open! Click here to register!