Every code contains intrinsic and extraneous complexity. Intrinsic complexity is the complexity inherent in the problem being solved / modelled. Extraneous complexity is that introduced by the representation of the program that solves this problem (i.e. code and other constructs - e.g. infra).

When trying to understand some piece code, I think it helps to first identify the intrinsic complexity - the complexity inherent in the problem. When you have that sorted, you should then have an easier(but maybe not easy) time navigating the extraneous complexity introduced by the original authors / designers.

I think this applies to most things that try to solve a problem by representing it in another form (e.g. software architectures, user interfaces, etc.).