You can have code that's easy to read and complicated to change. Or you can have code that's complicated to read and understand but easier to change. Perhaps it's easy to read, and change but complicated to scale? I like to shove the complexity into areas I don't care about. If I'm building a system that doesn't need scale, I'll take readability and easy to update over scalability. It's a balancing act.
https://www.facebook.com/notes/kent-beck/one-bite-at-a-time-...
Especially further in on the topic of how there's a sweet spot for total logical lines of code and manageable complexity.
On projects Ive worked with for a long time they don't seem as complex as when I started them, And when I refactor or rewrite, I am usually taking a more streamlined approach as I now understand the what it is I am actually tracking.