Ever since the first time someone picked up a stone and started bashing something that required bashing, humans have relied on tools to ease the burden of getting stuff done. Today, we are completely inundated by tools. We have tools for manipulating materials, tools for measuring, tools for communicating, tools for visualizing; heck, we even have specialized tools that fix the tools we use to build other tools.
As proponents of the intricate, ever-changing task of securing information, we will use hundreds of tools as we go about our work. As a community that, more often than not, embraces the free and open exchange of ideas, a huge number of these tools have been made available from our peers in the form of open-source projects. However, as new technologies, threats, and techniques emerge, so will the need for new and improved tools. In fact, I would wager that most of you have already found yourself in a position where building a new tool would be advantageous.
To that end, I’d like to share my thoughts on the fundamental qualities and characteristics of good tools, step through one strategy I use as a software engineer for planning and writing reusable, scalable code, and, finally, recommend a few libraries and frameworks that may help you improve the quality of your own projects without a ton of additional time and effort.