Scrum and Agile are so over-hyped and so worthless.
To do it right, you have to :
1) understand the problem to be solved; make sure to get feedback from the users
2) design a solution
3) code the solution
4) test the solution
Scrum and Agile are excuses for not doing the above steps properly. With Scrum and Agile, you end up going thru steps 1->4 MANY TIMES...with constant rewriting of code.
Good points.
Though, you forgot at least:
5) Deploy
6) Maintain solution
7) Remove solution
Anyone in Operations will now see that you've made 4 perfect points, and already more points may be added. If you ask business side, they will add at least 80% of the time spent during the whole project with their stuff too. The more points, the longer feedback-cycle and less overview and flexibility at any stage (ie. planning for removing the solution, which can be good to standardize). If each stage can never be revisited, it's "waterfall" and won't be realistic. This is when people complain about the "other people" not providing perfect work/requirements from the get-go. But complaining helps nobody, other than diverting attention.
For development where there's potential for research and continuous improvement I'm tempted to add:
*) Make short iterations/prototyping and get fast feedback from that in order to improve faster, better and safer.
Unfortunately, corporate environments are usually a bad place to do anything of quality and effectiveness due to all the reasons and perverse incentives we already know.
There is now some push on making cross-functional smallish teams that will collaborate. If companies succeed with this, which requires more top-level administration, time will show if this will improve anything. It may result in managing multiple teams faster, pushing even more of the bottleneck to development and testing/QA areas. Though, I suspect it will devolve into micromanagement-hell from the portfolio management level downwards, eating up even more time from maintenance.
If all requirements are 100% clear and never change, or the project is really really tiny and simple, you may iterate 1 time. In practice, one should always plan to iterate several times or simply build/develop in stages. Don't need Scrum for this, as ordinary PM methodology already has
milestones and one can also use common sense to plan ahead.
In the end, everyone forgets about maintenance.