No matter how good the initial design is it will start degrading once it's out there. Software design seems to follow the 2nd law of thermodynamics - in a software system the amount of entropy tends to increase over time.
The moment something is released new requirements will start bombarding it. And of course it is always easier to just do the Minimal Change - to simply nudge the system in the right direction instead of thinking how given changes should properly be incorporated.
Also, the people who add stuff will probably not all be the ones who initially built it. Hence they may not be aware of (or care about) all the nuances outside their particular use case. You can only slow this process down by having a Foreman for each piece of code.
Then there is the ever changing world of technologies and tools and ways of doing stuff. Sooner or later you will not be able to befriend the original toolset and the new stuff without becoming a schizophrenic zoo keeper.
Over time there will be less and less people who built the original system. They have either moved on to other teams or other companies.
Soon the only way how to regain that knowledge within the (new) team is rebuilding from scratch. Obviously this is something we do not want to do - or to be more precise we don't want to do in a big scale where we can easily fall victim of the second system effect.
This is where microservices come in.Rewriting in small is what microservices are perfect for as they allow us to replace system piece by piece.