resilient software architecture