Building the Sensitivity Dialer: From 'Chill' to 'Unhinged'
The story of how we built a configurable rage meter that lets developers choose exactly how much abuse they can handle.

Not every bug deserves a five-alarm Slack notification. And not every developer wants the same level of noise.
That's why we built the Sensitivity Dialer — a configurable threshold that controls how aggressively Grumpy monitors your application.
The Three Levels
Fatal (Low Sensitivity) Only unhandled crashes that kill your process. This is "wake me up at 3 AM" territory. Production is down, users are affected, and someone needs to fix it now.
Error (Medium Sensitivity) Caught exceptions plus fatal crashes. This catches bugs that your try-catch blocks are silently swallowing. You know, the ones where you wrote `catch (e) { /* TODO: handle this */ }` three years ago.
Warning (High Sensitivity) Everything. Deprecation notices, type mismatches, missing environment variables, sketchy patterns. This is for masochists who want Grumpy to critique every line of code that runs in production.
How It Works
The Sensitivity Dialer can be set in two places:
- SDK Level — Set
levelingrumpy.init()for per-application control - Dashboard Level — Override per-project in Settings (server-side enforcement)
The server always wins. If your dashboard is set to "fatal" and your SDK sends a "warning", we drop it silently. This prevents rogue developers from flooding the channel.
The Sweet Spot
Most teams start at Error (medium) and adjust from there. New projects often go full Warning to catch everything early, then dial it down as the codebase stabilizes.
Pro tip: set it to Warning for one week after every major release. You'll thank us later.