Recently, I bought a new car. It had, because it is a Japanese car, a lot more gadgets and gizmos than I was used to. One of the toys that it had were automatic headlights. This seemed like a bit of a gimmick when we got the car, but after a few weeks I realised that it was actually in the sweet spot for automation. The car just put the lights on at the right time. You never had to worry about leaving them on when you got out, and when you got in when it was dark you never thought about it then either. In fact, after a few weeks I realised that I didn’t actually know how to switch them on!
Of course, there then came a case when I did need to know and needed to know fast: fog! When I actually looked, I found that they worked exactly like every other set of lights and so I was able to find the switch in about 3 seconds.
This is the perfect level of automation: it nearly always does the right thing by itself and when you want it to do something else you have the perfect level of control. That is what we want from software but we don’t normally get it.
Actually, one example of when we do get it is Microsofts Team Foundation Server. It has a great interface integrated in the IDE which has been extended and improved by 3rd party add-ins; there is a very powerful command line interface for those times when the GUI isn’t enough; there is a API for when the command line isn’t the right tool; there is a reporting data warehouse; there is a host of web-based widgets and reports for looking at the data and if you really want to, you can call the web services or fiddle with the database (not recommended or supported!).