Being the business analyst on an agile team is a little like standing up in a canoe. It’s more about anticipation and balance than control, as I had the opportunity to learn on a recent project.
The project team was responsible for delivering data from back-end systems to a mobile device. The team had two groups, one to develop the web services that provided data to the device, and the other to develop the device code itself. The two groups were located in the same building but not in the same room, so communication between them could break down. I saw that I would have opportunities to help them work together.
For example, I knew I needed to create an interface document describing the web services that the device would consume. I reviewed the device screen mockups and the website the device was supposed to imitate, and I talked with the developers working on the web services. Based on these I wrote an interface definition that I expected to be close to 100% accurate.
After I completed the document, two things happened. First, the two groups kept on doing what they had been doing, writing services and setting up to write code for the device. The services developers were presumably building the services in accordance with the document, and the device developers were not ready to consume them yet.
Second, as soon as the services people started building the services they discovered several places where they said they could not, or should not, implement them the way the interface document stated. I listened, and in most cases I followed their advice. It was early in the project and they knew their systems better than I did. I updated the interface document and took comfort from the fact that the changes had not cost the device developers any time.
If I had been on top of my game, I would have worked with the service developers to define Fitnesse integration tests, and the device developers would not have tried to consume the services until they passed the tests. Sad to say, I was just learning Fitnesse and still catching up on writing tests when the device developers began to consume the services.
Without supporting tests, it’s no surprise the device developers found problems. There were cases where data was populated in the wrong place or not at all. At this point I could have mediated between the two groups. That’s what I had done in creating the interface document. However, I did not do it this time. The device developers had immediate questions that only the service developers could answer. The easiest way to get answers was for the developers to talk together and for me to stay out of their way. I listened to their conversation, and by the end they knew how to integrate. I also learned what I would need to test.
You might ask, what was the value of writing the document at all if the developers wound up talking with each other and changing it anyway? The value was this.
- The exercise of writing the document got the service developers talking to members of the team other than themselves (i.e., me), helped them think through the services before writing them, and gave them a detailed target to shoot for.
- Automated tests could be created from the document to validate the services as they became available.
- When the developers could not do what they thought they were going to do, they sought to make the problem visible: “We can’t do it like the document says.”
- Even though there were a few problems, the services were still 80% correct the first time without need to take time from the device developers. When the problems were discovered they were small and resolved quickly.
Taken in perspective, it was a successful bit of BA work. All I had to do was anticipate a need, stay balanced when not everything went according to plan, and remember that the purpose of the document was not the document itself. It was the collaboration it created between the developers.