Ga naar hoofdinhoud

Mood Tracking

Mood Tracking captures daily team sentiment through quick check-ins, providing leadership with a pulse on team morale. Submissions can be named or anonymous (with cryptographic privacy guarantees), and results are aggregated into trend lines and distribution charts for discussion during AIC/TIER meetings.

People are the "P" in SQCDP. This module makes the human dimension of operational performance visible and actionable.

Overview​

Team sentiment is a leading indicator of operational problems. When morale drops, quality and productivity follow. Yet most organizations have no systematic way to measure and track it. ProBeya's Mood Tracking module provides a lightweight, daily mechanism to capture how team members feel and surface trends before they become crises.

Getting Started​

  1. Navigate to your board and open the Mood panel.
  2. Each team member clicks the mood icon and selects a level from 1 (very low) to 5 (very high).
  3. Optionally add a reason category and a short comment (max 280 characters).
  4. Choose whether to submit as named or anonymous.
  5. View the daily summary distribution and historical trend on the dashboard.

How It Works​

Mood Submission​

Each mood entry captures:

FieldTypeConstraintsDescription
Board IDstringRequiredThe board this entry belongs to
DatestringRequiredThe date of the mood entry (YYYY-MM-DD)
Mood Levelinteger1-5, required1 = very unhappy, 5 = very happy
Reason CategorystringMax 100 chars, optionalTag explaining the mood (e.g., "workload", "recognition", "tools")
CommentstringMax 280 chars, optionalFree-text note with context
AnonymousbooleanDefault falseWhether to hide the submitter's identity

Submissions are deduplicated per user per board per day. If a user submits twice on the same day, the second submission updates the first (upsert behavior). This prevents gaming while allowing people to change their mind throughout the day.

Anonymous Privacy​

When a user submits anonymously, their userId is not stored in the database. Instead, a SHA-256 hash of userId + boardId + date is generated and stored as anonymousHash. This hash:

  • Cannot be reversed to identify the user (SHA-256 is a one-way function)
  • Still enables deduplication: same user, same board, same day produces the same hash
  • Is unique per board and date: prevents cross-board correlation attacks
  • Uses the format: SHA256("{userId}:{boardId}:{date}")

The anonymousHash is used as the conflict target for the upsert operation when isAnonymous is true, while userId is used when submitting as named.

Daily Summary​

The getDailySummary endpoint returns aggregated data for a specific board and date:

{
distribution: {
1: number; // Count of mood level 1
2: number; // Count of mood level 2
3: number; // Count of mood level 3
4: number; // Count of mood level 4
5: number; // Count of mood level 5
};
total: number; // Total number of respondents
average: number; // Mean mood level (rounded to 2 decimal places), or null if no entries
}

This powers the mood distribution bar chart displayed during TIER meetings, giving the facilitator an instant visual of team sentiment.

Trend Analysis​

The getTrend endpoint returns daily averages over a configurable date range:

Array<{
date: string; // YYYY-MM-DD
avgMood: number; // Average mood level (rounded to 2 decimal places)
count: number; // Number of submissions that day
}>

Results are ordered chronologically and grouped by date using PostgreSQL's avg() aggregate. This data powers sparkline and trend-line visualizations, enabling teams to track whether overall sentiment is improving, stable, or declining over weeks and months.

Board Scoping​

Mood tracking is scoped to a board. Each board has its own mood panel with independent submissions and analytics. There is no global mood view — sentiment is always contextualized to a specific team and their work area.

Before accepting a mood submission, the router verifies that the target board exists and belongs to the caller's organization, preventing cross-tenant data injection.

Configuration​

  • Mood levels: Fixed 1-5 scale (not configurable per organization)
  • Reason categories: Free-text field; teams should agree on standard categories for cross-board comparison
  • Comment length: Maximum 280 characters (Twitter-length constraint for brevity)
  • Deduplication: Automatic per user per board per day — cannot be disabled

Permissions​

ActionRequired Role
Submit a mood entryAny board member
View daily summaryAny board member
View trend analyticsBoard manager or admin

Mood data is not editable by managers. Only the submitting user can update their own entry (by resubmitting on the same day). This prevents data manipulation and maintains trust in the anonymous submission system.

API Reference​

ProcedureTypeDescription
mood.submitMutationRecord a mood entry (named or anonymous, upsert per day)
mood.getDailySummaryQueryGet distribution and average for a board/date
mood.getTrendQueryGet daily averages over a date range for trend visualization

Tips & Best Practices​

Make it part of the daily routine

Include mood submission as the first step of the TIER meeting. When it becomes habitual, participation rates climb and the data becomes meaningful.

Respect anonymity

Never attempt to identify anonymous submissions. The trust that anonymity builds is more valuable than knowing who said what. If many people are unhappy, the trend data tells you enough.

Act on trends, not individual data points

A single bad day is noise. Three weeks of declining averages is a signal. Use the trend chart to identify sustained shifts and trigger deeper investigation.

Use reason categories consistently

Define a standard set of reason categories for your organization and communicate them to all teams. This enables cross-board comparison and root cause analysis.

  • KPI Boards — track mood averages as a "People" KPI
  • TIER Meetings — review mood distribution during daily stand-ups
  • Kaizen Ideas — low mood trends may surface improvement opportunities
  • Shift Handover — mood context can complement shift communication