​Slack x Harvest

Maciej Garycki

" If only I had a way to manage every step of my workflow from Slack, and never had to use another tool." Alex dreamt one night.

"Hey MG, want to make my dreams come true?" Alex mauled on his keyboard.

"Sure, anything for you, Alex" MG replied, hanging on Alex's every Slack notification.

And so the story of the Harvest and Slack integration began.

tl;dr Clone the repo on Github to get started with your own Slack x Harvest integration.

The beginning

We're pretty data driven at NEVERBLAND, making product decisions based on actual usage, but one metric that remains really important to any agency model is time spent. Forecasting, reporting, P/L; they all depend on that one piece of info.

Some of our team have been known to be a little lax with their time tracking, so we wanted a passive way to prompt them in Slack to add their time. After a bit of searching, we couldn't find any existing solutions for this, so we set about building one ourselves.

First up was a simple reporting tool to show everyone what they'd tracked that day. It was a roaring success.

Not the only lazy ones

When you're consumed with your work, simple things like checking your team's hours can slip your mind. To help us keep on top of things, we added the next step of our integration; a weekly post to our PM channel. This post lists out everyone's time from that week, listing each client and project.

This was pretty awesome, and very quickly gave us an overview of the week's work without having to open up Harvest. We decided not to make this a public name and shame, preferring to approach individuals personally to ask them to add their time. We're not keen on productising human relationships, although we look to make a product out of everything else...

Introducing: Slack time tracking

We had the above running for a few weeks, and it had a really positive impact. Some of our worst offenders not only started adding their time after being prompted, but actually started tracking time in the first place, just as we wanted.

This was awesome, but I wanted to take this to its logical conclusion, and actually offer the ability to control your Harvest time tracker right inside Slack.

We loved how Slack onboards users with a conversation, and decided to take the same approach, using Slash Commands to trigger each step.

/t start

Don't know the proper name of your current project as added in Harvest? This command is for you, and lists out every client/project you can track time against.

/t start [client name]

Know the client? Or know it ish?

/t start conjure

/t start co

/t start neverbland

/t start never

/t start [project name]

Got that super in-depth project name knowledge?

/t start zap

/t start app

/t start internal

/t start discovery

This starts a conversation with Slackbot, which can be done from any channel you're in.

To respond to Slackbot, you need to type /t in front of all your responses.

/t 3

Finally, confirm the task you're on. /t 1

/t status will tell you what you're currently tracking time against

/t stop stops your timer.

Pro tip: If you're changing task, you don't need to do /t stop, just do /t start for the new project and it'll stop your previous timer.

And that is the story of how my dreams came true.

The fun has only just begun

We decided to open source this for you all to enjoy - you can find the project on github - along with instructions on how to get your own instance set up. There's loads of cool ways this can be extended, would love to hear your suggestions.

The integration is in its infancy, so there's likely some bugs and room for improvement. If you find anything, please add it as an issue on github.

To Do

  • Send a prompt an hour into the day to check you've started a timer
  • Adding time retrospectively like /t update NEVERBLAND Internal 2:30
  • Sending weekly time reports to a project's Slack channel
  • Outputting time reports on command like t/ report NEVERBLAND

Maciej Garycki

Backend Developer

Back to