Friday, September 02, 2005

Scrum

I finished reading the book Agile Software Development with Scrum by Ken Schwaber and Mike Beedle and discovered that there is a way to develop software that actually makes sense! Great book.

Having developed software for 13 years now for a few different companies, I've come across a number of different methodologies, each touting the reasons why they will work. One fundamental difference between all those and Scrum is that they all have adopted a "defined" process control model, whereas Scrum uses an "empirical" process control model to manage the development effort.

A defined process is one in which, given a set of inputs, you can pretty much guarantee a certain output. You can do this over and over again. This works great in the manufacturing industry. Years ago, someone or 'someones' thought this would work in software, and we've never really gotten away from it. The defined process can be used successfully when every piece of work is completely understood. A defined process can be started and run to completion with the same results every time.

How often is this the case with software development? ... never, yeah never. Software development is complex, unpredictable and never completely defined up front. This type of problem requires an empirical control model. An empirical process "provides and exercises control through frequent inspection and adaptation for processes that are imperfectly defined and generate unpredictable and unrepeatable outputs." (pg 25)

Another thing that Scrum fosters and promotes is the idea of self-organizing teams. Set a couple of goals for a team of 4-8 people to accomplish in 30 days and let them go for it. Check in with them each day to monitor progress and identify impediments (the empirical process). The team is 100% responsible for getting the job done and will organize themselves to be successful.

The Scrum process is essentially this:
1. Create a list of bugs, enhancements, features, etc. (The Product Backlog)
2. Prioritize the list.
3. Create a team and appoint a Scrum Master for the team who is responsible for enforcing Scrum practices.
4. Have the team select 30 days worth of the highest priority items in the list.
5. Begin the 30-day Sprint where the team works uninterrupted for 30 days.
6. Meet each morning for a 15 minute Daily Scrum Meeting to identify impediments, report on progress from the previous day, and identify what each team member will do today.
7. After 30 days, hold a Sprint Review where everyone gets to show off the executable product code they've created.

There's a whole lot more to it than this, so read the book! After you've read it and agree that it is a great way to development software, you can use ScrumTool (shameless plug), a great, web-based tool to help you manage your Scrum projects.