layer that provides a default implementation of something but allows consumers to replace it? The use case is that I have a default setup for live, but I need to be able to replace it for testing, and I dont want to burden the consumer with having to supply those