I think it is more than communication skills. Communication is effective when something is "speakable". This implies both parties has good abstraction over the same thing. But when the system is overly complex (no matter monoliths or micro-services), it is impossible to build a good abstraction.
Just considering a n parameters boolean function. You can build a simple formula around it and communicate well if there is simple pattern. For example, f(x1, x2, ...) = x1
When there is some exception? Fine, we can still talk about general pattern, while communicate particularly about the exception.
But when the mapping gets more random, at some point no one can describe it without going through each value one by one. The complexity will become O(2^n). You will spend whole day to communicate only tiny part of the function
Just considering a n parameters boolean function. You can build a simple formula around it and communicate well if there is simple pattern. For example, f(x1, x2, ...) = x1
When there is some exception? Fine, we can still talk about general pattern, while communicate particularly about the exception.
But when the mapping gets more random, at some point no one can describe it without going through each value one by one. The complexity will become O(2^n). You will spend whole day to communicate only tiny part of the function