Formal vs. Informal
Using your own product ("eating your dog's food") is part of Quality Assurance and I would put it under informal testing category as opposed to more formal testing usually done by a separate QA department.
Depth vs. Breadth
“Eating your dog’s food” is aimed at giving a first-hand experience of using a product or service to people directly responsible for its design and development. For a feature rich application it might go deeper than formal testing and at the same time put a specific user perspective, when the formal testing normally covers breadth of software use cases and tries to operate in more objective and measurable terms.
Little Annoyances That Make Difference
There is also a category of shortcomings very specific to an environment that can be only diagnosed “in the field” (like this really annoying rattling sound that seems to be coming from nowhere whenever you’re cruising at 72.52mph and drives you absolutely nuts, yet none of the mechanics is able, nor willing to get down to the cause when the car is at the garage).
Naked Software vs. Application + Set of Practises
Using your own product goes far beyond the software itself; it unavoidably encompasses the entire “user journey”. “Eating your dog food” lets to develop and better understand the techniques of using the software within a domain. It is fair to say that some software is used within a number of widely different contexts. Formal testing might not be able to cover each of these contexts in depth, simply because it might be difficult to define formally what specific tests you need to do once something has changed. Or it might be too expensive to mimic these contexts inhouse or go through all the known tests cases every time the software has slightly changed.
Internal Change vs. External
Formal testing is really good at checking that changes done to the software do work, but the other important area of evolution where formal testing is struggling is when you need to detect the changes in the software environment or usage patterns that come from the external world. Using your own product will help detecting these changes much sooner, probably before you're told by the users (depending on the quality of the user feedback channel).
What is Wrong with "the Balance"?
As such there is no balance to strike between using your own product and formally testing it (do both as much as it is feasible, i.e. returns you’re getting are worth the effort). One is to compliment another, not to serve as a replacement.
Who Should Do Testing: the Distinction
This is unless there is no dedicated resource to do the formal testing (sole developer, developers doing all the testing) and you have to select how much time you can dedicate to any of the two activities. Well, don’t. Important distinction here is that formal testing is best done by an independent authority, i.e. people who don't report to the development and design team. On the other hand everyone (designers, developers, marketers and even CEO) in should be using company products or services as much as possible, because the core idea behind “dogfooding” is to give everyone involved the first-hand experience of service or product they contribute to in a real life context.
You can't Dogfood Everything! Or can you?
As far as “you can’t dogfood certain types of software” argument goes, well, let not concentrate on how dogfooding looks: eating your dog’s food, but rather think instead of what it means: getting a first-hand experience and “aligning interests” with these of the actual users.
The next best thing to eating the food yourself is observing the dog whilst it eats the food, as opposed to relying on someone else telling you what your dog, supposedly, likes or dislikes.
Whilst the dev team members may not be able to personally put sewage control software to use in their everyday jobs nothing stops them from spending some time regularly observing a sewage engineer using the app, which doesn’t follow the letter of “dogfooding”, but certainly captures it spirit.