I was reading the book of Martin Fowler: Refactoring to Patterns.

Just on the first five pages of this book there are so many information to think about.

One of these is the Over-engineering terminology.

The Over-engineering word means:

When you make your code more flexible or sophisticated than it needs to be, you Over-Engineer it.

Some programmers do this because they believe they know their system's future requirements.

If your predictions are wrong, you waste precious time and money.

What typically happens with code you produce in anticipation of needs that never materialize?

It never gets removed.