With a recent manager change as well as now a split location team, our daily sprint update process has largely changed.

# What’s the process now?

We changed from doing split location stand-up with limited help of teleconferencing software to completely letting go of the stand-ups and instead posting everyone’s update in a common chat room. Now every workday before 10:30am, each team member is supposed to send out an update with a given format, as a usual sprint update expects: (1) What I achieved yesterday? (2) What I plan to do today? (3) Are there any blockers? We are also expected by managers to add a hash-tag to the updates so that it’s easy for them to search through past updates.

# How does KeyboardMaestro help?

Morning time is extremely precious. Plus, it’s not guaranteed that I could remember what I achieved the day before–or, when it’s a Monday, three days before. Therefore I gradually switched to writing upfront what I’d post to the chat room the next work day.

As the format of the message is highly structured, I created a keyboard trigger that activates nvALT, switches to the note I use to keep track all my updates, moves the cursor to the top of the page, and inserts the following empty template to the top of the page (with some better spacing, as well as the actual hash-tag we use at work):

# For posting on Monday, 4/30/2018
#hash-tag
Last Friday: |
Today:
Blockers: None


The “For posting on …” part is for myself as reference, while the rest is to be filled up and ready to be copy-pasted to our chat room on the next workday.

Worth noting in this simple snippet is that I learned how to work with dates in KeyboardMaestro. The trigger will properly work out the “next workday”, and even consider avoiding a predefined list of holidays. This is shown in the following screenshot.

Similarly the script also knows to distinguish the current weekday–if I invoke it on Monday through Thursday, then it says “Yesterday”; if I invoke it on Friday through Sunday, then it says “Last Friday”. It also puts the cursor right at the location shown as “|”.

# What extras do I do on my own?

I was pretty happy above snippet for a while. Then in one sprint, I was way too occupied helping other teammates with their projects. The next sprint, I started to log what I really did in one sprint. The result was mind-changing. I logged over 20 hours of work that were meeting, chatting about other teammates’ projects, code reviewing, etc. In our two-week sprint, that translates to 2.5 days not working on my project, and the cost for context switching wasn’t accounted for.

So after that I decided to log every chunk of work I did that’s not accounted for in our sprint planning, as long as the time estimate of that exceeds 15 minutes. I do this in OmniFocus, which has a convenient “estimated time” field for any tasks. I do not use that as a way to planning, but simply as a way to logging. That worked quite nicely given that I also have installed an OmniFocus script to calculate total time of tasks by Dan Byler (among other useful ones).

In addition, since I started logging things, I also added the following fields in my daily sprint update snippet auto generated by KeyboardMaestro:

#personal-learning
## What work-only skills/knowledge/lessons did I learn today?
## What transferable skills/knowledge/lessons did I learn today?
## What soft skills did I learn today?


It turns out these three questions are tremendously helpful for me.

# How are these questions helpful?

The first question, work-only skills/knowledge/lessons I learned, applies to items that are all built in-house and not transferable. Our company has its complete solutions for build, continuous deployment, infrastructure as code, and numerous number of libraries to work with various systems. In addition, a huge chunk of our business logic, though built upon some solid computer networking basics, is work-only too. These are all things I view as a cost to my career growth in general.

On the contrary, transferable skills/knowledge/lessons are things I view helpful for my career growth in the long run. These are usually general knowledge programming skills as small as how to use a specific Unix command to as big as time spent learning on some general purpose libraries, or system design learning, AWS general topics, etc. It’s worth noting that both work-only and transferable skills are an integral part of a successful software development career. Calling them out separately here is not to deprecate one category and focus on another.

The third question, the soft skills, that I ask myself each day, is quite interesting and to some extent more useful. These are so interesting that I think each anecdote I drew lesson from is worth expanding to a paragraph and worth reading over time.