# 16 productivity rules

Rule #1: Establish and follow a system that enforces positive habits (like this set of rules). Big goals are achieved by winning small goals consistently.
Rule #2: Write down all to-do things in a in-bucket list (GTD system), which are evaluated on a weekly basis. Many trivial tasks may be eliminated after the evaluation. Also a good place to record all creative ideas.
Rule #3: Know the purpose by asking why should I do this? Am I really creating value or am I just inventing things to do or to seem busy? Say no to anything that is not high-value.
Rule #4: Set 3 wins for each day, week, month, and year (The Agile way). Plan every Monday. Review every Friday.
Rule #5: Make time for important things and fit others in the remaining slot. Like Stephen Covey’s example of filling a jar with big rocks, then small rocks, sand, water.
Rule #6: Apply 80/20 principle whenever possible. 80% of tasks / outcome can be achieved with 20% of time / effort. 20% of customers make 80% of profit while 20% of customers create 80% of problems.
Rule #7: No meetings in the morning. Reserve entire morning for productive work.
Rule #8: Do the most important thing first in the morning. This follows the 20% effort practice and leads to 80% outcome.
Rule #9: Of those tasks befitting rule #8, work on the most difficult task first.
Rule #10: Maintain focus and flow. Do not multitask (context-switching is expensive and brain can only work on a single demanding task). Block a time for hyper focus and then reward with 5 minute break (the Pomodoro technique).
Rule #11: Set deadline. Limit time to finish a task will increase efficiency (Parkinson’s law). Create positive pressure.
Rule #12: Choose tasks based on context (mental / physical energy, time and other resources availability).
Rule #13: Batch processing – group tasks that can be processed in a batch.
Rule #14: If a task takes less than 2 minutes, do it (when reviewing tasks).
Rule #15: Check email twice a day: once before lunch, once before leaving work.
Rule #16: For effective learning of a new subject, immerse in it. Study all great works on the topic. Apply it to daily life. Focus on a few and master them before moving on to new topics.

# A Blended System for Productivity

I first became interested in time management and productivity since reading The 7 habits of highly effective people by Steven Covey and Getting things done (GTD) by David Allen back in college. Since then I have adopted a few simple techniques for managing work, such as doing the most important things first and keeping a daily or weekly to-do list. That was working alright, but recently I decided to design a better system which can be (almost) effortlessly incorporated in my daily routine. After studying most of the best-selling books on the topic, I came up with the following blended system (see the end of the posts for a list of references). I implemented it in Evernote, which is accessible from the web, mobile phone, and desktop app. My system consists of five notebooks explained below:

1. Foundation – the big picture
• Note 1 – Who am I? Used to capture the essence of me, for example my principles and values. It serves as the first filtering layer, reminding me to ask if there’s a convincing reason for including something in my to-do list.
• Note 2 – Hot spots: Used to keep track of active projects pertaining crucial aspects of life — physical, intellectual, spiritual, financial, social, recreational, etc. Aims to give a high-level overview of my resources allocation, each project is summarised in only one sentence describing its goal.
2. Backlog / ideas – repertoire of short and long term projects and ideas
• Note 3 – In-bucket list: Used for brain dumping any ideas (with almost no filtering), to keep them out of the brain and avoid interfering with its operation when not necessary. This practice is heavily emphasised in GTD. I schedule a time to process and empty this list weekly, using the triage recommended in GTD.
• Note 4, 5, 6, 7- Personal development, professional development, assets creation, Misc: Used for storing the project ideas that have been processed from the in-bucket list. I find it easier to split these into a few prioritised categories (that may change over time) as a big project idea typically warrants further elaborations and expansions. Processing the bucket list weekly ensures more thorough consideration of which projects or tasks to act on. I often cross out many tasks as I review the bucket-list as, by the time I get to them, their true importance has dropped significantly.
3. Outcomes
• Note 8 – Monthly challenges
• Note 9 – Monday visions
• Note 10 – Friday reflections
• Daily (optional) – Years ago I used to write down my to-do list, one note per day, but now I just use a pen and a notebook that I can carry around to meetings to take note more easily.
4. Projects – the actual execution
5. References

