Joel, on the merits of dogfooding:
Eating your own dog food is the quaint name that we in the computer industry give to the process of actually using your own product.
![]()
I had forgotten how well it worked, until a month ago, I took home a build of CityDesk (thinking it was about 3 weeks from shipping) and tried to build a site with it. Phew! There were a few bugs that literally made it impossible for me to proceed, so I had to fix those before I could even continue. All the testing we did, meticulously pulling down every menu and seeing if it worked right, didn't uncover the showstoppers that made it impossible to do what the product was intended to allow. Trying to use the product, as a customer would, found these showstoppers in a minute.
Eating your own dogfood is clearly a good idea, but it hasn't worked out too well for me in practice, for the following reasons:
Microsoft originally popularized the term "eating your own dogfood" during the development of Windows NT, when Dave Cutler insisted that the coding of the OS be performed under the current builds. If you're writing software intended for other developers-- or an operating system intended for the entire world-- then dogfooding makes perfect sense. Who better to test Visual Studio than the developers writing Visual Studio? There's no question that this results in a higher quality product, but you also have to be extremely careful. If the application you're writing isn't intended for expert users, having the developers dogfood it won't necessarily buy you much, because developers are highly unrepresentative of typical users. Beyond fixing critical bugs, it could even hurt the application: developers tend to add advanced, complicated features that are useful to them.
I've worked on a number of applications that I could barely test, much less use. I had no idea what valid inputs even looked like! Sure, I had the specifications, but there's a huge difference between applications designed for general purpose use (ala Joel's CityDesk example) and custom applications designed to be used internally. These internal apps are typically quite specialized; you'd need a lot of exposure to the target audience before you could begin to think like your users. Moreover, their job may be radically different than yours; expecting software developers to dogfood an app intended for stockbrokers is probably unrealistic.
It is called dogfood, after all. And no sane person relishes popping open a can of Alpo for lunch. Aside from the frustrations of using alpha and beta software, I've also worked on a number of team projects where I was never comfortable with the quality and featureset of the product we were producing. I could barely bring myself to use our own software! Since I wasn't the project manager, I had no formal authority to dictate the quality or features of the product I felt we should be building. On projects where I am the only developer, however, I can code to exactly the quality and feature level I'd like to see. The only dogfood guaranteed to taste good is your own. And even that is debatable. All other dogfood is unpleasant and often inedible.
Now, none of this is intended to discourage you from dogfooding. I just feel it's difficult to achieve for typical development teams. Not every application is as easy to dogfood as Windows NT, Visual Studio, and CityDesk. But for every obstacle I listed, there are a half-dozen benefits you'll derive if you manage to pull it off. It's clearly a best practice and you should be aggressively dogfooding your own software whenever possible:
Do what you can to incorporate your product into your job. If you are developing a word processor you should be using it any chance you get to create your own documentation. If you are developing blog software, then blog about your progress. Do whatever you can to give yourself a different perspective of the software you intend to create. The more views of something you have the more defects you will find. If you are developing a product that you can't integrate into your day to day job then you should be creating a dogfooding test plan where you and interested customers spend dedicated time using the product the way it is meant to be used. It's especially important to get feedback from these different perspectives and incorporate it into your release. Because if 1 of 20 people find a problem with your software then you can imagine the issues that will be found when you have thousands of different perspectives on your product.
And if you can't dogfood, consider working the help desk for a few days. I'm serious. There's nothing quite as effective as sharing the customer's pain.
Thats some good advice. I was definately "dogfooding" for the apps I built at work. :-)
Sushant Bhatia on May 12, 2005 6:16 AMDogfooding works best I think for 'consumer' apps, not really vertical market apps. For example, I use the latest build of my RSS aggregator every day and I find most of the bugs and usability issues because through this. When I tried to use the first beta build I did, I discovered to my horror the app missed a few simple, but critical, usability requirements. Every day of use I can make it a much smoother experience.
Craig on May 12, 2005 7:47 AMI completely agree with the article, although it shouldn't tell any self-respecting developer anything they didn't already know.
Curiously enough, I used to live with a guy who worked for a pet food manufacturer - designing dog food. And yes, he literally did eat his own dog food every day. :d
Andy on May 12, 2005 9:08 AMI dont think this is the way to go for most projects after all. Of course it's the easiest and clearest way of testing software and the developer has the most direct feedback connection, namely himself.
But I think the majority of us is working on projects as pointed out that the developers dont have any idea how and field where to use it.
As for me, im developing software in semiconductor business for highly qualified ppl and i really dont have the time to learn their job too. Most of the algorithms come from the maths guys in form of dozens of lines of formulas and i dont really think ill be ever able to test those. All i see are tons of numbers coming in, getting processed and tons of other number getting spit out at the other end.
Afterall developers should focus on developing the software. I think its worth to cleary seperate the testing from the development, done by the ones that are really expected to use it once its done. Though its really difficult and expensive to seperate but let me put it like this: if the only feedback on the taste of the dogfood comes from developers they will tend to create something like a pizza-cappucino-dish-dogfood and im quite sure that the dogs wont like that too much as final product. ..hm but the article already points that out. So i agree on this :)
I think the dogfooding is a good idea - where applicable. I definitely have to agree with your post too, though. The application I am developing and maintaining during my day job does not really lend itself for this practice: I am clearly not member of the intended audience AND the application does require the aforementioned specialized industry knowledge. I and other members of my team do however create our own internal utilities that are supposed to make our jobs easier. There dogfooding makes *a lot* of sense.
Alex Bendig on May 17, 2005 3:44 AMI think dogfooding is great, and really helps build credibility (http://timstall.dotnetdevelopersjournal.com/becoming_a_credible_developer.htm). After all, if you won't even use your own project, why would others. I also like your points on why someone would not dogfood it.
Tim on December 8, 2007 3:10 AMIf you aren't making the software for yourself, who are you making it for?
I'm a little befiddled by this distinction between developers and users. Are developers so lost, so far and deeply indoctrinated into developing programs that they just forgot how to use them?
It's the other way around. Developers know too much about the program, that the operation of it is obvious to them, even when it's not obvious to someone who is new to the system, and doesn't know how it works. Imagine, for instance, you've never seen a typewriter keyboard before, and you encounter one of these Das Keyboards:
http://us.st12.yimg.com/us.st.yimg.com/I/yhst-40922258946781_2033_1377936
Sure, if you already know how to type, it's no problem. But if you don't, how do you know where to even start? This is a developer's keyboard. Not a user's keyboard. It's the same situation with software features that a developer has devised. You have to test with real users!
Breton on January 28, 2009 4:01 AMI wonder, would it not be obvious to the developers of that keyboard that you cannot see what key makes what sign? Surely I'd want signage on a keyboard I'd have to use, for the first time even. In fact I'd want a little guidebooklet to tell me what all these weird 'shift' and 'ctrl' keys do and a little backstory to better understand.
Can't developers think this far with software? Can't they make software they'd want to use themselves, feigning ignorance of computers?
BmB on January 28, 2009 7:09 AMIf you aren't making the software for yourself, who are you making it for?
I'm a little befiddled by this distinction between developers and users. Are developers so lost, so far and deeply indoctrinated into developing programs that they just forgot how to use them?
BmB on January 28, 2009 7:23 AMYou'd think so, using common sense, and folk psychology. The problem with common sense though, is that it's frequently wrong. Aristotle was wrong about physics, and newton was right about physics (physics at the human scale, anyway)
So no, very frequently the developer of the system is precisely the wrong person who should be designing the interface or writing the manual. They just know the system too well, and will inevitably assume too much knowledge on the part of the user.
Breton on February 4, 2009 4:56 AM@BmB
Remember, nearly every business in the developed world now requires applications, some of them specialised. These businesses may not be IT related but require custom software. They outsource this work to a development firm.
Question answered?
Josh Smeaton on February 6, 2010 9:30 PMThe comments to this entry are closed.
|
|
Traffic Stats |