My current project integrates with a lot of external services. Unfortunately, our service-level agreements do not extend to our development and testing environments, so our application breaks frequently because of service problems. Services go down, services have bugs in the latest development versions deployed in our environments, our environments are upgraded to new versions of services that are not backwards compatible with the old versions, etc.
We write JUnit tests to verify each service is running correctly in our environments, so we do not waste time debugging problems caused by service failures. These tests make my team more productive, but unfortunately they do nothing to make the services more reliable. At least, not by themselves…
It is an extension of the automatic build notifications our continuous integration tools provide, only at much, much finer resolution. Hippie makes it possible to notify Alice on “Team: Tiger” when TigerTests#shouldRespondWithOkStatus() fails, but notify Bob in production support when LegacyTests#shouldAlwaysBeUpAndRunning() fails.
Those JUnit tests we wrote no longer just prevent us from wasting time debugging service problems, they now kick off a chain of events culminating (hopefully) with someone else fixing the problem. And that is the ultimate goal of every programming endeavor.