How to structure distributed Ruby applications that are resilient and easy to maintain