Thursday, 29 September 2016

Too long forgotten, the Activity field in TFS

Team Foundation Server is around since 2005, and many features seem to be forgotten despite being in the same place as usual.

If I asked for a dollar/euro/pound every time I was asked this I would be a billionaire as of now:

Can I have a Development Task, Testing Task, Documentation Task Work Item Type in TFS?

You can definitely have such a WIT, but would this make any sense? Excluding any consideration about your methodology (this unfortunately is a question I keep getting regardless of Scrum/Agile/Waterfall/CMMI/etc.), why would you have a different WIT for different flavours of the same?

Usually reasons here vary, but one of the most consistent is this:

I would like to visually understand how the requirement is split and this also makes life easier for team members with different roles in the team.

I mean – the first part is fair enough. But as for the second… it is all about the human rejection of changes Smile 

So, in my opinion the best way of tackling this request (I can’t even class it as a problem…) is to use the Activity field which every Work Item has. Simple as that.

Let’s take this for example:


This comes from the backlog, and all the children tasks are…tasks Smilebut leveraging the Activity field you can categorise these children tasks:


Needless to say the Activity list can be customised. Once you do that, you might want to apply some styling rules to the task board, leading to something like this:


And as a side-effect, if you use the Remaining Work field as well – as many do, regardless of the methodology as well, given that you might need to report on it – you’ll get a nice breakdown by Activity:


It is worth mentioning that this field is around since at least TFS 2008.

Wednesday, 28 September 2016

Removing Analysis Services references when moving a TFS deployment

When you need to stand up a testing environment, a DR situation or simply a new instance from existing backups you might want to forget about SSAS altogether and go ahead with just the core Team Foundation Server’s databases – something you can’t do if you use the Application Tier Only option.

The error you will get is a TF400952:

An unexpected error occurred during Analysis Services validation, see logs for details. The component might be damaged or not installed properly. You must exit the Team Foundation Administration Console and install either SQL Server Analysis Services or the SQL Server Client Tools on the application tier to ensure that the Analysis Service object model is present for warehouse processing. Once you have installed the necessary components, open the administration console and re-run the wizard.

If you run into this, it means you did not follow the documentation about how to setup a deployment on a new hardware Smile so back to it, you will run TFSConfig RemapDBs at some point, and that is where you need to pay attention.

If you run TFSConfig RemapDBs without the /continue switch you will just get an error:

Unable to find any compatible SQL Analysis Services database within the specified instance. The host with name ‘TEAM FOUNDATION’ has been assigned a new connection string.

So you are stuck. Instead, if you run it with the /continue switch, you will see the command will be executed on the other databases as well, removing the old SSAS reference.

Thursday, 22 September 2016

A pragmatic look at why TFS and VSTS can be customised in a different way

If you paid attention to the latest releases of both TFS and VSTS you can see that the main path where they are diverging is on Process Template Customisation.

And hey presto! I was asked why, and why is it that different from the usual TFS experience. So here is my opinion on the matter Smile

Historically, *no* customisations were allowed for Team Projects hosted on the service. The reason behind this was very pragmatic: being a service, the provider must ensure that any upgrade are not going to break the system for its users, and that includes customisations as well.

Enabling the typical task witadmin.exe can do means they can’t ensure that “the trick you used with Global Lists to show something on a certain field” is going to continue working, with no changes, for each upgrade the service receives without testing it. And of course, the service provider neither can test users’ customisations nor rely on users to test their own customisations according to the service release schedule. It wouldn’t work, and it would cause unnecessary churn and technical debt.

Normally – and this applies to Team Foundation Server as well – you would test your customisations in a sandbox or a test environment. With your own on-premise product you can duplicate the instance (especially with the new pre-production upgrade feature) and start messing around with it. It makes total sense, because hardware is cheap as chips these days and you (or the admins) are responsible for the uptime and availability of the server.

But you can’t have it and you can’t do it on the service, there is no test environment, a service is live by definition! Even with DevOps properly in place there is no way of providing this with the appropriate safeguards.

There is a major difference between providing APIs to extend specific components of your service (usually with a limited scope) and providing a way to easily customise the overall user experience. This difference sometimes is overlooked (unfortunately) when in full-swing with the DevOps infatuation: introducing breaking changes (because you will, everybody does, at some point) on a large portion of the user experience that non-technical users will face is something to are going to regret, because non-technical users are usually more vocal and reactive to UX changes.

UX changes aren’t like custom release task using the VSTS APIs “somehow”, they are all about consistency in the overall experience a user has, and it is critical to understand what is going to happen the second you break something you can see. Can you imagine the mayhem when a non-technical user, who heavily relies on that customisation, is going to get an error and his critical feature isn’t there anymore?

It was the right decision, because the team was missing a way of funneling the customisations in a sanitised and reliable way.

But now they have! And they are doing a great job at enabling these Process Customisation scenarios – usually a big blocker in Enterprise situations.

Friday, 9 September 2016

Simplifying TFS restores with TFSConfig OfflineDetach

Before TFS 2015 Update 3, if you want to restore an instance you need to restore all the collection databases of the instance. This might be an extremely long and time-consuming activity.

Very quietly, Microsoft introduced the OfflineDetach command for TFSConfig. What is that?

It is a new command you can use to restore only a specific collection (and configuration database) so you can simplify the restore operation and save time.

Aside from that, you can also use it to restore non-detached databases (useful for DR).