views:

711

answers:

12

Dogfooding is using your own software while it is being developed. Sometimes it is impossible to simple use it at all (e.g. software for fighter pilots.) More often it is possible to dogfood, but it doesn't happen anyway.

A couple of "Our users won't experience that problem so it can't be a dogfooding bug," and quickly the practicalities of dogfooding go down so far no one does it.

What are the best practices about getting dogfooding to actually happen?

+2  A: 

It's cheaper than employing testers?

(We need an irony smiley) An advantage of dogfooding is it allows you to make mistakes when using the software.
The problem with testing by developers is that they know which button to press and so never press the wrong one, so that code path doesn't get tested. By using it day-day you are more likely to make the same mistakes your users willl make.

Martin Beckett
For a micro-isv I agree. But the larger the team the more that becomes debatable. QA is required at a certain scale. At that point "why is dev wasting time fixing issues so they can use the product like internal deployment, rather than issues customer's will see." becomes an issue to be answered.
Steve Steiner
Eating your own dogfood should be "in addition to" not "instead of" testing.
Bob Cross
I agree with Bob Cross. There is no replacement for quality assurance and testing.
Thomas Owens
+7  A: 

We spent [Insert cost] dollars and took [insert man-months] months to make that software, and by [Insert preferred Deity], we are going to use it!

The problem is that that sort of management by fiat doesn't actually motivate the correct behavior. Where is the value to the person or the group?
Bob Cross
+1  A: 

Surely it depends on what your software is? For instance, I write software that I need for a particular time, and then continue to reuse in other projects. Hence, I do actually eat my own dogfood because I created it to serve my needs (and as it happens, others use it also because it works for them and they think like I do).

But as you rightly say, for some commercial enterprises, it's not possible because the employees of the company are not the target audience of the software being developed. In this case, you would need to be really proficient at testing your software, and also have loads of unit-tests to backup the stability of your software.

JamShady
Why the downvote? Some feedback would be helpful. I fail to see how this could be a bad answer to "What are the best practices about getting dogfooding to actually happen?"
JamShady
Perhaps because you answered right-brain to a left-brain question? I won't give you an up vote because you didn't answer the question but neither will I give you a down vote because you did bring up a good point about Dogfooding.
WolfmanDragon
+8  A: 

I would say that the best motivator is to create a mapping between quality software and everyone's personal quality of life.

Concrete example: the customers for our large scale sensor processing system are both internal and external to our department. The people in my group feel the "dogfood factor" strongly in several different ways:

  1. I like to point out, "Notice how we don't get screaming phone calls on the weekend anymore?"
  2. Our friends in the department are using the system right down the hill right now. If there are problems or features missing in the system, they actively feel the pain. "You don't want to screw your friends, do you?"
  3. We go on site for certain types of deliveries and exercises. If the system has issues when we're trying to use it live during a very expensive exercise, we personally feel the pain right then. "Isn't it nice when deliveries are boring, when things just work?"

My feeling is that, if you and your group don't actively see the relationship between the system's quality and their own quality of life, you're detecting a fairly high screwed factor.

PS: some time later, we lived a concrete example of this.

In January, we were asked to support our customer on site for the entire month of February. When we arrived, we were presented with a short list of critical issues: "these have to be addressed by March or the system will be considered unusable for our efforts in May."

At the end of February, we heard "the deadline is now the end of February." (!)

If we hadn't been living the system, all of us using significantly harder than our customers during that timeframe, working all the details as hard as we could in the lab, we would have been in something of a tight spot. As it was, I was able to say "okay, we were in final wrap-up testing. If you are willing to accept it as is, it's a solid product and we're ready to ship right now."

The moral of the story is that we made the best dogfood we could make. We took a known release, we updated it, we'd lived with it, working with real data, looking for serious problems and documenting the non-critical issues. At this point, our customer is completely taken aback, our management is ecstatic and I'm declaring victory.

Bob Cross
This is interesting in that it speaks to mapping the spirit of dogfooding to cases where it can't be literally done. I agree that the underlying point is vital to dogfooding.
Steve Steiner
+3  A: 

Dogfooding only works when you depend on the software for a critical business process. If you don't then forget about it.

Another way of dogfooding developers is to let them spend a few hours on the support line and let them deal with the clients issues. This can be a good incentive to improve the user experience

