The OTP behind the campaign queue story is a great opener because everyone has lived some version of it. One thing worth adding, separate queues is necessary but not sufficient. If both queues drain through the same provider account, the campaign still eats your OTP throughput at the rate limit. Priority has to survive all the way to the provider, separate sending identities or reserved capacity, otherwise you just moved the head of line blocking one hop downstream. Also OTPs deserve a short TTL. Delivering a login code five minutes late is worse than dropping it, the user already asked for a new one.