Four tools I use to keep projects on track

Incomplete projects are the worst; here I discuss my workflow and tools to try and complete a project as soon as possible

Even the smallest projects can drag on if not adequately kept on track. Over the years, I’ve found a combination of four tools that help me keep projects on track.

You might be reading this and thinking, well, I’m not a Delivery Manager; why should I care about keeping projects on track? I want to start by addressing the question of who should be keeping a project on track.

The answer is simple, you should be keeping the project on track. This holds if you are a developer, a delivery manager, the CEO, the designer who needed to make a favicon.

What will differ between all these roles is what granularity you care about other aspects of the project, but you should care that you can ship the project.

The only work worth doing is work that gets used. You could have written the best code in the world, but if the project never sees the light of day, it didn’t matter [1].

If you want others to use your work, it is in your best interest to try and keep the project on track, even if it isn’t within your job description.


The problem of granularity is where most tools fail. If you’re a delivery manager, you need a fine-grained view of all the outstanding work, and you will want your tools to reflect that.

If you’re a designer called in to make a favicon, you don’t care what needs to happen for your favicon to be released, just that something additional is required before people can benefit from your work.

No single software product would allow the delivery manager to view what they need that does not also overload the designer who wants to know something is released. Everyone jokes about Jira, but that is the fundamental issue, a tool designed for one type of person will not be great for others. This is why I prefer to manage my system that sits adjacent to whatever tools the project wants to use.

I will be talking mainly about projects in terms of delivering software projects, but a project is anything that has more than one action item required to complete it. The scope of the system changes on the size of the project, but the four tools remain the same.

Enter my four tools

  1. OmniFocus is a personal project tracker that lets me track to the granularity I care about
  2. TextExpander [2] is a productivity tool that lets me capture longer bits of text as snippets I can re-use
  3. A calendar, I usually use Google Calendar but anything that lets you set events or reminders in the future
  4. Email is like Slack, only you can take your time crafting messages, and there is less expectation that if you don’t reply immediately, people will forget about it

I will wager you already use calendars and email, but OmniFocus and TextExpander might be new to you.

These four tools form one system for keeping projects on track. I’m not wedded to any individual tool, but I’m happy enough with the overall system that it would take a lot for me to want to seek to simplify or expand upon it.

A high-level view of my system

In OmniFocus), I keep all my projects, large and small, with a list of tasks to be done, including ones for other people.

I use TextExpander to keep on top of common prompts for myself or others when I’m chasing updates or assigning tasks; for example, I can type “dstandup” and be given a prompt for what I would fill in for a daily standup.

When someone mentions a date, I track it in a calendar. This might be “I’m off next week” or “the deadline is the 23rd”. I view my calendar as a series of time-based events that will pass and may need actions completed before they do. If someone is off next week, is there something I should get to them before they go off?

Email is how I prefer to send updates or seek updates from others. Most of the time, these updates don’t need read or actioned immediately, so passing them off to a less immediate form of communication is generally better.

Between my calendar and Omnifocus, I should be able to have an idea of how on track we are for any given project.

A combination of TextExpander and email means I can spend the smallest amount of my time to get the answers I need to keep the project moving forward.

Going deeper with an example

Let’s imagine there is a small web project. The team comprises a backend developer, a frontend developer, a delivery manager, and the client. In this example, I’m the backend developer. The project is about a coffee cup manufacturer, and the internal name is “Coffee Cup”.

It’s 10th January, and we know the deadline for getting everything signed off is 30th January.

Right away, I’m putting an event into the calendar on 30th January, “Coffee Cup final sign off”. I also know that client’s need time to sign things off, and if something needs done by a specific date and not on a certain date, I want to be conservative. Let’s give the client five days to sign off, which means a code freeze needs to happen by the 25th. “Coffee Cup code freeze” goes into the calendar.

We’ve already worked through the jobs and created tickets in our issue tracking system. This seems counterintuitive, but I will copy the titles of all these tickets into OmniFocus.

OmniFocus makes it easy to import many tasks at once via copy and paste, but if the project is small enough, even manually typing them won’t take that long.

Any task that is entirely for the frontend developer to do, I will mark with two tags, one will be their name, the other will be “Waiting”. [3]

Their name tag means next time I’m planning to chat with them; I can quickly see what open tasks I have that might be helped by speaking to them.

Waiting means this isn’t something I can actively work on and hides it from my main views within OmniFocus, so day to day, my to-do list isn’t cluttered with stuff not meant for me.

