A while ago I wrote a bit about Microsoft’s practice of “dogfooding” their software. That sparked a fair amount of discussion on Reddit.
Of course, a few people assumed I was talking in absolutes, that because the practice of dogfooding is not perfect, it must be evil. That’s a bit of an exaggeration.
I never said that “dogfooding is bad”. But dogfooding generally means using your product on a daily basis. Not just poking around with it, or checking it out, but actually using it as your primary tool for… whatever the product is supposed to do for you.
This implies that you can’t really use a lot of other products as intensively while you’re dogfooding your own. A developer on the Visual Studio team can’t both use VS10 for all development, and at the same time use Eclipse, Vim and Emacs on a daily basis. If he were to use all those, there would no longer be enough time left to use VS10, and so he wouldn’t be dogfooding it.
And that is the problem. Dogfooding is a valuable way to incrementally improve and polish your product. But it also takes up time that could have been spent using someone else’s product. And when you use a product in your daily life, you become blind to a number of its weaknesses.
One of the Reddit commenters mentioned a lovely example: Java developers, people who write Java and nothing else, don’t really see the need for closures. They just don’t really consider it a valuable feature. But pretty much everyone else does. Does this mean that in Java, alone of all languages, closures are not relevant? C# programmers got closures and are ecstatic about them. C++ programmers are about to get closures, and everyone’s just itching for it to happen. Functional languages always had closures, and programmers in those languages just can’t live without them. Are we to believe that specifically in Java, closures just do not matter?
Or does it just mean that the Java developer doesn’t yet realize how much easier closures could make his job? He doesn’t realize this because he’s never had the chance to use them. He’s stuck in the world of Java as it looks today, and if you were to ask him what he’d like changed about the language, he’s not going to say “closures” or “higher order functions”, or even “templates” or “type inference”. He’s going to come up with some small incremental improvement. Wouldn’t it be nice if class X was added to the class library? Wouldn’t it be nice if Y was named differently? Wouldn’t some shorthand syntax for things you can do already be nice?
And the same is true for dogfooding. Visual Studio is slow. Many common operations cause multiple seconds of wait time. Adding an empty file to a project in VS2008 is painful sometimes. But oddly enough, I only really notice it when I’ve gotten used to Vim or Emacs or some other alternative IDE or code editor, which isn’t so slow. Its project structure is fundamentally broken, but I only really notice this when I’ve just spent a few weeks playing around with makefiles1. And the same goes for the Windows Mobile phone I had a few years ago. While it worked, I tolerated its quirks. Apart from a few instances when it went really haywire, it wasn’t so bad. Sure, it was sluggish and needed to be rebooted regularly, and sure, the interface wasn’t exactly pretty or convenient to use. But it worked, most of the time, and I got used to it. I didn’t love it, and I didn’t think it was a particularly good phone, or platform or OS, but it was usable. Then the phone broke, and it took me a few weeks with my replacement phone to realize just how much better everything else was. My Windows Mobile phone sucked. I just didn’t realize it until I got to use a different one on a daily basis.
But let me reiterate, dogfooding is a good thing. There’s no doubt of that. Your product can only get better by having your developers actually use it in the same ways that end users are expected to. But if dogfooding is all you do, then the world will pass you by.
So why did I dig this old post up again?
Because Visual Studio 2010 is about to be released, and as we may have expected, this means Microsoft’s developers have to beat their drum a bit about how awesome it is because it’s been dogfooded.
Soma just seems to forget that the glaring performance issues in both beta 1 and 2 came as a huge surprise to Microsoft until the betas had been released in the wild. As much as they dogfooded it, it didn’t give them the information they needed: that VS10 is painfully slow compared to everything else, including VS9.
Both betas were released pretty much with the message “Don’t worry. It might use a lot of managed code and use a completely new WPF-based editor. But it runs really well and is just as fast as previous versions of Visual Studio”.
There were two reasons for this. One seems to be (according to another Microsoft developer’s blog post which I can’t seem to find at the moment, unfortunately) that they simply didn’t collect the right metrics from all their dogfooders. A lot of their developers did think it was painfully slow, but were never asked how they felt about the current performance level.
And the other is obviously that all their dogfooders were using VS10 in their day-to-day work. They had nothing else to compare it with. They weren’t using Eclipse or Vim or Emacs or even VS9 or VS6 in their daily work. So they became used to the downright painful performance.
But once they released the beta into the wild, it was obvious to everyone else, all those people who had not been using VS10 on a daily basis for months, that it was a huge step backwards.
So yes Microsoft, you’ve heavily dogfooded VS10. No doubt about that. But let’s not pretend that it solved all your problems, or that it gave you the best possible product. In reality, it led to you scrambling the last 6 months to bring the performance back up to where it should have been all along, and where you’d probably have kept it if you’d used other IDE’s occasionally so that you’d had a basis for comparing performance.
It’s not that dogfooding is bad. It’s just not enough. And it is not, in itself, a selling point or a proof of quality.
-
No, I’m not saying makefiles are “better” or even “good”. They have plenty of problems on their own. But they do allow a remarkable degree of flexibility over VS solutions, as Noel Llopis realized here. The point is not that VS should switch to plain old makefiles, but just that perhaps the VS project system could be improved to incorporate some of the strengths of these. ↩




