I think OP is making it more complicated than it really is. Just abstract the logic as much as possible, confining it into 1 place. For instance, just have a class EmailSender with the method &quot;sendEmail&quot;, and have all your clients call this class whenever they need to send an email<p>Now if you moved to SES from Mandrill, you just change it in 1 place. It&#x27;s not rocket science or voodoo.