Recently, when on a trip to Tech Ed Barcelona (LINK) myself and Marc Popkin-Paine visited Multidomo, a home automation software company and Team System user in Madrid, Spain. My contact in Multidomo is Luis Fraille who is a Microsoft MVP. We visited their site to better understand their work environment and how they were using TFS to help with their application lifecycle. This is a fairly long post so you may just want to read the overview at the start and conclusions at the end.
Multidomo is a software company that builds home automation software. It allows you to control various devices in the home from your computer or across the Internet. There is a demo on the site where you can turn on and off lights and move blinds in the house.
The Company
This is a small business with only 2 employees, Luis and David (was 3 previously). They hire the services of a designer for some of the UI. The main office is just in the home of one of the employees. This home is also set up with all the home automation you could think of with lights, blinds, ac units, garden sprinkler, front door etc. all wired up with X10 or EIB protocol devices to allow them to be automated. The latest version of their software is always running in the house so they get self-host test regularly. There is also a web page where users can play with some devices in the house.
David works on a desktop machine that is also connected to the devices. Luis does all his work on his laptop and works mostly from David's home but sometimes he works in his apartment in the center of Madrid.
The setup at home consists of a server machine in the basement and a main automation machine in the top floor. There is also a media center PC in the living room. The system exposes some web services and these are hosted externally by a company in Miami, FL.
Functionality
There are multiple clients for accessing the system.
These can list all the devices in the system and allow you to control them. For example, for web cams you can connect and retrieve the image shown on the camera. For blinds you can move them up, down, or some preset openings (25-75% open). 'Atmospheres' can be programmed which are named presets for the devices. For example, movie mode could dim the lights in the living room. There are also programs which can be executed through a simple workflow-like engine. For example there is a program for opening and closing the doors into the driveway. This is combined with a delay to implement open, wait, close. There is a simple interface for building sequences of actions.
Design Overview
The devices conform to X10 or EIB protocols for home automation. These are driven through an WCF web service which exposes all the operations for the devices. The client code provides front end and builds requests to the appropriate web services then interprets the results. Communication is WCF throughout, except for some video appliances and some ASMX services for terminals not usable with WCF. In those cases sockets are used.
Code Organization
They work off 4 different solutions and have one branch:
Debugging
VSTS Usage
Typical issue resolution workflow
When we visited they were starting some work to plan out the next iteration and reduce the backlog of work items. The list below is typical of how they handle smaller issues. Code is shared rather than owned although there is a concept of owner/author in that each person has areas that they worked on mostly and are the expert for but everyone touches everyone else's code and makes fixes in the code.
Issues
We saw a number of issues as we watched Luis work. We are following up on these internally.
Conclusions
This is an interesting usage of Team System. Since the company is so small it seems that TFS would be more than is needed and overly heavyweight. Instead, Luis is a strong proponent of TFS and sees it as adding value, even in this small a company. Of course the source control is a significant feature that adds value even to one developer but also of value is the process template, work items and team suite tools.
By using the process template Luis was able to get started easily and customize according to the team needs. The result is a lightweight process and correspondingly lightweight work items - he never even opened the work item since the preview has enough space for his entire work item form.
With only 2-3 people they still get the benefit of the centralization of work and ability to track. This is particularly true when they include their contracted-out work in the list. They easily and efficiently tracked the designer work using Excel hooked up to work items.
From the development and test sku they are using code metrics, code analysis, profiler (with a bunch of saved traces) as well as debugger of course. They also use web and load testing from the test sku and have found particular value in the DB sku from the schema diff tool. The checkin policy also helps them keep track of which change corresponds to which work item.
Another big motivation for their usage is that they are starting to grow. Whereas now they all trust each other and liberally share code and have completely open checkins, in the future they will expand to a larger team and so Luis is keen to have the pieces in place for more control and tracking as soon as new people come on board. For example, he could create a private branch for the new hires to work in as they get up to speed or he could add more policy around check in such as requiring a code review or having code analysis rules applied on checkin.