Taking notes for productivity - Effective Programmer pt. 1


I’d like to welcome you to the first article from the Effective Programmer series. As it’s the first episode I’d like to give you a brief introduction to the series:

My goal is to describe productivity tips I find useful in my everyday work. I don’t claim to be a productivity expert, but I find some methods truly helpful and I’d like to share them with you.

The topic of being effective is so wide that there are books written about it. I will try to narrow down the scope of each article as much as possible, to focus only on the essential things from my perspective.

Shortly about me, to show you what I am doing and what kind of problems I face:

I am a freelance full-stack developer working mostly with Ruby on Rails and React. While being a freelancer I usually work for multiple clients who care more about the output of my work than how long it took.

The output, in other words: value - it’s what I am focusing on. My work made me realize that everything could be optimized and while finding the better way to do things is sometimes difficult at the beginning, in the end, it makes everyone happier.

And I’d be simply happy if you would find anything useful here.

  1. Taking notes for productivity
  2. Master Git tools

Notes

Everyone was taking(or making) them in school days, except the arrogant/genius kids who trusted that they will remember everything. If you were one of the geniuses who indeed didn’t have to take notes, good for you. But the rest 98% might find this topic relevant.

In school, I knew that I should note at least something - still my notebook was usually one of the emptiest.

But then, a few years fast forward to my first job and you know what? I was entirely sure that I could take almost everything straight into my head. And I regret that.

Later, I started taking notes, but it wasn’t an instant change, I had to grow up, and humble down. There were more and more things to remember and I was forced to find a more convenient place for storing the information than in my head.

Why you should consider taking notes?

Make the knowledge easily accessible

Knowledge is always accessible somewhere on the internet. But googling every time you need to use the “this” special command, or link to API documentation takes time. If you find the information once it’s way more convenient to at least store a link to this resource. Notes are ideal for it.

Did you ever spend minutes scrolling and searching for a specific message that your colleague sent you in the past? I did and sometimes even didn’t find the thing I was looking for. It’d be way easier if I’d save it.

And yeah it’s difficult to know which piece of information you will find useful in the future. Oftentimes you can’t know, but the thing is to make taking notes your habit, sooner on later it will pay off the investment.

Imagine a car repair shop, all tools should have their own place there. It helps the mechanic as he always knows where to look for a certain thing. Otherwise, his work will quickly become frustrating as he’ll spend more time searching for tools than repairing cars.

It’s a bit extreme example, but I feel that in programming we use way more tools and also have to understand the abstract needs of our clients. On a bigger scale, it’s impossible to do it all efficiently without processing and saving the things we already know.

I am a fan of keeping things simple so I encourage you to take notes, but I believe David Thomas and Andrew Hunt had similar thoughts while writing about Engineering Daybooks in The Pragmatic Programmer book.

Deep understanding

If you cannot explain something in simple terms, you don’t understand it. The best way to learn is to teach. - Prof. Feynman

Treat taking notes as a process of explaining the thing to yourself. While writing you might find out that there are certain topics that are unclear to you.

Be professional

Imagine your manager asking you a specific technical question about the thing you worked on a few months ago. If you would send him your notes about that topic clarifying the question it would be impressive, it’s a great way to show that you are professional and you treat your work seriously.

It was a cool scenario, but I do see a better one:

It could be more than a note

What if you could share your notes with everyone? The question won’t be made in the first place or you’ll just answer with a link.

I believe that good notes could be easily translated into documentation. If you find the information essential, others would likely also benefit from it.

Don’t get me wrong, notes are supposed to help you in the first place, but usually, with little to no effort, they could also help others.

How to take notes

Structuring and deciding what to put inside is a challenge on its own. Everyone could take a different approach, and for each person, different strategies might work. I’d recommend you read the article about Note-Taking methods written by GoodNotes to pick the method that suits you the most.

Methods could be different but you should always make sure they’re well formatted and without typos(consider using Grammarly).

How to define a good note?

First, it should be helping you.

But it’s only halfway true, you shouldn’t trust yourself. Share your notes with others. They might ask clarifying questions or tell you that they don’t like something inside. The reaction of others will show you if you understand and explained the topic well.

No matter what is the feedback you should take it. If there is no feedback - that’s also fine, you’ve done your part.


