Giter Club home page Giter Club logo

slacker's Introduction

What is Slacker?

At Hack Club, we have a lot of different projects that need ownership over the long-term. Each project might encompass many git repositories and Slack channels that need various different levels of support. Slacker is an attempt to organize and systematize our developer/customer support use cases into something that is easy to manage and measure, and also is welcoming of newcomers wanting to help participate on projects.

Project scope

  • Its primary purpose is to match incoming work with correct project maintainers
  • It is Github and Slack aware, which are both avenues through which work is submitted to us in practice @ HC
  • It is a system designed such that we do not drop balls (ignore and fail to triage incoming work), and will measure this directly via a time-series document trail written to ElasticSearch
  • Also aims to invite people to join teams and gain responsibilities, advertising them via Slack and web interfaces
  • Will (semi or fully) automate work where possible

How do I use it?

Currently, the main interface to Slacker is via issuing slack bot commands. A good first step to to run /slacker help to generally see its capabilities - but generally, one takes the following process:

  1. Assign yourself to a project via a project in the config directory.
    NOTE: You must be entered into the maintainers config to be assigned to a project.

  2. Run /slacker whatsup, which shows all of the projects you're currently assigned to.

  1. Run /slacker gimme to self-assign the next work item. After you investigate the AI, you can click 'Resolve' to signify the issue has been triaged successfully, 'Close - Irrelevant' to mark the issue as not needing action, or 'Snooze', where you can specify a time in the future to remind maintainers to triage this issue.

  1. If you need to regain context on your current work, run /slacker me. This will display all work items that are currently assigned to you.

Can it support my project?

In all likelihood, yes. Just add yourself and your project members to the global maintainers configuration file, and add a new project config here. Here is an example from the Sprig project - it is fairly self-explanatory...

name: Sprig
description: Teens make games and get a Sprig
maintainers: [leo, lucas, kognise, max, graham, josias, shawn]
channels:
  - name: sprig
    id: C02UN35M7LG
    sla:
      responseTime: 1h
  - name: sprig-platform
    id: C04S1A8NT44
    sla:
      responseTime: 24h
  - name: sprig-device-requests
    id: C063DFZ532M
    sla:
      responseTime: 24h
repos:
  - uri: https://github.com/hackclub/sprig
    sla:
      responseTime: 1h
  - uri: https://github.com/hackclub/spade
    sla:
      responseTime: 24h

Backend architecture

How can I learn more?

Feel free to visit the #hq-engineering Hack Club Slack channel and ask away!

slacker's People

Contributors

arpan-206 avatar dependabot[bot] avatar faisalsayed10 avatar galaxygamingboy avatar grymmy avatar jaspermayone avatar josiasaurel avatar lucasht22 avatar sampoder avatar serenityux avatar sheepy3 avatar snoglobe avatar v205arduino avatar velocitydesign avatar yednapg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

slacker's Issues

Log slacker activity

It would be good to have a visible slack-trail of slacker activity that people could optionally subscribe to (i.e., a channel where slacker activity is shown publicly). This could even be an opportunity to really "show how the sausage is made", if one were to get clever...

Support changing your project filtering settings at runtime

While we organize people into projects via configuration, users themselves might want to filter (focus) their attention on specific projects or resources. I could imagine this being implemented as such:

/slacker filter projectname1,projectname2

and to remove all filtering
/slacker filter none

Create new slacker elasticsearch index & creds

Tasks

Allow for project interdependencies

The current config looks like:

name: HQ Engineering
description: HQ Engineering stuff for Hack Club
maintainers: [faisal, graham, josias]
channels:
  - name: infra-alerts
    id: C05G25Y9M6V
    sla:
      responseTime: 1h
  - name: hq-engineering
    id: C05SVRTCDGV
    sla:
      responseTime: 1h
repos:
  - uri: https://github.com/hackclub/slacker
    sla:
      responseTime: 1h
  - uri: https://github.com/hackclub/infra
    sla:
      responseTime: 1h

Consider tacking on the following, to also allow monitoring/responsibility for another project - thus we could have a hierarchy of sub-projects under one governing project:

