There are a few things that set apart true professionals from the rest in their trade. Among these things are a refined workflow and a mastery of one’s tools.

No matter the industry, this philosphy holds true. A great carpenter will know the purpose and location of every tool in their shop. A great photographer will be intimately familiar with the settings and behavior of their camera, as well as a suite of photo editing tools and programs.

A lot of times, we can expect programs to ship with what are commonly referred to as “sane defaults”. This means that for a new user, there shouldn’t be very much to configure in order to get up and running. The settings are preconfigured in a way that makes sense for the average use-case. This, combined with a general apathy towards customization/optimization from the average user, has left many of the most powerful tools, programs, and features unexplored.

This is a tragedy, because if we fully harnessed the power of the software we already use, our productivity would greatly increase. Take document writing as an example. There are a million programs out there designed to type documents, all with varying features and specializations. However, a good portion of the population will never move beyond Microsoft Word, or whatever their first document editor was.

Time after time, I see students (and professors) attempt to format a math heavy document in Word, completely unaware that LaTex or R Markdown exists. Or even worse, preform tedious and repetitive text editing tasks that probably could have been automated with a single vim command.

Everytime I find myself thinking “there has got to be a better way to do this…“, I actually take the time to find and master that better way. And if it doesn’t exist, I do my best to make it. Some might consider such obsessive configuration a waste of time. Why spend hours writing config files when you could just be writing code?

There are lots of benefits of building your own workflow, from increasing raw productivity to passively gaining knowledge by exposure to the granular settings offered by most tools and programs. In this series of posts, I am going to explain this philosophy and how I apply it to my own systems.