Scriptonia
PRD-105·Aircon
Try Scriptonia
PRD-105·May 28, 2026·Personal

Aircon

Executive Brief

Freight forwarder reps currently send quotes with no real-time signal on whether that price is actually bookable. Rates stale by hours, carrier capacity evaporates between quote and booking, and margin integrity checks happen only after the customer accepts—if at all. The result is a 24% exception rate requiring expensive rework and margin leakage (source: Q2 ops ticket analysis, n=1,247 quotes). At 50 active reps averaging 8.3 quotes per day, each exception costing $148 in rework labor and margin erosion, this is $3.24M/year in recoverable value (source: Finance variance analysis + CRM activity audit, Aug 2025). If adoption reaches only 40% of affected reps: $1.30M/year.

This feature is a real-time scoring layer that evaluates quote bookability across five configurable dimensions (rate freshness, capacity confidence, carrier reliability, margin integrity, service fit) at the moment of send, surfacing a 0-100 score with specific deficit indicators. It is not a pricing algorithm, a rate marketplace, or a hard gate that blocks sends—reps retain final authority, but now exercise it with full visibility into commitment risk.

Strategic Context

Competitive Positioning:

Freightos solves this problem today by providing historical rate benchmarks, helping reps understand if their price is market-competitive. Flexport solves this through vertical integration and asset control, giving them predictable capacity but only for their owned network. CargoWise provides rate history lookups but no predictive bookability signal.

CapabilityFreightosFlexportCargoWiseAircon (This)
Real-time bookability scoring at send-time❌ (asset control only)
User-configurable thresholds by lane/customer✅ (limited)
Carrier-agnostic capacity confidence
WHERE WE LOSERate database depthEnd-to-end shipment controlBack-office compliance depth❌ vs ✅ (ecosystem maturity)

Our wedge is configurable decision support at the moment of quote because it protects margin without disrupting the existing multi-carrier workflow that forwarders require.

Problem Statement

WHO / JTBD: When a quoting rep is ready to send a freight quote to a customer, they want to know how likely this price is to be honored by the carrier and accepted by operations, so they can decide whether to send, hold, or adjust without risking a downstream exception that burns margin and customer trust.

WHERE IT BREAKS: Today, reps check rate freshness in one system, carrier capacity in another, and margin guardrails in a spreadsheet—or they send blind. There is no unified signal. A rep can quote a $4.20/kg rate from LAX to FRA without knowing the carrier cancelled two flights that morning, or that the margin has eroded to 3% due to fuel surcharge changes.

WHAT IT COSTS:

MetricMeasured Baseline
Quotes sent per rep per day8.3 avg (source: CRM activity audit, 30-day window, Aug 2025)
Quote-to-exception rate requiring rework24% (source: Q2 ops ticket analysis, n=1,247 quotes)
Average rework time per exception52 minutes (source: time-tracking survey, n=38 reps)
Margin leakage on reworked quotes$148 avg (source: Finance variance analysis, Q2)

Business case math: 50 reps × 8.3 quotes/day × 24% exception rate × $148 cost/exception × 220 working days = $3.24M/year recoverable.

Solution Design

Quote Preview with Confidence Score:

┌─────────────────────────────────────────────────────────────────┐
│ Quote Preview                                    [Edit] [Send] │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────────────────────────────────────────────────┐  │
│  │  CONFIDENCE SCORE: 72/100  [YELLOW]                      │  │
│  │                                                         │  │
│  │  Rate freshness:     ✅ 2 hrs old (threshold: 6 hrs)   │  │
│  │  Capacity confidence:⚠️  67% available (threshold: 75%)   │  │
│  │  Carrier reliability: ✅ 94% on-time (30-day avg)        │  │
│  │  Margin integrity:    ✅ 18% gross margin                │  │
│  │  Service fit:        ✅ Matches customer SLA           │  │
│  │                                                         │  │
│  │  [View Capacity Details]    [Override and Send →]       │  │
│  └─────────────────────────────────────────────────────────┘  │
│                                                                 │
│  Customer: Acme Industries        Quote ID: QT-2025-8841       │
│  Lane: HKG → LAX                  Commodity: Electronics        │
│  Rate: $4.20/kg                   Total: $8,420                │
└─────────────────────────────────────────────────────────────────┘

Configuration Dashboard (Ops Lead View):

┌─────────────────────────────────────────────────────────────────┐
│ Confidence Rules Configuration                    [Save] [Undo] │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Active Rule Set: AsiaOutbound_Q3                               │
│                                                                 │
│  ┌─────────────────────────────────────────────────────────┐  │
│  │ Dimension          Weight    Threshold    Alert Level │  │
│  │ ───────────────────────────────────────────────────────│  │
│  │ Rate freshness     25%       < 6 hours     Yellow      │  │
│  │ Capacity conf      30%       < 75%          Red        │  │
│  │ Carrier reliability 25%      < 90%          Yellow     │  │
│  │ Margin integrity   15%       < 10%          Red        │  │
│  │ Service fit         5%       Any mismatch   Red        │  │
│  └─────────────────────────────────────────────────────────┘  │
│                                                                 │
│  Applies to: Lanes: [All Asia Origin ▼]  Segments: [Enterprise ▼]│
│                                                                 │
│  [Preview Impact]  Current affected open quotes: 34            │
└─────────────────────────────────────────────────────────────────┘

Before/After Narrative:

Before: Sarah, a senior rep, spends 12 minutes checking three systems to confirm a $4.20/kg rate is valid. She cannot see that the carrier cancelled morning flights. She sends the quote. Two hours later, ops calls: rate no longer bookable. She spends 45 minutes renegotiating with the customer and burns margin to retention.

After: Sarah clicks Preview. The score shows 42/100 with a red capacity alert showing flight cancellations. She switches to a backup carrier scoring 89/100. The customer books immediately; the cargo moves as quoted. No rework, no margin loss, no escalation.

Acceptance Criteria

Phase 1 — MVP: 6 weeks

US1 — Score Calculation Engine

  • Given a quote for lane HKG→LAX with carrier CX and current market rate data
  • When the rep clicks "Preview Quote"
  • Then the system calculates a confidence score 0-100 within 800ms, displaying the composite score plus the five dimension breakdowns with color coding (Green/Yellow/Red)
  • P0: Score calculation consistency 100% — zero tolerance for calculation errors (launch-blocking)
  • If calculation fails, display "Score unavailable" with link to manual check workflow
  • Validated by Engineering Lead against 500-sample historical quote dataset

US2 — Threshold Configuration

  • Given an Ops Lead with admin permissions
  • When they navigate to Confidence Rules and create a rule set for "Asia_Outbound"
  • Then they can set individual thresholds (0-100) for each of five dimensions and assign weights that sum to exactly 100%
  • P0: Weight validation 100% — must sum to exactly 100% (launch-blocking)
  • If weights ≠ 100%, block save and show inline error: "Weights must total 100%"
  • Validated by Product Designer against 3 user testing sessions with Ops Leads

US3 — Advisory Display & Override

  • Given a calculated score of 65/100 (below threshold of 75) for an Enterprise customer quote
  • When the rep views the quote preview
  • Then they see a yellow warning banner with text "Score below threshold — capacity risk detected" and buttons to [Edit Quote], [View Details], or [Send Anyway]
  • P1: Display accuracy ≥99.5%, p95 latency < 1200ms
  • If UI fails to render, fallback to basic text modal with score number
  • Validated by QA Lead against cross-browser test suite (Chrome, Firefox, Edge)

Out of Scope (Phase 1):

FeatureWhy Not Phase 1
ML-based capacity prediction (historical pattern recognition)Requires 6 months historical data not yet available
Automatic quote re-routing to alternative carriersComplex workflow changes, needs user research
Customer-facing confidence score displayLegal review required for external commitments
Mobile app support for score display92% of quoting occurs on desktop (source: device analytics)

Phase 1.1 — 3 weeks post-MVP:

  • Historical score trend tracking (per rep/lane quality over time)
  • Bulk rule import/export (CSV)
  • Slack notification when quote sent with score < 50

Phase 1.2 — 6 weeks post-MVP:

  • Predictive capacity scoring (ML model replacing carrier API-only)
  • Integration with CRM for customer-specific risk profiles
  • Public API endpoint for external TMS to query Aircon confidence scores
Success Metrics

Primary Metrics:

MetricBaselineTarget (D90)Kill ThresholdMeasurement Method
Quote exception rate24% (Q2 ops data)≤12%>20%Ops ticket tagging
Time to quote14 min avg≤16 min*>20 minMixpanel workflow timing
Margin realization94.2% of target≥98%<96%ERP actuals vs quote data

*Acceptable increase due to review step; net efficiency gain comes from eliminated rework.

Guardrail Metrics:

GuardrailThresholdAction if Breached
Quotes sent per rep per day≥6.5 (current: 8.3)Investigate if friction too high
Customer complaint rate ("Why did my quote change?")≤0.5%Pause rollout, check score accuracy
System latency (p95 score calc)<1200msOptimize carrier API calls

Leading Indicators (D14 check):

  • If ≥70% of quotes are previewed with score displayed: predict D90 exception rate reduction
  • If "Send Anyway" rate on scores <50 is <25%: predict D90 margin improvement

What We Are NOT Measuring:

  • "Number of scores calculated" (vanity metric—does not indicate utility)
  • "Average confidence score" (gaming risk—reps might cherry-pick only high-confidence lanes)
  • "Time spent in preview modal" (ambiguous—could indicate confusion or diligence)
  • "Number of rules configured" (activity metric, not outcome)
Risk Register

RISK 1 — Carrier API Unreliability (TECHNICAL)

  • Risk: Real-time capacity data from carrier APIs fails >10% of the time, causing score calculation timeouts and training reps to ignore "unavailable" scores.
  • Probability: Medium | Impact: High
  • Mitigation: Implement circuit breaker with 30-min stale cache; fallback to heuristic scoring based on historical carrier performance. Owner: Backend Lead (Miguel) by Sprint 3.

RISK 2 — Threshold Configuration Paralysis (ADOPTION)

  • Risk: Ops leads create overly conservative rules (e.g., requiring 95% capacity confidence) that flag 80% of quotes as risky, causing reps to override constantly and ignore the feature.
  • Probability: High | Impact: Medium
  • Mitigation: Ship with industry benchmark templates; add "smart defaults" based on lane volatility; limit rule changes to 2/week in first month. Owner: Customer Success (Priya) by launch day.

RISK 3 — Competitor Feature Matching (COMPETITIVE)

  • Risk: Flexport or Freightos launch a similar confidence metric within 90 days, neutralizing our differentiation.
  • Probability: Medium | Impact: Medium
  • Mitigation: Lock in 3 case study customers for public launch narrative; emphasize configurability (competitors offer black-box scores). Owner: PM (Alex) by D30.

RISK 4 — Margin Data Exposure (LEGAL/COMPLIANCE)

  • Risk: Reps see precise margin percentages they should not access (Chinese wall violation between quoting and procurement).
  • Probability: Low | Impact: High
  • Mitigation: Separate "margin integrity" dimension into coarse buckets (Healthy/At-risk) for rep view; exact percentages visible only to pricing desk role. Owner: InfoSec (Jordan) by code freeze.

Kill Criteria — we pause Phase 2 and conduct a full review if ANY condition is met within 90 days:

  1. Quote exception rate does not drop below 20% (from 24% baseline) by D90.
  2. Rep quoted throughput drops below 6.5 quotes/day (from 8.3 baseline) for >2 consecutive weeks.
  3. Carrier API integration fails to meet 95% uptime SLA, causing >15% of scores to show "unavailable."
  4. Customer churn attributed to "quote confidence issues" exceeds 2 accounts.
Technical Architecture Decisions

Data Flow:

  1. Quote Payload → Confidence Engine API
  2. Parallel Queries: Rate table (freshness), Carrier API (capacity), Reliability service (historical performance), Margin calc (cost vs price), Rules engine (customer fit)
  3. Scoring Algorithm → Weighted average based on active rule set for lane/segment
  4. Cache: Rule configurations cached in Redis (2-min TTL); carrier capacity cached if API down (30-min stale OK)
  5. Response → Frontend renders scorecard in <800ms p95

Assumptions Requiring Validation:

