I was reading my friend and colleague Joel Tosi’s blog the other day. He makes a lot of great points, and it led me to say “hmmm…”
I started thinking about how important it is to create what the customer wants, not just what you feel is “the best”. We in the technology world are very quick to go for solutions that are “elegant” or at a minimum extremely clever. The problem with that is we are not so sure that this is the best thing for the end user. Even though the agile development community is dedicated to providing value to the customer, we get ourselves caught up in the nuts and bolts too often, and forget who this is for.
I am not advocating hacking, or letting quality go. We still need to be treating our application development efforts as a craft, and making sure we build as much quality as is practicable into our process. What I am saying is that even if it is the most brilliant code in the world, if nobody wants to use it we’ve wasted a lot of time and energy.
I recall going to the symphony once to see Benjamin Britten’s “War Requiem”. The production was a celebration of a major anniversary of VE Day. I was lucky enough to have a box, and I was sharing the box with several veterans who were the guests of honor.
The production was huge. The chorus was a couple hundred strong, and the symphony had hired local musicians to augment the orchestra. I was excited. This is one of the best orchestras in the world, one of the best choruses in the world, and a major, highly respected work. The evening started with tributes to the veterans. The lights went down….
Benjamin Britten is an interesting guy. He comes from the modern, twentieth century tradition. This was a time of great experimentation with new tonalities. There was a lot of questioning of the traditional views on what harmony and meter really mean. The War Requiem is an amazing treatment of dissonance and gigantic, some might say monstrous, chords. I realize we are supposed to be talking about agile software development, but bear with me. The correlation I am making is that the music of this time period, and from Britten in particular, was very complex and intricate. The score is covered in comments from the composer to describe what he really wants there, since the notes on the page just didn’t explain it enough.
So how was the performance? Brilliant. Every nuance of the piece was performed to near perfection. The chorus and orchestra did such a great job that they won a Grammy award for the recording. And yet, it wasn’t very enjoyable to listen to. I found myself fidgeting. I recognized the technical brilliance of what I was hearing, but I was ready to not be hearing it anymore. At one point, one of the vets, with his combat ribbons pinned to his sports jacket, turned to his wife, and in a not-so-quiet voice said “What the h— is this?” I couldn’t help but think how much more he would have felt appreciated if the orchestra were playing a medley of the great Big Band hits of the war years. When the lights went up, he was out of there as fast as could be.
So when we are writing code and developing great software, we need to think about our audience. Are they going to care if we have just designed the greatest algorithm ever? Do they care if our code is so elegant that it will make a grown programmer weep? No. They want it to sound good. They want to enjoy using it, and they want it to get the job done. Quality is still vital, as poorly written code will be horribly dissonant. There may even be times when the complex, elegant code is what the customer wants, but don’t assume that. Find out what the customer wants. In the agile software development community, we value customer collaboration, so let’s ask the customer, “what is it you want here?” rather than assume. In other words, know your audience. Write something they can “dance” to.