What are the trade-offs between different architectural patterns (e.g., microservices vs. monoliths) at C3 AI?