The words from the guitar teacher were spoken with the soft forceful power that only a true mentor can deliver.

"If what you're playing sounds awful, you're only one fret away - just move one fret in either direction. I distilled it down to harmony that's one fret away."

This passage from musician Adam Tepedelen's book “Mud Ride: A Messy Trip Through the Grunge Explosion,” is a statement so powerful that it refuses to leave my headspace. The simplicity that we may be only a minor change away from harmony is profound.

Early in my consulting career, I began teaching developers for a company called ADTC. Before an instructor was allowed to teach their first public class, they had to shadow another instructor. As luck would have it, my instructor was a fellow named David Anderson. David was an amazing instructor (and good friend) and I borrowed (some may say stole, LOL) many of his teaching techniques. One technique I learned from David I'm still using some 30 years later. I learned this lesson from a question a student asked and how David responded.

David didn't understand the question, so he asked the student for assistance with this question: “Can you say that another way?” The student reworded their question and, with that fret change, student and instructor achieved harmony.

As an exercise, how many fret changes can you pull from that last scenario?

  • Fret Change One: Begin a teaching career
  • Fret Change Two: Meet David Anderson
  • Fret Change Three: Learn to ask students “Can you ask that another way?”

This one experience yielded three significant fret changes that resonate with me to this very day. I'll bet you didn't think this was going to be an SAT practice exam, but here we are. You're welcome. 😃

Programmers will understand the concept of fret changes in their daily work. The art of programming is a constant state of fret changes trying to achieve the harmony of working code. Earlier this year, I was tasked with geo-coding over 350,000,000 million IP4 and six addresses. This is a huge challenge with the sheer volume of records to process. The process is this: Take an IP address, turn it into its numerical representation, then look up that value in a range table. The IPV4 and IPV6 have around 250,000 and 500,000 ranges, respectively.

I started building this process using simple brute-force code. As a test of Occam's Razor, would the simplest code work? I set about iterating through the 350 million records using LINQ to query the range tables that were loaded into memory. I immediately determined that this was not a workable solution. My back-of-the-envelope calculations figured it would take multiple hours (and maybe a day or more) to finish.

Time for a fret change. I looked for libraries or tools that could help make this process workable. That process yielded no positive results.

Time for a fret change. I went into the analog world (I went for a walk), thought about this problem, and the fret changes that I needed came into my head. I'd go back to the good old algorithms I learned in college. Hmmmm…. Would a binary search work? Let's change the tune…

I went to work re-learning how to implement a binary search algorithm using ranged tables. With some Google-Fu and an accidental assist from Microsoft's Edge's AI (I'll talk about this in a future column), I came up with the seeds of a workable algorithm to process this data in fast fashion. You know what? It worked! I was able to process the IPV4 addresses with a usable speed.

Then I went to classify the IPV6 addresses, and soon realized I'd need yet another fret change. This fret change was required because of the mathematics related to IPV6 address size. The original code was written in the .NET Framework (4.xx). which, I soon learned, has a limitation on the bit size of numbers it supports. IPV6 addresses are 128bit, double the 64 that the 4.xx framework supports. I changed the instrument completely by putting the code into the newest version of .NET Core, which has native support for 128bit numbers. My project had achieved harmonic balance.

These are just the highlights of the major fret changes and chord progressions that the code went through.

To conclude with a cheezie music metaphor, our lives are a series of progressions, chord changes, disharmonies, and harmonic resolutions. We make the music of our lives choosing what to play and how to play it. And occasionally, you need to change a fret or so to be more harmonious.

NOTE: This editorial required a fret change or two. I used my analog (walking) technique to figure out what fret to change to next.