Stable Interfaces, Flexible Implementations - Designing for Abstraction | OneNoughtOne