Tasks that need us both to work on something will also get their name against it.

Some tasks have dependencies that need to happen in order. You can’t edit an image until the client sends you the photo. Omnifocus allows you to specify this type of relationship.

By the end of this mapping exercise, I have a good idea of what coding actions need to be done by the 25th, and what steps I am waiting for someone else to complete, and what actions I have that are blocking someone else.

This is excellent information to plan out my next couple of weeks, including perhaps organising a time to pair with the Frontend developer on the tasks that require us both. If we can get some dates sorted for this, I will add these into the calendar and update relevant tickets in OmniFocus with due dates that suit.

Because I track all of my projects in Omnifocus, I can quickly tell if there will be clashes or potential issues to me completing everything I need to. I can flag these early and plan around any issues.

Meta work

Most projects have the work that needs to be done and then all the meta work that needs to be done. If you plan out your entire week to be doing the work but don’t plan any of the meta work, then you’ll end up with a project that is technically complete but not actually complete.

I will capture everything that didn’t make sense to capture in the issue tracker. This might be “organising how we deploy to staging”, “getting new test data for the new functionality”, or completely non-technical tasks like “Email the client a link to the staging site”. Over time you will get a sense of the meta work needed to ship something. It helps to keep a note of things that have held you up in the past so you can consider them in the future.

For my development tasks, I might choose to split down the tasks further, generally by the acceptance criteria in the ticket. I won’t do this for the tickets assigned to the Frontend developer because, frankly, I don’t care about the minutia of how they do their part of this project. This is where the granularity of this system works well. I have no idea of the complexities of setting up a new React component, for example. I could drive myself around the bend trying to track or micromanage that bit of work, but it adds no value for my needs; I just need to know when they have completed the work.

If I was also the Frontend developer’s mentor, then I might want to track some specific tasks tangential to the work. For example, if the developer wanted to get better at writing tests, I might set a task for myself to check in with how they feel about the tests on their part of this project. Because I track this all in one system, it is easy for me to scan outstanding tasks, so when we meet up to pair on something, I can take five minutes to check in about some of these other tickets.

Client communication

Regular communication with the client can help instil a sense of calm on a project and help stop issues early. I don’t believe in saving importing updates for scheduled catchups[4]; email is a much better tool for this.

Using Omnifocus, I can easily see what tasks have been completed since a given date to give quick updates on progress. I can also scan any questions I might have created tasks for, e.g. “Find out copy needed for Coffee Cup about page”.

I like to ask for feedback at regular intervals, asking questions like “How do you think the project is progressing?” or “Do you have any concerns?”. I can record these as snippets in TextExpander and save myself some typing and remembering specific questions.

For example, typing “clientcheckin” could expand to;

I thought it would be a good time to have an informal check-in; I’d love to know how you feel the project is progressing and specifically if you have any concerns.

It would also be great to know if all the dates we’re working to still make sense for you.

Happy to have a short call to discuss if you’d prefer that over email.

TextExpander has this great feature where you can interact with a snippet before it expands it fully. I often use this to create a list where I can uncheck items that don’t make sense for this project.

TextExpander autofilling an email to a client with an option selection being made
Example of an optional snippet being included during expansion

Closing thoughts

Keeping a project on track is mainly about managing expectations. Things will happen outside of your control. The best you can do is keep tight control of the stuff you can, and be aware of the things you can’t and communicate clearly.


[1] There is more to doing work than the work getting used, such as learning, teaching, paying bills, etc.! These are all very important. All I mean is that many decisions are moot if you know in advance, the project is never going to see the light of day.

[2] I’ve linked to TextExpander using an affiliate link, I’ve been recommending people use TextExpander since way before I knew they had an affiliate programme. If you’d like to read more of my thoughts on TextExpander, I have a full TextExpander review.

[3] Lots of heavy Omnifocus users would see tracking someone else’s tasks as heresy. And I completely empathise with their point. This certainly doesn’t follow the spirit of Getting Things Done. However, I paid for it, and I will use it however I see fit!

[4] Meetings are a time to discuss information everyone is aware of, not to share new information and immediately expect a response. If something is important, you will want the person to consider your question for a bit before sharing a reply.

Recent posts View all

Web DevMarketing

Getting more out of Plausible

Some things we've done to up our Plausible analytics game

Web Dev

Creating draft posts in Jekyll

How to create and develop with draft posts in Jekyll