When I see complex code that I don't understand, I fight a knee jerk...
When I see complex code that I don't understand, I fight a knee jerk reaction: "That seems needlessly complicated"...
It's hard to discern between needless complexity and useful complexity at a glance. Doing so requires intimate knowledge of the context.
Obvious accidental complexity: Frequently repeated code, intermixing of unrelated concerns, unused variables/functions.
Non-obvious accidental complexity: Doing inefficient or needless work, reinventing the wheel. In these cases, exploring the context is key.