We all keep a list of contacts. Family, friends, colleagues, service providers – everyone from your Mom to the pizza delivery place. Before contact management went digital, people had address books and those circular Rolodex card organizers. For a while, people kept contact information in PDAs and spreadsheets. Soon after that, address books were built into feature phones. Today, just having a Google account gives you access to basic, but well-integrated, contact management features.

There are lots of tools that will store names and addresses, but this falls short if you need to track your interactions over time. On the other end of the scale are tools like Goldmine and Salesforce, but these are overkill for most individuals, both in terms of cost and complexity. Since I got into contracting, I’ve needed to keep track of very basic contact information, but also track conversations I’ve been having with each of my contacts. I actually stumbled onto this solution while testing out ranger, a console-based file manager for Unix-like environments. I found that ranger would not only list the files in a folder, but provide a preview of the currently selected file. From within ranger, I can open a text file in my default editor. Ranger does this out of the box.

I combined my work journal idea with basic contact management and came up with the following solution. Information for each contact is stored in its own text file. This includes properties like name, email address, phone number, and any other property I might want to record. Doing it this way, I don’t need to impose a consistent data model on each contact record. Each file also includes a date-stamped log of interactions: notes from emails, phone calls, and meetings. Looking at this refreshes my memory when a call comes in or when I’m writing a follow-up email. Using GNU text processing tools gives me even more ways to work with this information.

I’ve recorded a short (2 minutes) demo of this workflow. Most importantly, I hope this demonstrates how a do-it-yourself approach can deliver a solution that fits your needs and workflow.