AssumptionStatus
Carrier API latency < 500ms for capacity endpoints (LH, CV, CX)⚠ Unvalidated — needs confirmation from Carrier Integration team by Sep 15
Rate table "last_updated" timestamp accurate to < 5 minutes⚠ Unvalidated — needs confirmation from Data Engineering by Sep 10
Margin calc engine handles 100 concurrent quote calculations⚠ Unvalidated — needs load test from Platform team by Sep 20
Redis cache for threshold rules sustains 10K reads/sec⚠ Unvalidated — needs confirmation from SRE team by Sep 12
WebSocket not required (synchronous HTTP acceptable)⚠ Unvalidated — needs UX validation from Frontend team by Sep 8
OAuth 2.0 tokens for carrier APIs refresh without user intervention⚠ Unvalidated — needs security review from InfoSec by Sep 18
Strategic Decisions Made

Decision: Advisory vs. Hard Gate Choice Made: Advisory score (0-100) with "Send Anyway" option over hard blockage. Rationale: Reps maintain customer relationships requiring urgency; hard gates create shadow work around the system. Rejected: automatic routing to pricing desk approval. Trade-off Accepted: Some bad quotes still go out, but rep autonomy preserves deal velocity.

Decision: Five Dimensions vs. Black-Box ML Choice Made: Five explicit weighted dimensions (rate freshness, capacity confidence, carrier reliability, margin integrity, service fit) over a single opaque ML score. Rationale: Reps need to know what to fix when the score is low. Rejected: proprietary "confidence rating" with no breakdown. Trade-off Accepted: More UI complexity in the preview modal.

Decision: Lane-Level Configuration vs. Global Policy Choice Made: Configurable rules per lane and customer segment over global company settings. Rationale: Asia-Europe volatility patterns differ radically from intra-US; ops teams need granularity. Rejected: one-size-fits-all threshold. Trade-off Accepted: Ops team must maintain more rule sets; UI needs search/filter for configuration management.

Decision: Real-Time Calculation vs. Pre-Computed Choice Made: Real-time API calculation at quote-preview time over nightly batch scores. Rationale: Rates and capacity change intraday; yesterday's score is useless for a spot quote. Rejected: cached daily scores with "as of" timestamps. Trade-off Accepted: Latency risk on quote send; requires <800ms p95 calculation time.

Decision: Preview Modal vs. Inline Display Choice Made: Score surfaces in quote preview modal, not inline in the quote builder. Rationale: Forces conscious decision without cluttering the build flow where reps iterate on pricing. Rejected: persistent score widget in builder sidebar. Trade-off Accepted: Extra click to see score; risk reps skip preview in rush situations.

Decision: Internal Data vs. Third-Party Risk Scores Choice Made: Use internal TMS data, carrier APIs, and rate tables over external credit-risk or weather-data integrations. Rationale: We own the relevant booking and capacity data; external scores lag and introduce vendor dependency. Rejected: integration with supply chain risk data providers. Trade-off Accepted: Narrower coverage for force majeure events; must build all integrations in-house.

Appendix

Pre-Mortem:

It is 6 months from now and this feature has failed. The 3 most likely reasons are:

  1. Ops teams never configured the rules, so every quote showed a generic 75/100 score with no meaningful variation by lane. Reps learned to ignore it as "green noise" because it didn't reflect actual capacity constraints they knew existed from tribal knowledge. We shipped the engine but treated configuration as a "customer success problem" rather than a launch-blocker.

  2. We shipped Phase 1 but delayed Phase 1.2 (ML capacity prediction) indefinitely due to headcount constraints. The heuristic scoring based on carrier APIs was only marginally better than the old way of checking, and exceptions only dropped from 24% to 21%. The margin improvement ($300K vs $1.8M projected) didn't justify the 800ms latency hit on every quote, so reps worked around it.

  3. The "advisory not gate" design was too soft. Reps never changed behavior because there was no cost to ignoring the score. When capacity crunch hit in Q4, quote exceptions actually increased because reps overrode low scores to win business, and we had no mechanism to force a pricing desk review on borderline quotes.

What success actually looks like: Reps mention the score in Slack channels as shorthand ("This one's a 92, book it"). Ops stops getting daily "Is this rate still good?" pings from the quoting desk. In the board meeting, the VP of Revenue notes that quote-to-cash exceptions are down 40% quarter-over-quarter, and the sales team pitches customers on "Aircon Guaranteed Quotes" as a competitive differentiator. The team stops hearing about weekend rework shifts entirely.