The principles

The resources

• The 7 habits of highly effective people, Stephen Covey
• Getting things done, David Allen
• Eat that frog, Brian Tracy
• The 4-hour work week, Tim Ferris
• Getting results the agile way

More but mostly subset of contents from these books

# The power of habits

So last year I decided to build a habit of learning Korean for 15 – 20 minutes per day. In reality I could only do on weekday on the train back home.  I think this habit has worked marvellously and proved the power of habit. Through the practice of daily learning with small chunks, I can now write basic Korean sentences much faster, like the below letter that I wrote to my Korean teacher.
선생님, 새 해 복 많이 받으세요!
혹시 이 메시지 받을수 있는지 없는지 궁금해요 ㅎ
선생님과 가족 모두 잘 지내죠?
나는 한국어 매일 이십분정도 공부해라서 아마도 선생님 한테 더 자주 통화 할수있어요
우리는 시드니에 생활 좋아요.
날씨가 좋고 음식도 베트남 동네들을 가까워서 좋아요
작년에 우리는 집을 샀어요. 나의 사무실 부터 좀 멀지만 괜찮아요. 그리고 이번 4월의 우리는 다음 아이가 기대하고 있어요.
시간이되면 호주 여행 한번 하세요.
I’m sure there are mistakes somewhere but blame Google Translate 😀 This technology is so good now that it can tolerate mis-spellings when doing the translation. I suspect the letter may even look better had I just written it in English and send the translated version, but my teacher will be happier to see the product of my composure.
P.S. I use Duolingo for the lack of a better alternative as it’s now too basic for non-beginners and take some willpower to go through the lessons.

# The PhD

This post is a reflection of my experience during my PhD and summarizes what I think were important in helping me succeed.

1. Physical and mental health
I have been suffering chronic pain in my joints and muscles for a number of years now. There were days when the pain was so agonizing that I pitied myself for this misery at such a young age. But having endured the hardship only fortifies my zeal for life. I must maintain a strong health, physically as well as mentally, to be able to do all the things that I want to do.

A few simple things that I did and will keep doing:
– Exercise fifteen to twenty minutes a day
– Walk to work (this usually took fifteen minutes from my home to NICTA)
– Drink plenty of fluids, mainly water but sometimes cow milk, especially before I go to bed and as soon as I wake up in the morning, and also after around one hour
– Take a break from the monitor every now and then
– Have lunch with friends away from my desk.
This has been a very positive change for many of us as previously we just ate by ourselves at our desk while staring at the computer at the same time
– Eat mainly healthy food.
I don’t force myself to abstain from what conscientious people would deem bad or junk food — sometimes I eat them but I refrain to a very moderate degree
– Enjoy weekends with my family and friends.
It’s hard to quantify the impact of this but coming back fresh and fully recharged after a rest over the weekends made me quite productive.

2. Talk to my supervisor regularly

Ideally once every two or three days. However most supervisors are very busy so consider it good good enough if they find enough time to chat weekly. This is absolutely important during the early period (first year) when students often struggle and need help the most. After the first year, most students become more independent and would actually enjoy more time and flexibility to play with their ideas, the frequency of the meeting can be reduced.

3. Treat it like a job
That means going to work every weekday, from 9 – 5. Sure there were days before a deadline when I needed to stay late, or there were a few consecutive weekends that I had to forfeit. But in general I tried to stick to the working hours of a regular job. This also allowed me to keep a work-life balance, most importantly to have time for my family and friends.

4. Run experiments over nights and weekends

It is the nature of machine learning research to run many experiments on a computer. One reason for this is that we often have to try many different configurations of the model parameters before we get a good setting. Whenever I have a lot of experiments to run, I would schedule as many experiments as I can and let them be run over nights or  weekends.  When I came back the next mornings, the outputs were generated and ready to be analyzed. This was easily one of the most effective strategy.

5. Own my research

