Shortly after we read Ken Schwaber's book Agile Project Management with Scrum, we put together a presentation to our management team to convince them that we could make Scrum work. To our surprise, they gave us the high-five and now we actually had to do it. We could have tried out Scrum on some small projects just to test the waters. But at the time, we were working on a complex multi-year enterprise GIS development project for a large state agency. The client is very communicative and very conscientious about the scope and value of the project. We decided that this was the right kind of project and client to engage with our new found knowledge of Scrum. Before we proceeded, we gave another presentation about Scrum to the client. During the presentation we outlined that this process would require a much higher degree of client-contractor interaction than usual and wasn't quite as easy as it all sounded. The client agreed that Scrum looked very good and agreed to become a committed Product Owner. That sealed the deal. We had our management's approval, we had a willing and able client, and we had a team of developers who were committed to making Scrum work on this project.
One challenge we had with this project was that there was a heavy architecture and framework component that we were building on top of the ArcGIS ArcObjects model. The architecture and framework components were not easy to demonstrate to a client and we didn't know how we would demo them at the end of our first Sprint. We made a decision that we would work on our framework for an internal client at our company for the first few Sprints. The internal client was a subject matter expert who knew the client's line of business very well. So, we thought we'd "shield" the client from having to deal with complex framework issues.
Before our first Sprint, we needed to come up with a Project Backlog to work from. The project was originally scoped and scheduled by another project manager using a traditional waterfall approach. As such, we had a Microsoft Project Gantt chart that gave the broad strokes of the project schedule. We also had a functional requirements document that had very high level use cases for the project. The use cases were written in very technical language and didn't really communicate what the goal of each use case was. But, without any better starting point, we used these two sources to build our first Project Backlog. Because the project is divided into very neat modules based on specific business practices within the client organization, we actually built several "Release Backlogs" based on these modules. The first "Release Backlog" we would tackle would be the Framework Backlog.
We had decided to do a two-week Sprint for our first Sprint. It would be enough time to see how this Scrum thing worked, but short enough to pull back if it began falling apart. We had our first Sprint planning meeting and timeboxed it to four hours. It was very enlightening for the entire Team. Our lead GIS software architect, Dave Bouwman, detailed the entire architecture and framework for the rest of the Team. For some of them, this was the first time they had heard any of the details. Dave answered all of their questions until the Team was satisfied that they understood the work ahead. We then prioritized the Framework Backlog ourselves and tried our best to estimate the number of hours each large chunk of work would take. It was very difficult to estimate because the use cases and work items in the backlog encompassed so much work.
Next, we began the process of selecting our Sprint 1 Backlog items. As we selected a use case from our Framework Backlog, we placed it into our Sprint Backlog. We then fleshed out all of the tasks that we needed to accomplish to complete the use case or work item. We decided that tasks should be no longer than 4 hours in duration, so we needed to do quite a bit of decomposition to get to that point. As we defined the tasks, we also decided who on the Team would actually be responsible for that particular task. We kept track of how much time each Team member was committing to for the Sprint as they selected their tasks. Once someone reached 85% utilization (our organization's magic utilization number) for the two week Sprint, they couldn't select any more tasks. We did it! We were ready to roll on our first Sprint...
The first Sprint actually went surprisingly well. We were off and developing our Framework. We had our Daily Scrums and felt very good about this new level of project communication and synchronization. We used an Excel spreadsheet that we designed to track the progress of our Sprint. The Team's sprint burndown curve was looking great and we were heading for a successful first Sprint. However, at the end of the Sprint, we realized that we had over committed ourselves slightly. There were a few items that were not going to be finished. Being the Sprint rookies that we were, we chalked it up to bad estimating and moved forward. We ended the first Sprint with about 16 hours of unfinished work.
After the Sprint ended, we held a Sprint Review. We timeboxed it to two hours. Everyone demonstrated their work to our internal client and we were all very happy with how things progressed out of the gate. We also did a Sprint Retrospective and timeboxed it to two hours as well. To get the most out of the Retrospective, we used several techniques from a book called Agile Retrospectives: Making Good Teams Great by Esther Derby and Diana Larsen. First we developed a set of Working Rules. That is, a set of rules that would help us have more productive meetings. Next we did a Timeline activity. On our white board, we set up a calendar of the days in Sprint 1. Each Team member used large Post-It notes to add significant events that occurred during the Sprint. The events could be technical, organizational, or team related. After everyone posted their events, we sat back, discussed each event and analyzed what we had all shared with each other. We tried to determine at which points during the Sprint the Team was feeling surges of high energy and when they were feeling low. This helped us pick out positive and negative things that occured during the Sprint. Based on this review, the Team had concluded the following about our Sprint::
- We didn't have enough information to effectively build the components we needed. Not enough design work was done to prepare for the Sprint.
- Our lead architect (who had all of the design knowledge) was being constantly pulled away from his Sprint tasks to respond to non-project requests from elsewhere in the organization (he's in very high demand!).
- We had some non-project infrastructure issues we needed to address in order for the team to work together more efficiently.
So here we were at the end of Sprint 1, feeling good, but knowing we had definite room for improvement and learning.
My Reflections on Sprint 1
Looking back at our first Sprint, there are many things I notice now that we could have done differently.
The first thing that strikes me now is that we probably should not have focused on only framework components. After convincing the client how great Scrum would be, we said goodbye for a few weeks and worked on things the client couldn't see. At the end of the sprint, we didn't deliver a single piece of business functionality...and thus we broke the first rule of Scrum. After listening to Ken Schwaber's Google Tech Talk on Scrum and attending Mike Cohn's Certified ScrumMaster course, I realized that we should have at least found one small increment of functionality that we could have pulled all the way through a layer of our framework during our first Sprint. It would have kept the client engaged and helped us prove that our framework was working. While it's alright to be doing heavy architecture during the opening Sprints, always keep in mind that it is more important to deliver business functionality. As the Sprints progress, architecture and framework work will steadily decrease as the focus on business functionality increases. If they are plotted on a graph, with amount of work and time on each axis, architecture/framework and business functionality would look something like this:

Another observation on our first Sprint was our difficulty in estimating the size and complexity of the high level use cases. I think our main difficulty was in the fact the use cases were written too technically and too abstract and didn't emphasize the user story. We have since been writing our Project Backlog items as User Stories. User Stories let us clearly identify the requirement in terms of the user's expectations, needs, and conditions of satisfaction. They are structured as follows: "As a [user role or type], I want to [do something useful], so that [some reason why]". We have also since discovered that estimating with hours for large tasks is not effective. We have begun using Story Points to estimate our Project Backlog items, but that is a topic another blog entry altogether.
A common trap we fell into was the belief that we had to do design work before our Sprint work could be tackled. We also did no documentation or testing during our first Sprint. We were really not "done" with any of the components we built in Sprint 1. All of the functionality developed during a Sprint should be designed, coded, tested, and documented during that Sprint. We are actively working to make this our definition of a complete increment of business functionality for our future Sprints.
What did seem to work well for us was the two-week Sprint length. The Team has agreed to keep going at this Sprint length for the duration of the project. It keeps us very engaged with the client and gives us a very clear focus and end-point to our work.
We did decide as a Team that we were spending far too much time on the Sprint Review and Sprint Retrospective and have reduced the timeboxes to 1 hour for the Review, 30 minutes for regular sprint Retrospectives, and 2 hours for release sprint Retrospectives.