Software Engineering, Software Architecture, Microservices, Distributed Systems, Systems Thinking.
unidirectionally to keep systems simple. If X modifies Y then Y should not modify X as a part of the same operation. This also means X should not read back the state of Y as a part of the same operation. X and Y can be services, objects or functions. Read / query for a particular data only once