Software Engineering, Software Architecture, Microservices, Distributed Systems, Systems Thinking.
incompatible with each other. So, be mindful of what guarantees you want to build and assume in your systems. You must reason why you really need them and can the system be built by making simpler assumptions or design choices. Because it is very likely the guarantees you think you have built into