You don't design the abstraction for 3 different clients as often as you abstract it from code used by 3 different clients.