I just had a meeting where we discussed setting up a TFS 2008 production server and I went through the system requirements with our system administrator. The focus was on groups needed in Active Directory, what software is needed on the server, things like that. Here are some camera phone shots of the whiteboard during this discussion. Wow. What's the takeaway from all this? PLAN YOUR IMPLEMENTAION DELIBERATELY. Stand up a research VM and play with it before you decide how you want to set up a production system. Groups and Accounts to Create and Administer  Things to Install on the Server 
Now that Team Foundation Server 2008 is out, the Visual Studio Team System product team is totally focused on the next version, known as Rosario. If the current release rhythm continues, Rosario is likely to be released in 2010 (Visual Studio 2005 was released in November 2005, and Visual Studio 2008 was released in November 2007). The latest version of Rosario is now available for public download on the Microsoft download site. This version is called the April Community Technology Preview (CTP). It's called a CTP because the product is still under development. The CTP gives the development community an opportunity to see what's been produced so far and provide feedback. It's not called a Beta because the bits have not been as thoroughly tested. For this reason, Microsoft recommends that this CTP release not be used for any sort of production development. The product team has made impressive progress so far. Rich Hundhausen and I got a sneak preview of this CTP a few weeks ago, and what I saw blew my socks off! Whereas the new features in Team Foundation Server 2008 focused mainly on improvements to build and version control, the main areas of focus for Rosario are project management, design and test (Although I'm interested in all things Team System, I'm somewhat partial to project management). This April CTP is the third CTP release for Rosario. To see the features included in each release, as well as a slick way to download the beast, check out these posts from Jeff Beehler:
When creating a new Team Project in your Team Foundation Server, everything is nice and smooth right up until you get to the permissions of groups and individuals. This can be a real PITA because permissions must be set up in 3 separate places. - Team Project level permissions within TFS itself
- The Share Point Portal site for the Team Project
- The SQL Reporting Services site created to serve reports on the Team Project
If you have done a little forward thinking, you have Active Directory groups for the major role mappings you want to make in all three of these areas. This will make the task a little better, but by the time you've gotten through with your Reporting Services permissions, you start to wonder if you remembered all the right group permissions way back on the Team Project itself. You know that feeling, and by the time you've assured yourself all is well, 10 minutes have elapsed. Enter the CodePlex project "Team Foundation Server Administration Tool". This handy little utility lets you see permissions for each group across all 3 areas all at once. There may be the occasional uncaught exception or UI oddity, but this beats the heck out of doing the job manually. These early releases of Team Foundation Server do still have a few ugly little knots on their heads, and the open source community has really stepped in to smooth those knots out. This utility is one great example. For a more complete list of open source tools for Team System, check out http://widgets.accentient.com/. Thanks to Richard Hundhausen's for his excellent slide deck on Team System implementation anti-patterns which turned me on to this utility.
My final talk at VSLive! San Francisco this week was on one of my favorite topics - parallel development. In other words, dealing with the real-world situations where multiple developers are coding away on the same project, and even the same file. The first order of business was to have a few of the ex-Visual SourceSafers lay down on my couch so we could discuss their phobias and irrational urge to run to their "safe place" - a.k.a. locking. In all seriousness, we discussed the two locking models of TFS and then explored the many wonderful benefits of not using locks by default, known as shared check out. Most in the audience agreed that the benefits of not blocking each other with their routine development (for example, not locking .csproj files when somebody adds a new file) greatly outweighs the detriment of having to deal with a conflict that requires manual intervention. Of course, arguments can be made either way. I pointed out that there are four situations where conflicts can occur that may require auto/manual merging: - CHECK-IN - the most obvious; somebody else may have just checked in competing changes just before you
- GET - you may already have pending changes on one or more of the files you are trying to download
- MERGE - by definition; when you merge changes from one branch to another, the chances are good that you will have to resolve conflicts
- UNSHELVE - not so obvious, but this is basically like a GET, just coming from another location in TFS; unfortunately, Team Explorer doesn't know how to handle the detection/resolving of these types of conflicts, so look to the TFPT UNSHELVE power tool for help
Finally, we looked at setting up a source control folder structure that will support your teams promotion model (a.k.a. staging environment). I proposed a simple structure, that looks somewhat like this: Some explanations - Code holds code artifacts - C#, VB, SQL, WiX, etc.
- Documents holds snapshots of the SharePoint site archived at the end of each iteration, release/version, build, etc. (whatever your term is)
- Active development occurs in "Current", which you could name "Dev" or "Main" (although I prefer "Main" for integration)
- Under the "Current" folder you'll have folders for each high-level application/component in the system, including common, database scripts, build definitions, and even setup projects
- "Branches" are just that - QA, UA, RC, Release, and private branches (Bridges), etc.
If you'd like to have a look at my slide deck, you can find it here. 
That was the topic of our discussion today at VSLive! San Francisco. Unfortunately, in the short amount of time (75 minutes) we didn't get too deep into all of the tools and techniques, but I did get my point across: I feel that Team Foundation Server (TFS) can do it all, and you should strive to migrate your source/revision control system, requirements and defect tracking system, document managing system, automated build and deployment system, and even your custom process workflow over to TFS. That said, there are certainly situations where existing systems must be used. I identified two categories of such legacy software: - Politicalware - somebody important in the organization bought or built the system and you there are strong feelings about migrating away from it
- Guiltware - the organization spends oodles (that's a lot) of cash on said software, maintenance/support, training, etc. and they haven't seen their ROI (and they may never see it)
I don't know what to tell you about the above situations, except that running in parallel (not good) or integration (better) would be an option. That lead us to the discussion of building custom software to do one-way and two-way synchronization with said systems. We briefly walked through the TFS Migration and Synchronization Toolkit (found on CodePlex) and I demonstrated the TFS to TFS Migration Tool (also found on CodePlex) which uses the toolkit. I see Team Foundation Server as yet another great "grassroots" platform. Just like .NET was for the developers, TFS is for the team. So, I say get it installed no matter what, even if just for source control, which is the no-brainer. Once it's in-house, then work on migrating the work items, automated builds, and other systems over sooner, rather than later, so you can enjoy the end-to-end traceability, product quality reports, and process quality reports. If you'd like to have a look at my slide deck, you can find it here and my demo files here (you'll need to download the SDK and CodePlex toolkit and tool separately). 
For those of you who joined me at VSLive! this week in San Francisco, I had fun sharing many worst (or un-preferred) practices I've run into over the years. My talk broke them down into several areas: TFS installation, TFS configuration, team projects, work items, and version control. Hopefully I didn't make anyone feel tool uncomfortable when I highlighted your practice on the big screen! Actually, it was all in good fun. By highlighting Team System worst practices, we were able to define Team System best practices and preferred practices. If you'd like to have a look at my slide deck, you can find it here and my demo files here. Feel free to let me know about any other worst or worster practices you may know of. 
I am currently in Jacksonville, North Carolina to teach a 3 day Team System class to the U. S. Marine Corp. To get here, I took 3 planes today with the last one loaded up with Marines on their way to Camp Laugune, just like me. I was listening to podcasts, mostly "This American Life" and ".Net Rocks". In fact, if you are at all into Team System, you have go to listen to this episode of .Net Rocks: Joel Semeniuk on the State of Team System. Joel sheds some light on what to expect in Rosario, which is a mature v3 of Team System with a strong focus on test. None of this is the point, though. The point is to let you know that nothing will make you feel like a bigger wuss than riding in an airplane of Marines with a ring neck pillow that won't fit in your carry on bag. They were polite. No one actually called me out. "Hey, neck pillow, computer geek," they could have said. But, they didn't. One or two did sneer a little, though. It's ok, my neck was really comfy. This is going to be an great week.
Because of the decentralized control model of Agile software development methodologies, there is a living debate on the role of a Product Owner, particularly in Scrum which defines the term. Here are links to sufficiently ambiguous definitions from some trusted sources, all saying effectively the same thing. http://www.scrumalliance.org/articles/39-glossary-of-scrum-terms#1122 http://www.mountaingoatsoftware.com/product_owner More informative is this course description from the Ken Schwaber for his Certified Product Owner Course. http://www.controlchaos.com/certification/cspo.php and this course description from Mike Cohn: http://www.mountaingoatsoftware.com/product_owner_training There is another question commonly asked in this discussion, though. “Who writes the requirements?” The idea behind Agile product development is that requirements DO exist, typically in the form of a backlog. The next point is that they are expected to change. In this regard, the Product Owner has the responsibility to continuously and actively manage the requirements. It is easily seen that the only way for a Product Owner to effectively do this is through intimate familiarity with the requirements. While the Product Owner may not have been the person to initially place an item on the Product Backlog, they are accountable to the team for maturing that requirement into an executable state. Therefore, who is responsible for requirements? Clearly, the Product Owner. Lastly, if you are still having trouble identifying the Product Owner for a given system, product, project, or initiative, remember this one thing: "The Product Owner is the one person in an organization responsible for P&L (Profit and Loss) of the work." -- Jeff Sutherland
Seriously. They can't. http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=259259&SiteID=1 You may delete specific values, but not the list itself. This means you can effectively "zero out" a list by deleting all of it's items. I don't quite understand why this would be a good feature, as it doesn't really stand up for a test of trace-ability. I just deleted a Team Project whose work items referenced a global list, so there are no references to the list in the system anymore. Perhaps one way to mitigate this would be to use abstract list names? List A, List B, etc. Then you could re-purpose a list later by giving it new values. Nah. So, what's the take away? Be very careful about the Global Lists you create in your Team Foundation Server. They will be with you a long time.
Mike Azocar, a fellow Team System MVP, reports: We released LWS version 2.1 today. This version includes a new process guidance and SharePoint template as well as many work item enhancements. You can download it at www.codeplex.com/vstsscrum Mike also indicates that they will soon release a version that will work with the Project Server connector.
Having just inherited a TFS installation to manage, I received a request to add some values to a global list. I got a little nervous about this when I saw that the server had many (MANY) global lists in it already and I wanted to be very careful not to break anything during this change. Of course the first thing I did was consult the master book on the subject of TFS, Rich's Working with Microsoft® Visual Studio® 2005 Team System. This was a great start to groking the whole Global List thing. The steps needed to do this are pretty simple and documented well from Microsoft. The step to export your current global lists is to use the glexport command line tool. From the Visual Studio command line prompt (this works fine on a client), do this: glexport /f AllGlobalLists.xml /t myTfsServerName Credentials used are the local login credentials. This gives me one big file containing all the global lists in the server. Now the question I had was this, "Should I edit this master global lists file and import the whole thing, or should I just try to import changes to one list?" Obviously I wanted to work only on the one list I needed to change, but what effect would it have if I pulled out all the other lists from the file and uploaded just a single list in a smaller XML file? I was scared to death of deleting all the other lists in the file. I saved a copy of the master, and then took out all the global lists except the one I was interested in, changed the values, and ended up with something like this: <?xml version="1.0" encoding="utf-8"?> <gl:GLOBALLISTS xmlns:gl="http://schemas.microsoft.com/VisualStudio/2005/workitemtracking/globallists"> <GLOBALLIST name="Teams - Product Backlog"> <LISTITEM value="Team A" /> <LISTITEM value="Team B" /> <LISTITEM value="User Experience" /> <LISTITEM value="Team C" /> </GLOBALLIST> </gl:GLOBALLISTS>
So, on a wing and a prayer I ran this command:
glimport /f TeamList.xml /t myTfsServerName
And guess what happened: It worked great! All of my other lists were intact and my new team names showed up just fine. So I learned 2 things in this little exercise.
- You can import a single global list XML file into your TFS server without affecting other lists.
- glimport and glexport work just fine on a VS2008 client talking to a 2005 TFS server.
|