Fishing and Iterations
A really good friend of mine was visiting and we were just catching up. We were talking about what things we have been doing with our time and we both surprised one another by saying that we have both taken an interest in Fly Fishing.
So we decided to wrap up work early and head out to a lake and swing some flies (That is the actual phrase). She admitted that she has only been once and it was still very new and strange to her. So I thought for a moment about what I really ought to teach her to get her out fishing. I certainly didn’t want to overwhelm her.
I tied a simple dry fly that wouldn’t get water-logged. Taught her the Roll cast, how to grip the rod, and what to do if she saw a fish jump up and grab the fly. This was still too much but she stuck with it, and had her fly on the water for plenty of time. Unfortunately no fished seemed interested.
I also did not have any real bites myself, and while I’m not an expert by any means, I realized we were fishing in an area that was not going to yeild fish. So we moved to a place that I thought may be more productive. Sure enough, I caught a fish quickly. I then changed my friend’s fly based on what I had observed so far. Within minutes she was getting bites and was trying to bring her catch in.
How does this little story apply to software? Well, in a peculiar way we fished in an unstructured, but agile way. Ultimately, we both wanted to catch fish. Now, we could have spent a ton of time going over the nuances of casting, presentation, fly selection, and reading water. Instead we chose something much smaller that we could try and use that as a foundation for future improvements. I got her on the water with a simple cast, a easy fly, and she was able to try it out.
Now, we checked in every now and then just because we’re friends and I wanted her to not be bored. But, again, it prompted me to step in and figure out how we can make the experience better. Those check-ins gave me a hint that things weren’t progressing and it was becoming boring. So, I suggested we move. I caught fish quickly. That meant there were fish in the area. She wasn’t having any bites. That meant she was very likely using the wrong fly. I changed to one that seemed a better fit. She got a bite, but lost the fish. So I gave her advice on how to land it and retrieve it. She brought the next one in.
These little moments all happened within 20 minutes of realizing we needed to improve things. Each step built on the previous as the smallest thing that could possibly work and resulted in my friend landing her first fish on a fly.
This is a cute little analogy for people questioning their process or those considering agile. Software is usually more complex, takes a lot more effort, and a lot more time. Good thing you have a whole team of people who are trained to deal with that. We went out to catch fish, what is your team trying to do?