Complexity is what happens when a system has more moving parts than it needs. It's the difference between a solution that fits in your head and one that requires seven diagrams to explain. Simple systems have fewer places for things to go wrong. The worst part about it is that complexity often masquerades as sophistication. We confuse elaborate solutions with good ones, and we build abstractions for problems we don't have. By the time those problems actually show up, the abstractions are usually wrong anyway.
The defense is simple: notice when you're adding complexity and ask whether it's necessary. Every abstraction should justify its existence. Make decisions instead of adding configuration. Resist the urge to generalize too early. Write the specific solution first. If you need it in three places, copy it. If you need it in five places, maybe abstract it.
Value clarity over cleverness. The most impressive code is code that anyone can understand, and that makes everyone go "wow this must have been so easy". If you're on a team with an existing complex system, don't assume it has to stay that way. Start chipping away at it. Simplify one piece at a time.
If you're building something and notice you are getting overwhelmed or confused by it, really try to think whether you're building the right solution. Complexity is a choice, usually an unconscious one. Choose simplicity instead.