Skip to content

Convert our Weekly Monday call Roster script to something managed by the bot #26

Description

@sirkitree

The weekly roster is determined currently by a google app script that also reaches out to bamboohr and keeps a history of folks who have talked. We could convert this to a plugin for the bot and then possibly add functionality where folks could respond to the bot to remove themselves for that week.

Implementation Plan

Overview

The Owners' Call Plugin will automate the management of our weekly Owners' Call roster within Slack. This plugin will simplify the current manual process which involves Google Sheets, Google Docs, and manual Slack posts.

Current Process Analysis

The current process involves:

  1. Managing speaker lists and history in Google Sheets
  2. Manual checking for people who need to skip or alter their position
  3. Publishing to a Google Doc
  4. Copying and pasting into Slack
  5. Managing roster changes before/during/after the call
  6. Recording and sharing call recordings

Simplified Implementation Approach

Rather than replicating the entire Google Sheets functionality, we can create a more streamlined solution:

Core Functionality (MVP)

  1. Command-Based Roster Management

    • Generate and display the current roster on demand
    • Allow users to request to skip or change position via Slack commands
    • Update and store roster history
  2. Automated Notifications

    • Morning announcement for skip/position change requests
    • Pre-call roster posting in the appropriate channel
    • Post-call recording link sharing
  3. Basic Data Storage

    • Store roster data in a simple JSON format
    • Track speaker history and last-spoke dates
    • Maintain "skip" status

Implementation Plan

Phase 1: Core Plugin Setup

  1. Create basic plugin structure:

    plugins/
      owners-call/
        index.ts
        types.ts
        commands.ts
        storage.ts
        scheduler.ts
    
  2. Implement data models:

    • Speaker: name, status, order
    • Roster: date, speakers, alternates
    • SkipRequest: user, date, reason
  3. Create command patterns and basic handlers:

    • /oc-roster - Display current roster
    • /oc-skip - Request to skip
    • /oc-position - Request position change
    • /oc-info - Show dial-in information

Phase 2: Storage Implementation

  1. Use simple JSON file storage to maintain:

    • Speaker list and order
    • Speaking history
    • Skip requests
  2. Implement roster generation logic:

    • Draft roster from history list
    • Handle skipped speakers
    • Track speaking history
  3. Create roster update functionality:

    • Process skip requests
    • Update speaker order

Phase 3: Scheduler and Notifications

  1. Implement scheduled messages:

    • 8:00 AM CT - Request for changes post
    • 9:00 AM CT - Generate and post roster
    • Post-call recording notification
  2. Create message templates:

    • Roster announcement with formatting
    • Skip request prompts
    • Recording availability notice

Phase 4: Optional Enhancements

If time permits, implement:

  1. Integration with Google Sheets (for transition period)
  2. Holiday detection and handling
  3. Recording management automation
  4. Analytics for speaking frequency

Development Timeline

  • Week 1: Phase 1 - Core Plugin Setup
  • Week 2: Phase 2 - Storage Implementation
  • Week 3: Phase 3 - Scheduler and Notifications
  • Week 4: Testing and Refinement
  • Week 5: Optional Enhancements (if needed)

Migration Strategy

  1. Run both systems in parallel for 2-4 weeks
  2. Validate data consistency and feature parity
  3. Train admins on new commands and workflow
  4. Switch to fully Slack-based solution

Success Metrics

  1. Reduction in manual steps for admins
  2. Accurately maintained speaker history
  3. Properly handled skip requests
  4. Timely notifications and announcements
  5. User satisfaction with the new workflow

Metadata

Metadata

Assignees

No one assigned

    Projects

    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions