Project: Alice (Insights & Teacher Economics)
Today was about turning raw operational data into fair, explainable economic insight — and learning where naïve averages quietly break trust.
What I worked on
I spent the day evolving the Teachers Ranking & Bonuses system under Admin > Insights, pushing it from “interesting numbers” toward something that can actually support real decisions.
Key additions and refinements:
- Teachers Ranking maturity
- Added richer metrics beyond totals:
- Average Estimated Salary
- Average Paid
- Average Hourly Rate (derived from worked hours)
- Introduced a Top Penalty section to surface negative salary entries transparently instead of hiding them in aggregates.
- Added support for longer analytical horizons (12 months) without breaking short-range views (7 / 30 / 90 days).
- Added richer metrics beyond totals:
- Bonus model design
- Designed a bonus formula that balances:
- Performance (E / A / M / Penalty)
- Salary scale
- Tenure realism
- The key breakthrough was separating:
- Performance quality from
- Eligibility window
- Final model:
- Performance is normalized and capped
- Bonus scales by work days since first attendance, capped at 365
- Short ranges (e.g. 30 days) intentionally produce smaller bonuses than long ranges (365 days), without paradoxes
- Designed a bonus formula that balances:
- Tenure-aware averaging
- Fixed a subtle but serious issue:
- Teachers who joined recently were having their averages diluted by time they didn’t exist.
- Introduced per-teacher effective averaging windows:
- effective_days = min(work_days, selected_range, 365)
- Averages are now fair for both new and long-tenured teachers.
- This change cascaded correctly into:
- Avg Salary
- Avg Hourly Rate
- Bonuses
- Fixed a subtle but serious issue:
- Insights hygiene
- Added the ability to exclude teachers from insights without touching:
- Academic records
- Finance history
- Attendance truth
- This keeps insights clean (no interns, test accounts, or transitional staff) while preserving data integrity.
- Added the ability to exclude teachers from insights without touching:
What I learned
- Averages are politicalAn average is never neutral.Dividing by the wrong window quietly punishes:
- New teachers
- Part-time contributors
- Anyone who joined mid-cycle
- Bonuses must scale with time, not just performanceA “year-end bonus” that’s smaller than a “month-end bonus” isn’t a math bug — it’s a model bug.The insight:
- Performance answers how well
- Time answers how much opportunity existed
- Negative signals deserve first-class visibilityPenalties shouldn’t just reduce totals silently.Making them visible as a ranking:
- Changes conversations
- Reduces disputes
- Encourages accountability without moralizing
- One metric → many systemsChanging how Avg Salary is computed wasn’t isolated.It affected:
- Rankings
- Hourly rates
- Bonuses
- Perceived fairness
Where the system is now
- Teachers Ranking is no longer just “who’s biggest”
- It now reflects:
- Value
- Reliability
- Discipline
- Time
- Bonuses are:
- Bounded
- Explainable
- Consistent across time ranges
- Most importantly:the numbers now align with intuition, which is the real test of a good system.
Tomorrow, this can easily evolve into:
- Bonus preview simulations
- Finance reconciliation overlays
- Or even teacher-facing transparency views
But today was about getting the foundation right.
And it finally feels right.