Eoin
I agree with the critical business process. E.g. if dogfooding is broken I can't get my job done. I feel your other point is valuable, but orthoginal to dogfooding as I understand it.
Steve Steiner
Think of my second point as dogfooding by proxy. If the staff don't have direct experience as users of the system then maybe helping out actual users is the next best thing.
Eoin
+3  A: 

One best practice is to tag bugs that prevent dogfooding (in any way) as 'dogfood' bugs. Bugs tagged this way are considered one step below breaking the build.

Steve Steiner
+4  A: 

A couple of "Our users won't experience that problem so it can't be a dogfooding bug," and quickly the practicalities of dogfooding go down so far no one does it.

If it bothers you, you should fix it. IMHO, that should be the mantra for every programmer on every team of every size, everywhere. Even if it is a problem that you can guarantee will never affect end-users.

  • If it bothers you, then you won't use the software.
  • If you don't use the software, then it won't be properly tested.
  • If it isn't properly tested, then the shipped product will be mediocre at best.

I have a sister who paints. Painting, in spite of what certain LISP programmers will tell you, is almost entirely unlike programming. However, there's one little similarity in process, a similarity common in thousands of crafts: attention to detail divides the good from the bad. My sister might paint something in an afternoon that looks... ok. At first glance. But without the next week or month of attention, of critical examination in different lighting, of tweaking and re-painting, the piece will never be more than a rough hint at what was intended.

You might throw together a rough UI, a passable algorithm, based on reasonable specs, and think that QA can hash out any problems on their own, or that user feedback will tell you all you need to know... but until you've spent days using it yourself, feeling the rough edges, you'll never appreciate potential improvements, or understand the poorly-expressed discomfort of your users.

You, the programmer, are the Super User. You are the only one who can both experience a problem, communicate a solution, and implement the correct. End users can experience, QA can communicate, but only you are in the position to do all three. Therefore it is vital that you are allowed to do so.

Shog9
So .. best practice: Every dev should be capable of fixing a bug that blocks dogfooding? In projects where this is possible I agree whole heartedly. Unfortunately there are projects where this doen't scale.
Steve Steiner
> Unfortunately there are projects where this doen't scale. < Then, there are deeper problems.
Shog9
Really you feel any large project has deeper problems? I've been in situations where we dogfooded successfully and ship successfully where you really did need to rely on other team members.
Steve Steiner
For example when I was working on VC5.0 I broke stepping over stack allocation calls in the Debugger. This was a dogfood bug. I believe it was an MFC guy that found the bug. He couldn't have fixed it without learning the internals of how debugger worked.
Steve Steiner
I see what you mean; i suppose i wouldn't really consider MFC and VC to be the same product, but i can see how you would benefit from "cross-dogfooding" for such things. Perhaps then you would be better off treating such bug reports as external / end-user bugs.
Shog9
A: 

We develop an IDE, and it would be a shame to not use it to develop itself!

Ali A
+1  A: 

Not referring to the product of the team's labor as "dogfood" would probably help.

JohnMcG
Better internal marketing? Selfhosting?, bootstrapping?I like dogfood as it doesn't sugar coat the difficulities involved, but I'm willing to entertain the notion that it could be counter productive.
Steve Steiner
There are some pompous people that like to call it 'drikning your own champagne'. In my opinion, that immediately shows their lack of intention of really trying to find out how to improve their product.
Sergio Acosta
+1  A: 

I guess that it depends on the software you write. For in house software, which is what I've been doing in the last years, I've noticed that after some resistance, people now don't have any problems with participating and using beta software. I believe that the most difficult part for them is seeing that thei opinions are important. After seeing that we do value their opinions and that we try hard for making their app solve their problems in an easy way, they end up liking it and are eager to participate on future projects.

Luis Abreu
So this would be high responsiveness by the team to far flung dogfooders? Are you fixing and deploying in a very quick loop? Or is it a simpler case of responding quickly and acknowledging the issues?
Steve Steiner
A: 

A best practice is to 'stage' disruptive changes. There are two ways to do this. One is statically with a branch in source control. In that case the disuptive change comes in all at once when it is dogfood ready. The other is to dynamically stage it. This means allow the change to be turned off by dogfooing users while it is still being developed. This second option involves coding up such a staging mechanism, and then tearing it down when complete. This is a best practice for dogfooding, but the extra work can (in my opinion usually wrongly) be argued as a negative from a business perspectice.

Steve Steiner
+1  A: 

There is only one way to get this type of thing to happen: Upper management MUST be behind it.

If you can't get Upper management to mandate it, then it won't last.

Chris Lively