projects:
  - uri: project://dns

One thing to consider is whether or not it's a good idea to allow any sort of cyclical dependencies, perhaps that should be validated and PRs rejected if that occurs...

Action items in slacker should be clawed back when not acted upon promptly

An AI clawback policy should be universal in slacker. Any AI that is non-snoozed, and assigned to a specific individual for greater than 2 business days should be automagically unassigned. It might be good to send a notification to the user whose issue we clawed by with a warning as to why, and suggest they could reassign back to themselves if so desired...

Define slacker users in hard-coded config file, and use references to these users within project definitions

This may change in the future, but we want Slacker users (both high-level names to be used within slacker configs, and slack/github info) defined in one centralized config file.

All users within project configuration files should use the high-level, human-readable names as opposed to slack/github IDs.

It may make sense to make this more database-driven w/ associated web UI in the future...

Slacker should be able to filter by resource type

Sometimes I want to be in community-support mode and focus on Slack work, sometimes I want to be in white-hat PR review mode, and sometimes I want to pick up a trash bag and clean up some bug reports or feature requests.

Very broadly, slacker should respect the type of work that people desire to do (or review).... filter types at this point could be slack, issues, or code? Use cases that should respect this:

I want a new piece of work of worktype
I want to see work on this project of worktype
I want to see analytics on worktype

Monitored resources should support being split into subsections via pattern matching

There may be cases where we would like to route specific questions to specific individuals with specific domain knowledge/expertise. As such, resources defined in projects should support pattern matching of content to route specific work to specific people. If no resource-scoped responsibilities are defined, the ownership hierarchy should be respected (defaulting to project-level owners).

Example (excerpt from sprig-platform config definition):

  - name: sprig-platform
    id: C04S1A8NT44
    owners:
        default:
            people: Fayd
        specialized-web-responsibility:
            people: Graham
            pattern: /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
    sla:
      responseTime: 24h

Note: The above yaml is purely explanative and should be interpreted as pseudocode - do not take this specific example as exactly how we should implement this feature, find something that works 'good enough' and is clean.

Persist documents relating to analytics in ES

At least one new document should be uploaded to elasticsearch for every AI in slacker. See #58 for details on what this document should look like.

It may be smart to implement this in a backfilling-friendly in cases where we want to refresh a project's state in ES....

Instrument slacker using statsd

Please add instrumentation to the slacker service.

  1. Response times & success/failure for all commands
  2. Response times & success/failure for all db operations
  3. Counter that increments when service starts up
  4. Response times & success/failure for all external API calls (github, slack)

Support assigning work items to specific users

There may be cases where someone does not have sufficient skills (or time, or whatever) to resolve a work item. For these cases, you should be able to assign one of your work items to another specific individual - for instance:

/slacker assign <workitemid> <username/email?>

Investigate capturing more data from user when they click a resolution button

When users click the 'resolve', 'close - irrelevant', or 'snooze' buttons, we should probably display a modal popup that includes a radio input or dropdown menu that allows them to categorize why they pressed that button. We could investigate the utility of having there be a free-form text field there as well.

This data would be especially helpful when looking at analytics and determining what we could automate.

Update slack card and remove work items when they have been worked on to completion

Whenever you hit the "Resolve", "Snooze", "Close - Irrelevant" buttons, the work item being displayed should be removed from the slack user interface.

This results in a) good feedback to the user that their operation was successful and b) ensures that the user does not lose context/place (for instance, forgetting they already dealt w/ something already)

Add command for showing all project responsibilities in summary manner

This would, for the target input user, display a summary of all responsibilities in whatever form is most effective and explanatory/practical/good. For the current user only (not allowing for snooping on others), it could factor in current filter settings and other relevant status into its output to be helpful to the user - if not with this functionality, then "where" I guess would be my question...

I could imagine the slack command looking thusly: /slacker whatsup (user) <- parens indicating optional user param, defaulting to self, or the more boring /slacker duties (user)

Slacker should be GH-tag-aware

We should keep track of github tags associated w/ issues such that we can serve 'good first issue' things to new contributors that aren't officially associated with a project (see #39)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.