Advertisment

Every organization would benefit from a fast and efficient pipeline. It makes your programmers happier by having more time, and being able to work on the things that matter.

I am a consultant and my passion is optimizing processes. I will do my best to bring value to your project. If you find my research and knowledge useful…

Let's talk!


How to organize the notes?

How I organize the notes, to be clear, there are surely better ways.

It depends on the thing I work on. I am trying to organize notes per-topic to have them easily available. For example: If I work on project X there are high chances I do have opened:

1) This project’s Slack channel or 2) Code editor with its project repository.

Knowing that I’d start considering if I could store my notes in any of these places. Just to remove any friction between the work and writing notes. Talking about sharing, both Slack and Github are publicly available for other team members so they seem to be a good fit.

Let’s go through different topics and see how I organize notes for them:

Project Notes

The main note-taking tool for every client I work with is Slack. Why? It’s the place where everyone exchanges knowledge, sometimes you just have to distil the essential bits from the discussion.

How exactly do I use it for taking notes?

  1. Send a message to me with any useful commands/scripts/domain knowledge:

    Create a new message and add yourself as a recipient. It will create a private channel where you could send anything. But, I recommend you always ask the question “Is there anyone else who could also benefit from it?”

    If the answer is yes then…

  2. Create a public note-sharing channel

    It’s a great place to share important lessons from our work. I am not an Agile expert, but praising the sharing culture seems to align well with the manifesto for me.

    The plus of doing it on Slack is that it’s having low entry barriers. It’s way easier to send a short Slack message than add a new section to the documentation(what you should also do later).

  3. Add any useful message to Saved Items:

    Someone shared a valuable link, piece of information, command or anything you find useful? Just save it and look into the Saved Items card. If you’d always save the essential messages I am sure soon you will have a good knowledge database there.

  4. Share production command execution on a shared channel:

    It’s loosely related to the note-taking topic but it worked really well in one of my previous projects so wanted to share it:

    Create a separate channel monitoring manual activities on production servers. Answer for name and purpose before starting a console session and then attach it as a context to all messages shared on Slack.

    Thanks, Arkency for sharing the idea, it was a huge win on multiple fields as:

    • every developer is instantly notified about executing special code in production, it’s easy to ask for details
    • when you know that anything you execute will be seen by others you think twice before doing so
    • you have the history of all executed scripts and commands in one place, it’s useful for audits but also when something has to be re-executed then you could easily find the right command on the channel.

Slack works well for taking notes in a short-term perspective. Over time as there are more and more things it could become messy. That’s why I recommend transforming your notes into documentation. Either GitHub Wiki or Notion will be superior with abilities to properly organize pieces of information across subjects.

I’ve been in a few projects where the documentation was written only when someone was leaving the team. It’s difficult to write the documentation post-factum, the challenge is to decide what’s important then.

I encourage everyone to write notes and docs iteratively when the knowledge is fresh.

Technical notes

We’re getting outside the project/company. You might save everything in the “Notes” application installed on every PC and it’ll definitely work, but I do see a better option:

Maybe you should consider starting a blog? Start small, just a few phrases and a short code example. If not a blog maybe just post it on Twitter?

Why? A blog or Twitter account are places where you could confront your thinking with others. You’d be surprised how good it might work. I already mentioned it, but I didn’t give any example:

Recently, I’ve published a short article about deploying Rails applications with Capistrano that gained some attention only because people were saying that my solution is crappy. But they also shared a better one, I’d never learn this better approach without sharing this post.

Thanks to the feedback this post is already rewritten with the cleaner solution and I understand Capistrano better, a win-win scenario.

Collecting feedback is an awesome opportunity for learning

There is one other tool I’d like to mention: Gist. I usually save there any system commands or cURL requests. Gists are private by default, but at any moment you could publish them.

Getting Offline

After spending so many hours in front of our displays I find it soul-healing to use pen and paper sometimes. While being completely offline(it also means leaving the phone) I do have a so rare ocassion to listen to myself.

Silence and lack of external stimuli becomes a privilege nowadays as we’re consciously choosing distractions. Take a step back, write down your thoughts. I am not sure if it will help you to be more effective but definitely will help your sanity.


You made it to the end, thank you!

Written on December 16, 2022

Recent posts: