Daily Thought Email

I really enjoy reading great books and articles. Some of my favorite books are fiction. I like works of fiction because they provide a lens for understanding complex ideas, experiences, and emotions. But I read far more nonfiction than fiction, probably because I’m just too damn practically minded. There’s so much amazing information just waiting to be discovered in the pages of nonfiction work that I feel obliged to consume it. I’m also a sucker for articles with titles like “Clean Up Corrosive Interpersonal Dynamics on Your Team with This System” and “Loneliness on the Job: Why No Employee Is an Island” that promise to have an immediate impact on my career. Immediately after reading the work, I’m eager to discuss it with others and the ideas are fresh in my mind. Inevitably, my unrelenting appetite for a new book urges me to pick up the next one on my list. I continue to devour nonfiction only to find that, six months later, I am lucky if I can remember the story arc and the most significant findings. The intriguing details and actionable knowledge that I hoped to internalized rarely are secured in my not-so-great memory. This unfortunate cycle of reading and forgetting has been nagging at me for years and was the inspiration for this project: to generate an automated daily email that sends me an idea, quote, or striking fact from my favorite nonfiction reads.

Of course there are hundreds of services that will send you a daily quote, word-of-the-day, or really anything else you can imagine. I was more interested in something customizable. My vision was that I would build the content over time as I come across noteworthy passages and the software sends me a random selection each day to help keep these ideas that I’ve deemed most relevant and interesting fresh in my mind. I suppose this is a bit of a departure from the current trends of machine learning (ML) as a recommendation engine. In fact, I recently took a course offered by the Pittsburgh Supercomputing Center on machine learning (it was awesome). However, I don’t think ML is the right solution here. No algorithm I’m aware can identify which phrases resonate with me (without tens of thousand pieces of training data).

My idea for implementing a daily thought email was pretty straightforward:

  1. Create a Google Sheet to store the data. I chose a Google Sheet since I can quickly pull it up on my phone and add some interesting text whenever I see lasting value in what I’m reading. Each nugget of information is stored in a row in the Sheet. I note the actual text (try to avoid paraphrasing), the author (or attribution), the title of the work, and a link if available.
  2. I’m using Node.js, Heroku Scheduler, and Nodemailer to email a random thought each day (similar to my NTRS daily digest app). As you would expect, Google has an awesome API for accessing and manipulating Google Sheets, and, of course, a handy example to get started with Node.js.

I coded up the pipeline described above and voilà, it worked like a charm! Here’s a quick example of the result:

Example daily thought email.


I didn’t bother with fancy formatting. It would be nice to dress the email up a bit to make it more visually appealing, but the truth is that the email accomplishes what I set out attempting to do as ugly as it is. In the spirit of being lean, I’m going to try things out for a couple months and see how it works.

In case you are wondering about my Google Sheet with the nuggets I’ve selected, you can check it out here. At the time of writing this post, I have 42 entries. My plan is to just add new entries as interesting ideas jump out at me when I read new books and articles. Retroactively adding ideas from books I’ve read in the past seems too much like real work.

I would bet that I need a more sophisticated algorithm than the current math.random() approach to choosing a ‘random’ thought each day. What I really want is not a random sampling. A random sampling will have too many repeats. Just like when you set your music player to shuffle, this is a case where a random sampling is not ideal since you actually want a pseudo-random sampling that avoids repeats and prefers entries that have not been selected recently. If I receive the same daily thought two days in a row, it loses value for me. I’m not certain of an acceptable frequency for repeats, but I suspect that I don’t want to see the same daily thought again for a few months. It’s relatively easy to think up algorithms that tackle this problem and I’m sure there are some well-established examples. I’ll probably revisit this in the future if I find my Daily Thought emails useful.

I have a bad habit of thinking (and occasionally vocalizing) one of my favorite lines from Top Gear: “How hard can it be?” Well, I’m here to say: it’s usually quite hard and will take at least four times longer than you anticipate; however, in this case, it’s not actually hard at all and only took about an hour.