Note that managing programmers is usually referred to as "herding cats, " hence I refer here to hackers as cats.

Dogfooding only makes sense when you're being a dog. If you're being a cat and trying to eat dog food, you're going to think the dog food's lousy. Of course it's lousy! It's designed for dogs, not cats.

There's cat food out there already that other folks have made. When you're being a cat, eat cat food, even if you're making things for dogs. Well-nourished cats make better dog food implementations. They're happier cats. More productive cats. Less irate cats. Cats who are more likely to be able to take the time to empathize with dogs and understand what they need. They might even get ideas from cat food that they can incorporate into their dog food work.

It is incredibly important for cats to occasionally put on their dog-hat and eat the dog food they've made. But they should do this as dogs, with the mindsets of dogs, with the needs and the viewpoints of dogs. When you want a feature or you want to kludge in a use-case, think: "Would I still want this if I was just a dog, and wasn't also a cat?" If the answer is yes, get into cat-mode and start hacking. If it's no, then recognize that you and your users are not one and the same, and decide whether to allocate resources accordingly.

Be a species-shifter, but eat the proper food for the species you're in.

(This post streamed out of a conversation that eventually turned into one of my projects at TOPP.)