Skip to content
04.15.20

Programusical Symmetry

Tom McCaffery
Development

Around the time I joined Adjacent, I also joined my first band. And no, this wasn’t some early mid-life crisis thing (or was it?).

a double exposure of tom typing and playing keyboard

While my life path has always bent towards the technical, creating music has weaved its way throughout it. Ever since I was a toddler—when early piano lessons begat a two-handed Jingle Bells performance at a packed senior home gig—I’ve been involved with music in some form, from producing bad techno in my early teens, to minoring in music in college, to taking jazz lessons as an adult (and let’s please omit the grade-school trombone era).

Anyway, some people think of music and programming on opposite ends of some sort of left-/right-brain spectrum: music is creative, free-flowing, and whimsical, while programming is rooted in dry logic and process. The truth is, they both end up somewhere in between.

Good music probably follows more patterns and formulas than it breaks, and good development comes from the ability to creatively structure and bring together parts that form a harmonic whole.

While I chose to focus on software and the web for my career and not music, I can’t help but notice some axioms I think apply equally to both.

1. Be intentional.

It’s not the notes you play, it’s the notes you don’t play.

Miles Davis

The most exciting part of every project is when I get to start slamming code down, creating order where there was previously nothingness. But that doesn’t mean it should be the very first thing you should do.

There is a reason most songs don’t hit you with the blaring solo right out of the gate. You want to be able to build to it, set up the pieces, and plan a route to the climax of the song, so that by that point, all the pieces fit together. Listen to what’s there already to that your part can add the right thing to it. Musicians sometimes call the resulting synergistic flow state as being “in the pocket”.

Before you write any code, you should consider what is actually needed. have a plan of where you’re going with it, how it should be architected, and what it will need (and not need) to do, before you get to the 6-minute jam section.

2. Don’t reinvent the wheel.

Copying one person is stealing. Copying ten is research.

Chet Atkins

Developers may be familiar with the “Not Invented Here” (NIH) syndrome, where some eager coworker rushes to create the next great JavaScript framework, ignoring the arguably hundreds too many out there already.

While it’s not as glamorous, a not-insignifcant part of programming is honing the skill of finding, evaluating, and fitting together libraries someone else made, so you’re not always solving unnecessary problems.

OK, so taken literally, this doesn’t exactly make for the best creative musical advice, but bear with me here: everything from chord progressions, musical styles, even the 12-tone system on which all Western music is based, comprise a foundation upon which great creativity is built. You’re not literally copying all previous musicians when you’re coming up with a new tune, but it was because of the groundwork and runway they laid that you were able to start where you did.

At the same time, the way you combine others’ libraries takes balance, and no matter how many libraries there are out there on GitHub, there will always be the need for some bespoke, microtonal code nobody’s ever heard before.

Spent Grain is a band born of rock ‘n roll, raised by funk and soul, existing comfortably in the rolling hills of Jam Band Land.

3. Practice makes perfect.

If you’re any good at all, you know you can be better.

Lindsay Buckingham

Humans are lazy. Well, the “good” kind of lazy that makes us more efficient in getting things done—solve a problem once, and it might be just the exact hammer for which you reach in the future.

The flip side to this efficiency is the potential for becoming complacent. Programming and music are both crafts, meaning that while there may be a floor to the skills you need to play at a certain level, there is no ceiling to the things you can accomplish.

The key to being good at any craft is the practice you put in to keep muscles and knowledge fresh. For music it may be drilling scales, jamming in new time signatures, or just surfing Spotify for new material. For coding, it may be working on 20% projects, learning new languages or environments, or just surfing blog feeds for new techniques. Either way, feed your brain’s progression, and let fresh perspectives guide your approach to projects, and you may just find your inner hidden bonus track.

4. When in doubt, improvise!

You’ve got to learn your instrument. Then, you practice, practice, practice. And then, when you finally get up there on the bandstand, forget all that and just wail.

Charlie Parker

Inevitably in a live show, some part of a song will go off-track—a flubbed lick, a missed bridge, or playing in the wrong key and not realizing it (guilty!). What I’ve learned over time is that what ends up mattering to an audience is not how you avoid these unexpected events (since that’s impossible), but your ability to think on your feet and change the plan to accommodate them.

Sometimes, a shift in requirements or an unforeseen implementation detail can seem to throw all the intentionality from tip #1 out the window. When this happens, it’s important to not be afraid to draw up and embrace new plans, and not lament the loss of the old one. After all, while our passion for our craft tends to aim us towards perfect, Platonic ideals, we’re still here to get a job done—solving problems for our clients.

So it turns out musicianship and—hmm, programmerhood?—aren’t the polar opposites they first appear to be.

They both offer a canvas for expression, room for personal growth, and team cohesion. Whatever your craft, I hope keeping these tips in mind help you turn your own projects up to 11.

Stage photo: BAK Pack Photography

More From Tom
Development
Why WordPress?