Feature flags start as a good idea. Ship a feature behind a flag, test it with 5% of users, roll it out gradually. Clean engineering.
Then 6 months pass. The flag is still there. It's fully rolled out to 100% of users. But nobody removed it because "what if we need to roll back?" Now the code has two paths — the flagged path and the unflagged path — and both need to be maintained, tested, and understood.
Multiply by 50 flags across your codebase, and you have an exponential explosion of code paths that nobody fully understands.