Slack Status Updater (CLI): Scope

Snip. Snip. That's the sound of scope creep getting cut.

January 19th 2018


I need to decide on what features I want to push this out with. Ideally what I want to optimize for is to actually complete this thing. Generally the best way to do that is to cut scope until it fits into a tiny time span which lasts two weeks maximum. A few days is better. But because I don't have guaranteed time to work on these projects, I can't really set a hard time limit. But what I can do is think roughly in terms of hours by imaginging what time limit I would set if this was a full time project. I'm going to have to take into account that:

  • I don't know golang
  • I will be using TDD
  • I'll be building this using clear architecture principles.

Basically I'll be learning while I go along. So, to start with I'm going to think about what I'd want in the CLI, then think about a timeline, and then cut things down realistically if needed. I'm going to start out by setting an MVP goal:

I want to be able to update my Slack status message through a single command in the terminal. I want to be able to change my status by choosing from a list of preset statuses.

The final state should look like:

slackstatus lunch to change my status to :chompy: having lunch

Chompy is an internal emoji btw.


After reflecting on what I want, here's a set of features that I thought of in no particular order. Just jotted them down while thinking and adding comments here as sub points

  • Have a help message
    • Would be good to have some kind of basic help message that lists all the commands available
  • Have decent instruction set on usage of each individual command
  • Validate emojis being used for statuses
    • Teams can have custom emojis alongside the list of standard emojis. This makes it possible to validate which emoji is correct if a team member is using :chompy: vs :chompie:
  • Sign in with Slack
    • Admittedly this doesn't make a lot of sense unless I offer the tool as some kind of hosted product. Without using sign in with Slack, anyone using this tool would need to create an app for themselves and get the token. Which I think I'm ok with.
  • Auto complete list of stored statuses
    • Hitting tab would either generate a list of available saved statues or would autocomplete if there's only one match.
  • CRUD (Create, Read, Update, Delete) statuses
    • Using a list of commands like slackstatus new|update|delete|view <status-name> you'd be able to modify status messages
  • Cross platform compatibility and have generated binaries
    • Make the platform have definite behaviours for handling the differences (esp in file system) across operating systems.
  • Create away timer
    • slackstatus lunch --away 20 would set the lunch status and set yourself to away for the next 20 minutes. Ideally it would say be back in 20 and countdown at the tick of each minute.
  • Unset status
    • slackstatus unset [OR clear] would clear the status message
  • Create custom statuses
    • `slackstatus set --custom ":tada:" "partying :grin:" would set a status that's not from your stored list.
  • Well formatted error messages when something goes wrong
  • List of statuses to get started with
    • So it's not lonely

I think that v0.1 alpha should be for minimal use of people other than myself. Meaning that it should be usable by other people but if there's some pain in getting setup, that's ok. If I set a deadline of about 7 days to create this, that gives me about 56 hours. to work with. Going back through each of those feature ideas, these are the ones I think I'll cut.

  • Away timers. This is really not needed and is actually a feature for when things are really stable probably. That said I might be able to have something similar in stages:
    • slackstatus set <saved-status> --active|--inactive would set the status and choose your active status. This might be easy enough to make the first cut
  • CRUD operations. For now I think it's easier for a person to manage their list of statuses given a file inside of ~/.slackstatus/config. That said, a command to list all available statuses will probably make sense.
  • Auto complete. Can substitute the need for this with a 'Status message does not exist' error.
  • Sign in with Slack. Users can create their own app. It'll probably be this way for the foreseeable future.
  • Cross platform compatibility. I'm going to build this to work on just my Mac machine and my linux machine. I probably won't distribute binaries to start with. People can generate their own if they want.
  • Emoji validation. Will replace this with a good error message.
  • List of statuses to get started with. Feel like this could be a stretch goal if I have time.

I'm on the fence about custom statuses. But in the interest of making this project happen, I'll go without it for the first iteration. This leaves me with just the following to get started with:

  1. The obvious one. Take a slack API token/secret, read from a list of given statuses and updaate status with the command slackstatus set <saved-status>. If a status doesn't exist display an error
  2. Well formatted error messages.
  3. Decent help documentation for commands.

And I have the list above to come back to for the second iteration :).

This post is part of a series of logs exploring how I'm building a CLI for updating my slack status. You can follow the full project here

Posted on January 19 2018 by Adnan Issadeen