Dogfooding + Critical services

My last post was actually going to be what this post is, but then i ended up getting distracted and figured that it made more sense as two posts. (This seems to be a fairly common issue when i write posts).

As I've already mentioned, I'm incredibly excited about Team System. Why? Because it seems to address pretty much every thing I need to do while writing software. So far I've seen that It has:

  • a bug tracking system, a source control system
  • a testing framework (both code and performance)
  • a project management system

Currently our team uses different products for each of these tasks. They're not integrated very well (except through adhoc solutions) and i find myself having to take care of managing propogation of a lot of data myself. The idea of having enterprise level implementations of this, along with strong integration into the IDE I'm using, has me standing here going "now! now! now!"

Howevever, there are some serious issues that I'm not sure how to resolve. The simplest to examine is the case of source control. Source control is an absolutely critical service that we need. There isn't a day that goes by where I don't actively use it and navigate the history of the source in our code base. It's not uncommon to need to go back several year sometimes (especially when I'm working on bug fixes for the code base that existed before I got here). I've heard from people in other companies that lost their source history at some point. Years later they were still realing from the loss. Losing this history doesn't necessarily have to come from bugs, but jsut from the natural evolution of the software. What if they introduce a breaking change into their schemas? It seems unlikely that they'll have the time to release a set of tools to take all my old work and put it into the new system. Of course, this would be required once we shipped, but it's unclear if we would get those gaurantees right now.

Another place where this is important is with my Unit tests. Unit tests are what I use to ensure quality and to allow me to change my code with the confidence that if i break anything it will be caught (and if it isn't caught then I'll just add a test to make sure it doesn't happen in the future). However, how can I do that if I can't trust the tests?

Are these services so critical that I can't dogfood them for the rest of the work I'm doing? Or are there steps that can be taken to make that possible?