My team and I enjoy discussing the various laws and principles of software development. Often, we find humor in these and can share many stories where we’ve encountered one or another. Other times, it gives us that piece of wisdom we need to solve an issue or explain a situation.

One law that frequently comes up is David J. Wheeler’s First Law of Computer Science, which states:

Any problem in computer science can be solved with another layer of indirection, except of course for the problem of too many indirections.

I just love this quote. When one of my architects is stuck on an issue, I often ask, “Have you considered adding another layer of indirection?” We then turn to brainstorming about what that indirection may be and how it might work. It helps to break through design “writer’s block”. There is a balancing act and art to finding the right combination of components that will achieve an overall solution.

There’s also a sense of wit here that I really appreciate. Obviously, if your problem is too many indirections, then adding more indirections is going to make the problem worse. Makes sense. The trick is to have the right indirections. So, attention must be paid to minimizing the moving parts in a solution.

There are many other computing laws. Here are two great posts (with about 70% overlap) covering many of the best:

What is your favorite law of software development?


<
Previous Post
Cross the River
>
Next Post
Training Costs Matter