Jens Meydam asked “What do you really care about in Scrum?” I decided to answer, instead, “What do you think is really essential in Scrum-style software development?
First, two things are fundamental:
- Ship running, tested software every two weeks, or, if you are a wuss, every month. (DONE == DONE)
- Reflect frequently on how it's going, and revise your practices in accord with what you observe. (Inspect and Adapt)
Now then. When you set out to do these things, certain chains of events are inevitable and I do mean inevitable. Here’s one example:
- To ship done software, it must be tested.
- To ship done software every two weeks, it must be tested every two weeks.
- Changes to the software can, in principle and in practice, break essentially any feature anywhere in the software.
- To ship done software every two weeks, essentially every feature needs to be tested every two weeks.
- This testing burden increases linearly or worse than linearly with the number of features.
- Manual testing cannot sustain the two week delivery cycle.
- Therefore, for a truly successful iterative software project, automated testing is absolutely necessary.
There are quite a few things like this that are just inevitable. There are others that are almost always needed, others that are commonly needed, still others that are sometimes needed.
To call a process “Scrum”, we demand certain things. All of those things are pretty good ideas. Some of them may be necessary to a successful project, even if they are necessary in order to call the process Scrum. I’m more interested in successful projects than I am in the name of the process.