What do you call the people you write software for?

For most of my career I have referred to the people who I write software for “users”.  It just made sense, they are using the software so they are users?

Interestingly enough at Amazon we call them customers.  Not to say that the word user has been stricken entirely from the vocabulary, but it makes me wonder if it should.  Here is my thinking.  Something different happens in my mind when I think of the people I am writing software for when I use the word customer.  It is hard to describe…but maybe this story will help you understand what I mean…

When I worked at Microsoft I worked in the consulting division and we would help people make sense of the variety of ways to write code on the Windows platform.  Often times some of my customers (aka clients) would have come up with a unique way to solve a problem using some piece of Microsoft software.  When I would relate this back to the product team (another aspect of my job).  More times than not the question I would get back would be “why would they do that – that is not what we intended”.  We used to refer to this as the RDZ – reality distortion zone; which was the invisible field that hung over Redmond that prevented the product teams from understanding how people really used Microsoft product.

When I think about how a customer centric Microsoft would have been different – then the response back to me would have been something like “that is really cool, we never thought of that – how can we make it better”.

Try it.  It may just change the way you think about things.

TFS Recovering Shelveset for Invalid User

One of the developers on the team was getting a TFS error (below) yesterday while trying to access a shelveset for a developer who left the account a couple of months ago.  Turns out he needed some of the code on the shelveset.

 TF50605: There was an error looking up the SID for TC30014  

Note to self…shelvesets are probably not the way to do this, thinking that a branch would better construct.  I want to encourage them to be doing more of these anyway.

The problem is because TFS is going to lookup this user in the Active Directory and the user does not exist anymore.  I can see the shelvesets in TFS using either TFS itself or TFS sidekicks.  I included a screen print of all the active shelvesets for this user in sidekicks.

tfssidekicks

So TFS must be doing some lookup on the user and when it does not find it – errors out.  Not knowing how to solve this, I put couple of searches later (“tf50605 -vssconverter”) out there and found this article.  While not directly what I needed it was enough information to crank up SQL Server Management Studio and start poking around a bit.  So I started with the OwnerId for user that was removed and for the user who was trying to get the code.

 SELECT IdentityId FROM tbl_Identity WHERE (DisplayName LIKE 'ad2\TC30014')  
 SELECT IdentityId FROM tbl_Identity WHERE (DisplayName LIKE 'ad2\RMxxxxx')  

Once I had this I plugged the deleted user’s id into the following query to get all the workspaces.

 SELECT TOP 1000 [WorkspaceId]  
    ,[OwnerId]  
    ,[WorkspaceName]  
    ,[Type]  
    ,[Comment]  
    ,[CreationDate]  
    ,[Computer]  
    ,[PolicyOverrideComment]  
    ,[LastAccessDate]  
    ,[CheckInNoteId]  
    ,[DeletionId]  
  FROM [TfsVersionControl].[dbo].[tbl_Workspace]  
  WHERE OwnerId = 276  

This showed me a bunch of workspaces.  What I noticed is that evidently the shelvesets and workspaces are used in a similar model based on the type.  So a little bit of infering and playing in TFS and it looks like if I hack this table, I can reassign all the shelvesets to a valid user (which is sort of the spirit of the article above).

Leaving out some of the details, I ended up with the following query that reassigns the orphaned shelvesets (type=1) from one owner to the other.  Since the WorkspaceName is part of the primary key (and relatively short), I changed the name so that the new owner could distinguish between his shelvesets and those that were reassigned.

  UPDATE [TfsVersionControl].[dbo].[tbl_Workspace]  
  SET OwnerId = 123,  
    WorkspaceName = RIGHT(WorkspaceName + '-Reassigned',64)  
  WHERE OwnerID = 276   
    AND Type = 1  

Looking back at TFS Sidekicks (I verified it first in SSMS – wink) I could see that the more recent shelvesets had indeed been reassigned.  Sucess!!

tfssidekicks2

Now granted, we are on a relatively old version of TFS; so this hack may already be obsolete. But I wanted to put it out here just in case.

Annoyed with MSDN Magazine

My reading habits around MSDN magazine changed recently and now I am back to getting the print version of the magazine – I have a complaint about the cover. For the past couple of years I have been trying to exclusively read MSDN magazine online and so I let the print subscription expire. Well that was just not working for me since I rarely read an MSDN article in one sitting. So I turned my print subscription on and I have a small bone to pick. But first a little more back-story.

As the number of products and technologies available to build applications has grown I have found that I can no longer be an expert in everything. Rather I have had to focus my depth on a few technologies and be at the 100/200 level on the remaining ones. You might be scratching your head going “then why is the depth of MSDN magazine a problem?” Simply because the intersection of what I am going deep on and articles in MSDN is smaller [which, by the way, is exactly what it feels like the editors are striving for and is a good thing]. So my typical MSDN experience is reading 1, maybe 2 articles in depth and skimming the rest.

Well that is not exactly my typical MSDN experience; which brings me to why I feel like venting a little today. In actuality, the first thing I do when I get any magazine is to rip out all the marking stuff. You know the stuff I am talking about all those things from vendors and subscription blow-ins. I hate them because I can’t flip through the pages without stopping on one of these. They are like bookmarks someone else put in a book – they are never what I am looking for. Only after removing all these obstructions do I feel that I can actually absorb the content.


Well, this is the second month I have noticed a new cover style for MSDN – the cover that folds back over the outside. It has been my experience that on most magazine covers when the fold-out that the fold out actually tucks into the magazine. Given my routine of cleaning up my magazines before I read them I would open the front cover, flip open the fold-out and see if it was anything interesting. Why a fold-out? Sometimes I have been rewarded with some nice panoramic nature scene and I don’t mind so much. But I digress…regardless my next step is to rip off the fold-out part.

In comes MSDN with the fold-out cover that folds outward; back across the front of the magazine. So in this case if I rip off the fold-out part then I am removing the cover of the magazine. For MSDN, more than other magazines I get this is unacceptable since I use the cover to find articles I want. So I left the cover the way it was.

Here is the problem; once I open the darn thing now the cover becomes an absolute annoyance. It keeps getting caught on things. Torn. Battered and otherwise abused. Which leaves me no other solution then to rip off the fold-out (and be left with this faceless magazine) or to just toss the magazine [hey I used to be the kind of guy who would buy a new car when the windshield wipers needed to be changed].

This leads me to one of two conclusions; either the folks at Microsoft have been spying on me in my favorite reading location (very gross). Or I am not the only one that has this cleanup ritual (almost as scary).

Or it could be I just needed something to write about. I don’t have much time before my next meeting so this is best I could do on short notice. Don’t worry I am not loosing any sleep over this one.