RMFU Desk

Risk & markets

Case study: Risk rehearsal before earnings season

Anonymous composite: a team faces a dense reporting calendar without headcount relief. They invest not in another ‘risk portal’ but in proximity—breakpoint scenarios adjacent to positions—and in language: single-sentence kill criteria approved aloud before fatigue sets in.

Hard constraints

No new vendors mid-quarter; no incremental FTE; mobile readability mandatory for on-call PMs.

Anything new must ride authenticated routes already on compliance’s good list.

Lawyers insisted all scenario text stay inside the same data residency as positions—a constraint that actually helped focus UX.

Design choices

Breakpoint shocks attached to each book—liquidity, refi wall timing, policy pivot, basis risk—written as templates PMs could fork.

Kill criteria limited to one sentence each, agreed in a timed huddle: if trigger X fires, reduce/exit/default.

Long risk treatises moved to archive links—not absent, but not on the hot path.

Behavioral observations

Junior staff used scenarios when they sat in the same navigation context as P/L; separate portals saw weekend-only attention.

Executives asked better questions when they could toggle inputs live; theatre declined.

Fatigue asymmetry: seniors tune out long memos first; one-line kill rules survive 14-hour days.

Outcomes priced honestly

Alpha claims intentionally avoided—success framed as fewer circular midnight threads and faster alignment on ‘what would make us wrong’.

Duplicate stress question count dropped; PM morale on earnings weeks improved on a simple Likert pulse.

What broke once

Feed outage on a mega-cap print: runbook missing for manual price entry; patched within 48h with named owner; rehearsal updated to simulate vendor brownout monthly.

Pre-open fifteen-minute cadence

T-15: scribe posts one message with links to authoritative positions and today’s three breakpoint cards—no attachments.

T-10: huddle chairs read kill sentences once; disagreements become tickets with owners before the bell.

T-5: comms lead confirms who owns external language if a gap print moves liquidity thresholds; mobile links tested on two devices.

Cadence broke once when a chair tried to ‘just talk’—they reverted to timestamps and one-liners the next session.

Transferable tools

Template pack: five scenario forks, three kill styles, one blank for desk-specific macro.

Checklist for huddle chairs: timebox, no slide decks, decisions logged as one-liners with timestamps.

Rotate scribe duty so facilitation energy stays even across the bench.

Taxonomy of stress questions

Liquidity gap, policy pivot, credit roll, single-name gap, basis—tag questions into five buckets so repeats become searchable analytics instead of new emergencies.

After the season: what persisted

Kill sentences survived; long memos did not. They archived memos for audit but stopped circulating them pre-open.

Ops added ‘stress FAQ’ auto-suggestions when chat detected duplicate phrasing—cheap NLP, high ROI.

Artifacts to archive while memory is fresh

Within two weeks of season end: bind kill sentences to scenario ids, export chat FAQ snippets with owners, and snapshot mobile drill cards actually used—not idealized versions.

Schedule a 45-minute ‘doc honesty’ session: strike slides that nobody opened; promote replay links that did work.

Public desk routes referenced above

Same URL discipline applies after you authenticate—bookmarkable paths, no tenant data on these pages.

  • Product atlas Route-level map so reviewers can open the exact module that produced a figure.
  • Operating rhythm Template language for stages, owners, and completion rules in a mandatory morning loop.
  • Public calculator hub GET-shareable patterns you can mirror for every material desk run; use as the pattern for replay links.
  • Guides Pair public guides with internal SOPs so training points at one narrative spine.
  • Service status Public narrative around uptime; align its claims with what engineering will defend in postmortems.
  • Guided product tour Orient sponsors and new analysts on module boundaries before you encode them in a mandatory loop.

Operator toolkits

Checklists and scripts you can lift into runbooks, vendor RFPs, or board appendices.

Composite narrative; not investment advice; not indicative of client results.

Three-minute mental model

RMFU is one surface for reading (brief + pulse), remembering (library + drills), and stress-testing (risk, macro, scenarios). Sign in to reach your tenant desk; this public site is the story, not the datastore.

Open the full guided tour → (recommended instead of this short blurb).

Use Open desk when you already have access — you will authenticate at the gate like any other protected route.

Sign in

Live calculators vs. marketing

After sign-in, /tools hosts shareable one-page calculators (NPV, payback, Kelly, and more). This public tools hub explains what exists for crawlers and prospects.

Open desk

Why drills matter

Bookmarks decay. RMFU uses short, spaced repetitions so vocabulary and frameworks stay retrievable when you are in front of a committee or a live tape — not only when you are reading alone.

Nudge inputs

Edit fields, then Apply & refresh (or use on the card). Same payload as the public demo API.

Last response JSON

app/engines/tools/service.py

Leading lines of the real module (marketing excerpt).

"""Operator pocket tools — small pure functions used by /tools.

Each function returns a dict with the inputs echoed back, the result, and a
short interpretation sentence (in casual exec tone).
"""
from __future__ import annotations

from dataclasses import dataclass
import math
from typing import Iterable


# -------- IRR / NPV ---------------------------------------------------------

def npv(rate: float, cashflows: list[float]) -> float:
    return sum(cf / ((1 + rate) ** t) for t, cf in enumerate(cashflows))


def npv_rate_sensitivity(rate: float, cashflows: list[float], bump: float = 0.01) -> dict:
    """±bump hurdle NPV and approximate $ / 1% change in NPV (last period scale)."""
    base = npv(rate, cashflows)
    up = npv(rate + bump, cashflows)