I figured out very early that I must take charge of my research. It is up to me to acquire the necessary background knowledge, to review the literature, to figure out the problems that I want to solve and how would I go about solving them. Of course Alice and Edwin were always very open to new ideas and discussions or making suggestions, but the rest is my responsibility. Realizing this gave me the freedom to explore paths that had not been taken before without having to wait for anyone’s approval.

6. Get my hands dirty

I produced three high quality papers in the span of about 7 months, a record that I am very proud of. I believe the main factor was my willingness (often eagerness) to get my hands dirty. When I came up with a good idea, I would code up the solution in a few weeks (typically after deriving the underlying mathematical operations). My goal was to have a working version very quickly and then later optimize for speed or performance. It’s hard to guess whether or not a model is suitable for a given task and the associated dataset, so having a decent working model is far better than polishing an imaginary model.

7. Time management

I applied some time management techniques. One of them was to have a todo list for each month, week, and day, and to prioritize on the importance of the tasks. For example, the most important task was often also the most challenging task, so I would spend the morning when I was quite productive to tackle these problems. I limited email checking to a few times a day (although some time I was guilty of perhaps checking it more than needed).

8. Project management

As a student with scholarship support, I wasn’t assigned any project. Most of the projects were my own research project, however I still applied some fairly basic project management principles:
– Be clear about the goal of the project (often the research objective)
– Break the project into manageable chunks and tackle the most difficult one first
– Document the progress (the model, mathematical derivations, experimental settings and results). This made writing a paper less difficult as the skeleton of a paper is often contained in the document
– Use collaborative tools (github for sharing the code, Google Drive for sharing documents and papers, etc)

# Use tmux or screen

screen or tmux is are terminal multiplexers that let you create multiple windows (and multiple panes in the case of tmux) and easily switch between them. This in itself is an extremely convenient feature to have on the console. They also allow you to keep the connection to a remote server alive, i.e. even if you disconnect from the server, you can resume your previous screen/tmux session when re-connect again.

I’m lazy so I only learn a few commands enough to get by; these commands are listed below.

Use screen instead. The control key of screen is Ctrl A
– screen -D -R : attach the active session (same as tmux attach)
– Ctrl – A – C : create new window
– Ctrl – A – 0, 1, … : switch to window number 0, 1 ,…

With tmux: the main hot key combination is Ctrl – B
– tmux attach : attach the active session (when there is only one)
– Ctrl – B – C : create a new window
– Ctrl – B – Shift – % : split the current pane vertically (into 2 panes)
– Ctrl – B – Shift – ” : split the current pane horizontally (into 2 panes)
– Ctrl – B – O : move around the panes
– Ctrl – B – 0,1,2,… : move to window number 0, 1 or 2
– Ctrl – B – [ : scroll mode  (q to exit )

I find several main advantages of tmux over screen (just using the out-of-the-box setting without any configuration — yes, I’m that lazy):

• tmux can split a window into multiple panes — very useful when having a big display or when comparing things side-by-side.
• tmux allows easy scrolling (with Ctrl – B – [ mode)
• ctrl-A can still be used to move the cursor to the beginning of the current line (this happens an awful lot times due to the iterative nature of a data scientist’s work)

# Professional tables in LaTeX

Every time I write a paper, I learn new good tricks and practices with LaTex. This time it’s about creating professional looking tables in a publication. With the help of booktabs, it becomes a very simple task — took me a few glances to figure out how to use it.

The golden rule is to stop using \hline and \cline
– Replace \hline with \toprule, \midrule, \bottomrule for horizontal stretching lines across the table at the top, middle, and bottom of the table, respectively.
– To draw a line spanning a few columns, say 2 to 4, the old way is to use \cline{2-4}. The equivalent of this is \cmidrule{2-4}.

# Matlab project directory

This is the template structure that I now use for projects in Matlab, always supported with git. Under scripts, I store the matlab scripts for running things, such as demo or batch of experiments. Under test I have the tests for important functions, especially gradient checking for optimization procedures. alltests.m has invocations for all of the tests written.

project/
libs/
data/
src/
test/
allTests.m
scripts/
output/
.gitingore
.git