Recently, we looked at how a jazz combo is a great metaphor for the interactions and exchanges that make up a great small team. The question then comes to mind, “surely, isn’t there more to it than that?” The answer is an unequivocal yes. There's quite a lot to it. Groups who reach this level of comfort and collaboration have a lot of experience and expertise under their belts. Let’s start to explore the journey that gets us there.
When I was a kid, I was very lucky in my music education. My high school was the host to an annual jazz festival featuring all of the local high school and university jazz bands. Because of this, I was exposed at an early time to a lot of different styles and techniques for music. The festival was actually prestigious enough to be able to attract some top/named talent each year who would give a concert and workshop. We had folks like Dizzy Gillespie, Louie Bellson and Clark Terry work one/on/one with us. This was the opportunity of a lifetime, and it happened once a year!
I’ll never forget the first workshop. Here I was, a young high school student. I considered myself a pretty darned good player, but I was going to learn from one of the founders of the bebop movement, Clark Terry. This was a chance to get past all of the usual, boring stuff all of the teachers told us, and get into how jazz is really made. Mr. Terry had us play a little, went over a few things and then asked if anyone had any questions. I asked him how I can really improve my soloing skills.
Now before we answer this, I should take a small detour for those who may not have ever
been involved in jazz. During each song, there is a break where certain players will get in front and improvise. No music is written down, just the chord structure (some might say architecture) of the song. It is very challenging and intimidating at first, but absolutely the most fun you can have once you learn how.
Now, where was I? Oh yes. Clark Terry was about to teach me the secret to great jazz improvisation. He looked at me and said, “Learn your scales, man.” What? Learn my scales? Scales are about as basic as it gets. Once you learn how to make noise without making the dog howl, you move on to scales. No real songs // just up and down in each key. Guess what? He was right. I know, big surprise... a jazz legend was right about how to play jazz. Once I learned those scales so that I wasn’t “thinking about what to play next,” the improvisation came easy. I was merely playing something that “felt right” because the actions and structures of those scales were burned into my subconscious.
Agile developers need to do the same thing. Once we learn the basics of control structures and loops, we need to learn our scales. It's not enough to just learn them once, or read about them in a book. We must practice them every day. We apply them to the work we do, and we aren’t willing to compromise on their quality. The more we do this, the more natural it becomes. Just as I might not consciously say during a solo, “now I am going to play a B/flat minor with a diminished seventh,” I might not say, while writing a piece of code, “And now, I will implement a strategy pattern.” I will obviously be aware of it, but it will be so built in to what I do as a programmer that I won’t have to stop and think about it. My awareness will be built into what I am doing.
So what is the programming equivalent to scales? There are actually a few activities which I feel fit into that category. Most of them are discussed quite often; but in my next post, I think it's worth it to take another look at them.