It’s no small leap to say that music is the world’s first programming language. The written notes and symbols form a syntax to be followed. The entity being instructed, however, isn’t a machine — it’s a person. Like a scripted programming language, we follow along with a conductor and react to the notes on the page by doing what it says (notes), how it says (dynamics, tempo) and in the correct musical context (genre). I’d be remiss if I didn’t point out that most of my programming friends and colleagues are musical, as this concept is innate to anyone who likes to create things from abstract ideas.
What sets jazz apart from most other styles of music is its improvisational format. At first blush, you’d think this concept is incongruent with a structured activity like programming, but that couldn’t be further from reality. Jazz as an art form is one that requires you to understand all the precepts and theories of music since each piece is organized around conventions and common themes. Performing in a jazz ensemble requires knowing your part, an understanding of where you fit into the greater picture, collaboration, intense listening, multitasking and the ability to improvise when the opportunity presents itself. And these same techniques can be applied and compared to a well-functioning engineering team. This concept of jazz as a teaming tool is explored more intensely by Adrian Cho in his book The Jazz Process.
The heart of an ensemble is the rhythm section — typically, a piano or guitar, bass and drums — which sets the pace, laying down the groove that the rest of the group can follow. The bass is the actual heartbeat, providing the foundational chord, tempo and feel. Bassists can rapidly adjust the style from swing to salsa in just one measure. A great bass player can carry a band (think Ray Brown or Esperanza Spalding).
As the most versatile of instruments, the piano or guitar is the glue of the jazz ensemble. A guitarist or pianist can play almost all the parts. They can establish the rhythm, set the tempo, fill in the bottom or carry the melody — often at the same time. These great powers must be used delicately and with care; otherwise, it tips the balance of the music. Pianist Gerald Clayton strikes that balance well.
Jazz drummers are unique among percussionists. Not only do they have to be well-versed in so many rhythms and styles, but the effects of dynamics play a huge role in keeping things moving. The drummer is known as the conductor of a jazz band. You can hear that leadership in the playing of Art Blakey, Joe Jones, Jeff Hamilton and more.
The solo instruments — trumpet, sax, trombone, vibes — usually get the glory, but they also have to dwell in the spotlight by carrying the melody and frequently following the lead of the rhythm section. Cannonball Adderley was a great example of this.
Great combos, like well-functioning software teams, recognize that each section of the combo is equal and that everyone has to carry their weight and can’t hide in the background. Each person must know their part and have it down cold. They must trust that they can rely on each other at different parts of a set. They also must listen well and support each other. When one person solos, the others adjust their playing in an effort support the person downstage.
A software architect, like the pianist, can step into any role at any time but knows when to find the right balance between leading and following, thus inspiring a team. A project manager, like a drummer, sets the tempo and has to adjust quickly to the changing musical landscape. The quality assurance and DevOps folks are akin to a bass player: They keep it honest and are the backbone of a highly productive team. Finally, the soloist is like the developer: They are used to getting all the credit and glory but are really just a team member who knows that their role contributes to the greater good.
Experienced jazz musicians also know all the jazz standards, as well as common rhythms and styles. When someone in the band goes in a new direction, the rest of the group can easily follow them because of their mastery of the subtleties of their craft. No one has to explain these transitions; intrinsically knowing them instantly takes the whole group to a higher level of play.
In software, this is akin to the team’s deep knowledge of common patterns and frameworks. Addressing unique design problems with common architectures helps to accelerate the delivery of a product. In that way, jazz and software are very much aligned.
The ethos of jazz requires you to be brave and try new things, even if you make a mistake. This idea inspires the team concept that there are no bad ideas and that each person must dare to be great. Only when we do can we see the benefits of the interplay, the nuance and the value of working at such a high level of creative productivity.