Most of the software we write at Mutually Human is for the benefit of our clients. But, we also code for fun and to solve our own problems. On the first Thursday of every month, we open our doors and host a Hack Night where members of the community are invited to join us in this passion.
One of my responsibilities is to schedule, publicize, and coordinate the effort. I’ve long used OmniFocus to help keep track of everything I need to do. Each month, that means I create a Host Hack Night project with everything I need to do included. Several of the actions are set with deferral and due dates. Doing this ensure my attention is grabbed when I need to act, and not a moment sooner. The ability to hide future work not ready to start is the killer feature of OmniFocus.
The work I do in hosting the event each month is consistent and predictable. It starts with scheduling the gathering in Meetup.com about a week before the event itself. It ends when I log my expense report for the pizza purchase I’ve made a few hours before the event starts. OmniFocus provides support for repeating projects, but the repetition features doesn’t support a pattern like “the first Thursday of the month”. The Omni Group is adding support for that soon, but what to do in the mean time? Rather than re-create this project by hand every month, we can solve this problem with automation.
OmniFocus is available on the Mac and iOS, but I'll focus on iOS. The gold standard for automation on iOS is Workflow. Workflow provides a library of actions and the means to stitch them together. For example, I have a small workflow that converts a multi-page PDF into a single vertical image. I use it every month when it's time to create my expense report entry for the Hack Night pizza. The email receipt I get is a multi-page PDF but the expense tracking program only accepts JPEG and other traditional image files.
We can use Workflow to automate project creation in OmniFocus thanks to the their support for the TaskPaper format. More on this in a minute, but first we still need to figure out how to deal with the repeating date issue.
Fortunately, Google Calendar is more than capable of creating an event that repeats on the first Thursday of every month. In fact, we have just such an event set up this way on our shared office calendar.
The first step in the workflow uses the Find Calendar Events Where action to locate the next occurrence of that event. This yields a date object with all of its attributes - start date and time, title, description, etc. We only need the start date, so the output of that first action is passed into a Get Details of Calendar Events action that pulls out the Start Date. This is passed into a Format Date action to get it in ISO-8601 format, and the result is placed into a Workflow variable named Hack Night.
As mentioned previously, we’ll use the TaskPaper format to describe our project in plain text. With TaskPaper, a project is a line with a colon and tasks are lines that begin with dashes. OmniFocus associates certain TaskPaper comments with metadata as it creates the project. Used in this way, a TaskPaper description is a simple Domain Specific Language (DSL) for controlling OmniFocus.
For example, I can attach the @flagged comment on my project to turn the OmniFocus flag on for that project. OmniFocus interprets @defer and @due comments to set the corresponding dates and times for each project or action. A task item written as
Take out the trash @defer(Thursday) @due(Friday 8am)
gets set just as you’d expect when imported. Workflow also makes it possible to use the date stored in our Hack Night variable in the Task Paper script:
In the above, the first task is set to ensure I am reminded to schedule the next Hack Night 10 days before the event night and alerts me that it’s overdue if I still haven’t scheduled it three days later. The TaskPaper specification is built up in a Text action in Workflow and passed into the Add TaskPaper to OmniFocus action.
With this workflow, I’m now able to push one button on my phone and have a fully hydrated project placed into my favorite task management tool. And as important as the time savings is, the peace of mind I get from knowing I haven’t made a mistake on entry ensures I don’t spend any more mental energy than necessary on this monthly ritual.
If you already have Workflow and want to use this as a starter example, you can grab it here.
When we think of writing software, we sometimes are biased into thinking that it only applies to things like writing complex web or mobile applications. But this is a mistaken notion. The point of writing software is to solve problems or create new capabilities. Ever-increasing levels of abstraction is one of the longest trends in the software industry. Automation platforms like Workflow are the next logical step and are certain to play an import role in software development going forward.
Do you need help automating some part of your business? Drop us a note to firstname.lastname@example.org. We'd love to work with you.