Rules of Engagement: Tools and Equipment
February 26, 2006
This is the final post in my series of posts on the rules of engagement in the consulting business. In this post I focus on the tools that you need as a consultant to get the job done. Its actually an interesting time for me to look at this because the tools that I use are changing.
If I think about what I work with on a daily basis:
- The Laptop
- The Mobile Phone
- The Wireless Broadband Card
- The Headphones
Everything else is really an optional extra, but lets zoom in on the list above and discover why they are so important.
The Laptop
Having a laptop in the consulting business is absolutely critical. When I took up my first consulting role I was issued with a Dell and have pretty much been using them ever since. Most of the laptops I have worked with tend to be a bit on the expensive side because what I really need is a desktop computer that I can carry around with me, use on the bus, in the taxi and in the airport lounge.
Your laptop is what keeps you sane. With a laptop you are connected to your e-mail archives and you have a stable development/test environment on which to try things out – it can take some people months to organise development kit and you don’t want to waste a clients money by not getting started prototyping straight away.
The Mobile Phone
If you are an independent consultant your mobile phone is a valuable sales tool, it keeps you in touch with your clients and helps you line up new engagements, basically, if you are an independent you can’t be without your phone for long.
For consultants that work with a consulting firm your mobile phone is your lifeline. If we look at the modes of communication that we used to reach people they can usually be put into one of two buckets, asynchronous and synchronous.
E-mail is a synchronous tool, and in general you have no QoS (Quality of Service) guarantee, although you can use history as a guide. The mobile phone is a synchronous device so when you dial it and someone answers you have that resource locked into a conversation.
When I get stuck on something I like to enlist other resources to help me, it allows me to solve the problem faster and provide the client with more value.
P.S. When you get voicemail – thats a Denial of Service 
The Wireless Broadband Card
Given that a laptop and a mobile phone are essentially standard issue for most consultants these days I wanted to add to the list one more really important item. The wireless broadband card. I predict that ever since I got issued my iBurst card that my productivity has shot through the roof.
The ability for me to reach out and connect via e-mail to all the geeks in the company via e-mail during the middle of the day means that when I fire a question out I am going to get a diverse set of answers.
It also enables me to get to parts of the Internet that corporate firewalls often block out (not because of the material, just because the firewall is managed by network nazis).
I’ve also noticed that my iBurst card is faster than most internal networks because they tend try and push all Internet bound traffic to the core of the network and then out onto a backbone rather than having links out from the leaf nodes of the corporate network – if you ask me this is poor network design.
The Headphones
I like to make selective use of my headphones and try to limit their use for when I don’t want to be disturbed or when I am trying to get into the zone (usually occur at the same time). Headphones allow you to block out general cube farm noise and focus on your work and if you pick the right choose you will be dancing in your chair while you bash out that piece of complex code.
From personal experience I don’t recommend listening to podcasts while coding (I’ve tried several times), I just find that too many brain cycles get stolen trying to process that information where as music tends to be processed subliminally.
Team Foundation Server vNext
February 26, 2006
Brian Harry has posted up to his blog soliciting feedback about what features would everyone like to see in the next version of Team Foundation Server vNext now that Team Foundation Server 2005 is almost out the door.
The features that I would like to see in Team Foundation Server vNext are:
-
Better support for occasionally connected developers.
-
Better ad-hoc collaboration tools.
-
Better integration tools.
-
Better query tools.
-
More Process Templates
Better Support for Occasionally Connected Developers
One of the features that I would like to see improved is the support for offline development. As a roving consultant I tend to need to work away from TFS quite regularly, but I still want to be able to work on my code. I’d like to see some work done around making Workspaces a management unit for disconnected access, not only for source code but also for work items.
I see it working something like this. I start out in the office (or atleast connected to the TFS server) and I am preparing to go onsite at a client where I will not have high speed Internet access but where I need to be able to edit code. I bring up the Workspaces configuration screen and select Offline. When I click OK it asks me whether I want to select individual work items (or a query for work items) that I want to take offline with me. I select some and click OK.
What happens next is it flags all the items in my workspace and the work items as being offline in the repository. In the offline state other machines which are connected to TFS will be warned when they try to change them.
With work items that are in offline mode, I can edit them while I am disconnected from TFS, and even associate them with check-ins (which just run locally, really just a change log).
When I finally get connected again I just go back into the workspace tool and select Online and it goes through a merge process, calling out any conflicts that I need to deal with.
Better Ad-Hoc Collaboration Tools
One thing that Visual Studio Team System with Team Foundation Server really rocks at is what I would call structured collaboration. That is – collaboration which is guided by the process template through work item workflows.
For teams adopting a particular process, especially when there might be an ocean between team members. But it doesn’t really do anything for teams that might be trying to use extreme programming practices when they are geographically distributed.
There are two features that I would love to see:
-
Collaborative text editing.
-
Collaborative debugging.
The scenario is that I might be working on a piece of code and one of my co-workers interstate sends me an instant message saying that they are having a problem with a piece of code I wrote. Rather than me wasting about 10–15 minutes setting up my environment to help them they can simply “host” a collaborative session and share out the source files they are working with.
I then connect to them (wouldn’t it be cool if this was an Office Communicator invite option) and I can see the source file in my window. Both of us can edit the document at the same time (their document is the source of truth but when I type into my document the update is routed to their text service).
We can annotate the code and even start debugging. When they run the program and hit a breakpoint I can see the code that gets hit and I can inspect things like the callstack and locals window collaboratively.
I don’t have a really good example of an application that does collaborative debugging at the moment, but here is a Mac application that does collaborative text editing.
Better Integration Tools
I think that there could possibly be another SKU that ships with TFS, probably a free one which is part of the bundle targetted at configuration managers. Here are some ideas for the kinds of things I would like to see in it.
With MSBuild we now have some extensibility in the Visual Studio build system, and Team Build gives us the ability to do builds on a build server at the click of a button but the experience of editing MSBuild files isn’t really all it could be.
I’m mostly referring to the lack of a graphical editor, and while this is probably in the domain of the MSBuild team I think that VSTS has room for another SKU for configuration managers which includes DSLs to deal with things like Build Scripts.
Other things that this SKU could enable (easily) are:
-
Building TFS event listening services (wizard driven type stuff).
-
Building check-in policies.
-
Building and editing Process Templates (basically an integrated version of PTE).
Better Query Tools
The work item query tool that comes with TFS is really functional, but I would like support for parameterised queries. For example, lets say as a team leader I want to query what work a particular team member has outstanding. At the moment I have to create a query for each team member, but if my team has a bit of churn its a pain to maintain these. When I pop up a dynamic query like this it should prduce a little UI up the top (just like in reporting services).
I’d also like to see user affiliated queries. At the moment all queries are tied ultimately to a particular project. But if I am working across multiple projects and I have a set of queries that I like to use on all of them I should be able to just add them to my own personal set of queries, independent of a project.
More Process Templates
This is a bit of a no-brainer. But you should be able to install Process Template packs. For example – you should be able to install a medical industry vertical for building medical software which includes process steps for HIPAA compliance.
One that I would find useful in the consulting business is a utility process template, and even a process template for ISVs which includes things like marketing guidance (I think that there is a vast untapped market here).
Sub Work Items
One of the things that I find frustraiting about the way work items currently work is that all work items are created equal. There is no support for sub-work items.
What is a sub-work item? Well a sub work item is a work item that is created under the auspices of another work item and affects the accounting of time for that work item. For example, if I have a high level task for which I have allocated four days. As a team leader I might like to keep track of the allocation of time at a finer level. So I might split that task out into say four smaller tasks.
When I do this that smaller task should have a special relationship with the parent task such that the time allocated to the sub task is deducted from the parent tasks total alotment of time.
I’m not exactly sure how this would work but it would definately allow more natural representation of work breakdown structures which are used in some methodologies.
While you are at it the process template could also define what types of sub-work items can be created from other work items. For example, from a scenario task I should be able to create a sub-scenario, or a sub-task, but not a bug (necessarily). I’m sure you get the idea.
Thats about all I’ve got for now, given enough time I could probably come up with some more.