A few months ago I published a prezi to explain the advantages and disadvantages of implementing SCRUM in an organization (I tried to be impartial, I promise):
In this post I will explain this prezi using words instead of pictures.
The team may be tempted to take the shortest pathYou have to deliver things every two weeks. At the last delivery the team was not able to complete all planned functionality. The team velocity does not predict that you will finish on time this time. It is then when a new problem arise: the team may be tempted to resolve pending tasks in a hurry leaving behind them technical 'debts'. Apparently everything goes well, more functionality made, new ones are started, and the customer is happy because they are on schedule.
But whenever a blur is left behind you can be sure that you will have to face it sooner or later. If new things are built on this blot, the 'debt' begins to multiply. Soon you'll have to stop everything and commit to repay the debt (with interest rate). The project does not come to an end when there was little to finish it: burndown chart seems to have a horizontal asymptote at 0 (sorry, some Maths)
Do you need dates of delivery well in advance?This is one of the most common critics to SCRUM. In a way it makes sense, it is not possible to predict when you're going to end if what you are going to build may change and vary over time. But do you prefer a product that is known with certainty to be completed in 10 months but it is built on the ideas and opinions you had 10 months ago? Maybe you prefer a product that could be finished within similar time but it can evolve to your real needs.
We can not spend our lives sprinting. As soon as we deliver a new functionality, we are committed to the following one, which is only a couple of weeks away. Then another and another one. If we had to travel many miles, we can begin with a quick sprint to reach the first goal but we'll be walking slowly to reach the last one.
Is your team self-organized?One of the principles of Scrum is that the team should make their own decisions and manage themselves. Furthermore, it requires that there is no members of the team focused only in specific tasks such as analysis or testing. Inside the same team you should have someone able to test, to code, to write a specification, to analyse, and so on. Do you always have a team like that? What if we do not have it?
It is certainly a problem but, is there any methodology that can finish projects successfully not having at hand people with the required skills?