Org Mode Tagging
Tags: emacs, org
Published: 2019-08-21 03:17:38

---
title: Org Mode Tagging
published: true
tags: Emacs,Org
canonical_url: http://www.thagomizer.com/blog/2018/05/30/org-mode-tagging.html
---

I’ve been conducting about one interview a week this year. That isn’t an impossible interview load, but it isn’t insignificant either. For me, the hardest part of interviewing is preparing questions ahead of time. It isn’t strictly necessary to come in with a plan, but I find it helps me be confident I hit all the areas I need to hit. Prepping beforehand also lets me tailor the questions to the candidate and role. However, I don’t want to ask each candidate entirely different questions, and I don’t want to have to think up questions when I’m cramming in the hour before the interview. In the past, I’ve used my previous interview notes to come up with questions but even with grep that got tedious. Luckily, `org-mode` provides a neat solution.

## Tagging

Org-mode supports arbitrary tags on headlines. If you are using Org to track tasks, then you might tag items “work” or “phone”. Tags go at the end of the line, surrounded by colons. You can use `C-c C-C` to enter a tag in the minibuffer, but most of the time I type the tag, surrounded by colons.

```
* Buy cat food :store:
* Water green beans :garden:
* Eat extra cookies :work:lunch:
```

You can also supply file level tags with this syntax:

```
#+FILETAGS: :work:supersecret:

* Come up with an awesome code name 
* Write awesome codes :computer:
```

I found tag inheritance to be non-intuitive at first. File level tags apply to every headline/bullet point in the file. So both of the headlines in the above example have the “work” and “supersecret” tags even though they aren’t on that line. The second headline also has the tag “computer.”

Once you have started using tags, you can use tag searches. `C-c \` searches the current buffer and highlights the headlines with tags matching your search. Tag search supports basic Boolean searches with `&` for and, `|` for or, and `+` and `-` for required or excluded matches. You can combine and nest operators which lets you do things like `store|home-garden`. That query lists all the items marked store or home but discards items matching home if they’re also tagged garden.

To search across multiple org-mode files, you need to have them included in the files searched for the [agenda](https://www.gnu.org/software/emacs/manual/html_node/org/Agenda-Views.html). To do this, you have to modify the `org-agenda-files` variable. I found this part confusing since it doesn’t make sense to me that you modify the “agenda” to search multiple files that don’t contain any tasks but org is weird sometimes. Once you’ve configured the search path, you can use `C-c a m` to search for matching headlines in all files. The whole tagging system is incredibly powerful, and I’ve only gone into the very basics here.

## Using Tags for Interviewing

I have two ways I use tags for interviewing. First I have a `questions.org` file that lists all the questions I’m comfortable asking. I’ve tagged each question with the general category it is meant to asses (technical, developer relations, leadership, etc.) and potentially a secondary tag like “appdev” for Application Development or “warmup” for more straightforward questions. Here’s a small snippet from my questions file.

```
* What interests you about developer relations? :devrel:
* What is your favorite language right now? What do you like about it? :general:warmup:
* Tell me about a time when you had to push through a contentious technical change. :leadership:
* What is serverless? :serverless:appdev:technical:
```

When I’m preparing for an interview, I first create a new org file for the interview. Then I search my questions file using queries like ‘warmup’ or ‘DevOps’ to find questions that may be relevant. Once I’ve found a question I want to use I copy it to the org file for this interview.

After the interview is over, I tag the interview specific file with a couple of file level tags. Usually the job ladder, an approximate level based on my leveling recommendation, and maybe the candidate’s specialty. This habit leaves me with many files containing a list of questions and a set of header tags like this:

```
#+FILETAGS: :DA:L4:L5:language
```

I use the file level tags to see the exact list of questions I’ve asked for this role before. If I’m interviewing a language DA, I’ll search for language&DA. I use this shortcut for common roles because it saves time and it ensures I’m asking every candidate roughly the same questions. I still spend some time tweaking questions based on the candidate’s resume or open source work, but I find being able to grab the exact list of questions very quickly is a huge time saver.

## Conclusion

I’m pretty sure this isn’t an intended use of org tagging, but it works well for my purpose. As I think of new questions (or come up with extensions to existing ones) I add them to my question bank for use in the future. Offloading a lot of the prep to my computer lets me show up for interviews relaxed and more focused on the candidate experience. Also, [we’re hiring](https://careers.google.com/jobs#t=sq&q=j&li=20&l=false&jlo=en-US&jcoid=7c8c6665-81cf-4e11-8fc9-ec1d6a69120c&jc=DEVELOPER_RELATIONS&j=developer&).