Over the years, as a software developer, freelancer and now lead developer and software architect, I have come to the conlusion that, on balance, the methodology called scrum is a bad idea in the long term. In this post, I will try to explain why.
First, I am not hugely convinced of the wisdom of the idea of the fixed cycle, the "Sprint". Experience has shown me that fixed meeting are worse than a waste of time for most inexperienced developers, they become a thing of dread hanging in the near future. So much more so is the sprint, whereby it becomes, almost by definition impossible to ever complete anything. Scrum promises to remove deadlines by dint of making them permanently recurring. What is generally done is to push tickets that were not completed in one sprint to the next one, which transforms the fear of failure, of not getting the job done, into a constant realization of such fear.
A much better option is the one chosen (and acronymized and buzzwordified) by Kanban, which in fact is nothing more or less than the natural way of being effective. Choose a topic, and stick to it until it either becomes irrelevant, or is finished.
But the main gripe I have with Scrum is the way in which it removes agency from the individual. Breaking down the work into bitesize chunks that are easy to estimate is in general a good thing, but when done as a team, it takes away responsibility for the task and diffuses it across the team. And this extends to all of the activities that are part of Scrum: estimations, retrospectives, sprint planning. These are all activities that can and should be done alone by a responsible developer. In the Scrum setting, responsibility for these actions is diffused to the point where no-one in the team actually owns them. I find this very damaging to morale in the end, as it leads to developers not caring any more about whatever it is they are building, only finding motivation in aligned incentives like career development and the like. Paradoxically, by encouraging developers to work as an anonymous and interchangeable part of the team, it makes them work only in their own self interest.
In my view, developers should be handed as much responsibility as they can handle. As part of a team, they naturally avoid letting their team mates down, and take pride in being "the only one" who can fix their part of the whole, all the while safe in the knowledge that the team can and will come together if something really serious goes down.
One thing that Scrum does solve effectively is the phenomenon where junior developers do not communicate blocking issues, either due to obstinancy, or simply because they do not recognize the problem as such. I think that this issue is just as effectively solved by a lead developer or a senior taking the time to ask them how they are getting on, and what they are working on. This promotes an authentic team spirit, to boot: the idea and the feeling that you are helping your colleagues rather than some abstract notion of a "team".
The two principles of Agile development that apply to individuals are as follows:
Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
Scrum as a methodology has distorts those two principles into a bunch of obligatory meetings perfectly suited to responsibility-ducking individuals. Small wonder then that a significant proportion of good developers, and also myself, are not hugely impressed.