TRUE design, as quoted directly from Practical Object-Oriented Design in Ruby by Sandi Metz, is:
Transparent - The consequences of change should be obvious in the code that is changing and in distant code that relies upon it.
Reasonable - The cost of any change should be proportional to the benefits the change achieves.
Usable - Existing code should be usable in new and unexpected contexts.
Exemplary - The code itself should encourage those who change it to perpetuate these qualities.
When I first read about this, nearly a decade prior to crafting the article you are reading now, I immediately fell in love with the pattern. Granted, my Ruby skills are no where near what they are now, but I was determined to achieve this goal. I still am because part of the joy and craft of engineering rigor is through TRUE design in order to maintain architectures that are constantly growing and evolving.
Now that I’m older, testing and implementing what I need isn’t as hard as it used to be. The ability to be transparent, reasonable, and usable comes more naturally now. This doesn’t mean I don’t stumble along the way. Mistakes will happen. Only that when taking a misstep the recovery is faster. Building up experience over time, while hard won, definitely has it’s payoffs. To hold myself accountable in this endeavor, I pair with my favorite coding buddies such as Rubocop, Reek, and Git Lint. All of those tools combined ensure I don’t falter when it comes to writing transparent, reasonable, and usable code.
The difficultly, though, is always in striving to be exemplary. As a principal engineer/architect, leaving behind a high quality representation of patterns, objects, etc. for others to pick up and use takes a lot of discipline. This trait is very rare in the software industry which is why I have become more of a thoughtful and slower engineer. The reason being is that if you don’t set a good example with strong patterns of exemplary code to begin with, the rippling effects magnify when code is enhanced or updated in the hands of younger engineers that don’t fully grasp what they are working with or even understand the fundamentals of the language.
In the end, remember to stay TRUE to yourself and those around you. When done with care and discipline, the result will produce a positive effect on your team and organization as a whole. Sandi says it best:
Persist. Practice. Experiment. Imagine. Do your best work, and all else will follow.