Jump to: navigation, search

StoryBoard/Notifications

< StoryBoard
Revision as of 10:49, 10 December 2015 by Zara (talk | contribs) (make it easier for reader to see what subscription preferences are currently implemented)

meeting irc logs here: http://eavesdrop.openstack.org/meetings/storyboard/2015/storyboard.2015-11-18-15.00.log.html

followup in #storyboard here: http://eavesdrop.openstack.org/irclogs/%23storyboard/%23storyboard.2015-11-18.log.html#t2015-11-18T15:46:32

To be worked into a more readable spec for notifications, that will form the backbone of a roadmap for the next few months of StoryBoard development.


Spec


A user needs to know:

1. When something (that affects that user) updates (in a way that affects that user)

Requirements:

a) Things that affect users must be tracked. Selectable subscriptions exist. 
     If not all things that can be updated in a subscribed resource will be relevant, then...

b) EITHER: SB needs to track whether or not an update to a subscribed resource is relevant to the user,
   OR:         subscriptions need changing so that users can only subscribe to relevant things.

  i) What things can update?

     currently:
     Stories are related to projects via tasks. 
     Project groups collect projects, which then relate to stories via tasks.
     An asterisk means that a user can currently subscribe to/unsubscribe from this update directly.

     * Stories:
         - Creation*
         - Removal
         - Title
         - Description
         - Tags Added*
         - Tags Removed*
         - Comments*
         (TODO: find out if 'title' and 'description' = 'story details changed' in preferences)
         * Tasks (listed on story detail page)
             - Creation*
             - Removal*
             - Title
             - Assignee*
             - Priority*
             - Status (todo, review, merged, invalid)*
             (TODO: find out if 'title' = 'task details changed' in preferences)
             * Project (to which the task belongs.)
                 - Creation
                 - Removal (currently not possible)
                 - Title
                 - Description
                 * Project Groups (to which the project belongs):
                     - Creation
                     - Removal (currently not possible)
                     - Title
                     - Description

  ii) How does storyboard keep track of these?

    Every POST, PUT, or DELETE request triggers a hook in the API, which
    publishes a message to the rabbitmq queue representing the event (eg.
    a PUT request that edits a story creates a `story_details_changed`
    event message).

    `storyboard-worker-daemon` watches this queue for messages and passes
    them to handler processes. Currently, the only handler is one which
    creates records in the `subscription_events` table relating to what
    the request did (eg. a PUT request that edited a story creates a
    `story_details_changed` event in `subscription_events`).

    The Recent Events list on the dashboard leverages the API to get the
    contents of this table relevant to the logged-in user, and displays
    them.

  iii) How will a user tell SB which updates to look out for?

      Should be: easy to find, easy to change, precise.

        currently:

        * User can click stars to subscribe to stories, projects and project groups. 
          There is no way to subscribe directly to a task;
          the user must subscribe to the story containing that task. Star locations (always on right)

          Stories:

          * Story list page (accessed from sidebar)
          * Story detail page (accessed by clicking on story name in list)
          * Projects detail page (accessed by clicking on project name in projects list)
          * Project group detail page (accessed by clicking on project group name in project groups list)

          Projects:

          * Project list page (accessed from sidebar)
          * Project group detail page (accessed by clicking on project group name in project groups list)

          Project Groups:

          * Project group list page (accessed from sidebar)
      
        *preferences for timeline events accessed from profile page (linked from 'profile' button on sidebar)

        *popup timeline filters accessed from story detail pages (linked from wheel next to 'events timeline' heading)

        These both look like :
                
                Checkboxes with 'save' button at the bottom, with the following options:

                Story created
                Story details changed
                Tags added
                Tags deleted
                Task created
                Task assignee changed
                Task status changed
                Task priority changed
                Task details changed
                Task deleted
                User comment

        I think the current implementation meets criteria of being easy to find and easy to change, but isn't precise
        enough yet. Issues:

        1) Tied to stories. Settings are only for timeline events, not recent events. Timeline
             events currently apply to stories only (and display on story detail page),
             but recent events could be more broad. We need a way of setting user preferences
             for recent events. (related: a user may wish to have different preferences for timeline
             events and recent events)

             *What will the preferences be?
             *Where will a user set them?

        2) User should be able to subscribe to all projects in a group except one, and so on. Maybe we
            need a corresponding 'unsubscriptions list' that overrides the subscriptions? Which leads onto...
  
  iv) How will SB keep track of these?

    Currently: [To be filled in]

c) SB must inform user of these updates

  i) The user needs to know *what* has updated

        Suggested data to relay (should this be configurable?): 

           - 'what was updated?'
           - 'what subscribed groups does the updated resource fall into?'
           - 'when was it updated?'
           - 'who updated it?'
           - 'does this update require my input?'

  ii) The user should be notified in the most suitable way. What is this, and should *this* be configurable? (eg: what channels? how frequently should a user be notified?)

    i) currently:

        *recent events on dashboard

        *events timeline on story detail pages

    ii) in progress:

        *email notifications patches
        (currently awaiting the rework here: https://review.openstack.org/#/c/240345/1 . What point are notifications at once this patch series is merged?)

    iii)  todo :


Roadmap Plan

We now have some detail about the current implementation. We need more input from users to work out where this falls
short. re: emails: we'll probably get comments on these as we work on them. So far, people have said they want email notifications, so we'll
need those before we're likely to get a lot of feedback.


# Overall Roadmap

We could probably refine this forever, so at what point should we consider changing priority?

1. Fix  bugs in current implementation (including making it consistent).

   a) User preferences patches in review

   b) Extricate timeline events from recent events
       * Decide on candidates for recent events (bigger set containing set of timeline events?)
       * Implement
           * backend to store preferences and handle them
           * UX for preferences

   c) Support for worklists and boards in:
       * recent events (see above, since these don't form part of a story)
       * timeline events? (eg: 'this story has been added to board x'. does anyone want this?)
       * user preferences (checkboxes to enable and disable notifications)

2. Merge email patches so that some basic email notifications work (currently 'off' by default')

   a) Then get feedback and improve these

3. Improve UX for Recent Events

4. Give better variety of subscription options.
   a) allow user to unsubscribe from story within a subscribed project, and similar