Alice Technical Journal — 09/02

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:

  1. 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).
  2. 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
  3. 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
  4. 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.

What I learned

  1. Averages are politicalAn average is never neutral.Dividing by the wrong window quietly punishes:
    • New teachers
    • Part-time contributors
    • Anyone who joined mid-cycle
    Fixing averages to be tenure-aware immediately made the numbers feel human again.
  2. 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
    You need both, explicitly.
  3. 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
  4. One metric → many systemsChanging how Avg Salary is computed wasn’t isolated.It affected:
    • Rankings
    • Hourly rates
    • Bonuses
    • Perceived fairness
    This reinforced the importance of single-source-of-truth calculations and pushing logic server-side.

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.