One of the problems with agile is that it demands that every act of developer productivity be couched in a user story, a user-visible unit of change.
And the catch-22 is that only things that “deliver value” can be user stories, only things that are user stories can easily get into backlog, and only by doing things in the backlog can a developer prove they’ve done actual work that justifies them continuing to have a job at the company.
So to get around this restriction for something that isn’t a user-facing feature, devs have to be creative and you end up with these completely insane-sounding user stories like “As a user whose data is stored in the database, I would like the database schema to be overhauled so it can support a many-to-many relationship”.
Agile fails because it gives management fine-grained control over developers’ todo lists.