Sprint Demo · August 21 – September 4

TechOps

Performance · Search & SEO

600,000 crawler requests a week for trips that already left

A search URL with a departure date in the past used to boot the entire app to work that out. It now answers 410 Gone in ten milliseconds.

  • Each one rendered the full search page just to learn the date had passed, then redirected to today's date — a target that rotates daily and is never done being crawled.
  • Eight days or more past departure now returns "gone", with a link back to the same route without a date.
  • A week of grace protects real booking intent, and still covers 90.6% of the volume.
0 25k 50k 75k 100k 410 ships 08-17 08-19 08-21 08-23 08-25 08-27 08-29 08-17 — 101,390 301 08-18 — 90,474 301 08-19 — 76,428 301 08-20 — 99,335 301 08-21 — 82,212 301 08-22 — 85,221 301 08-23 — 80,086 301 08-24 — 99,398 301 08-25 — 61,859 301 08-26 — 13,401 301 08-27 — 11,583 301 08-28 — 9,787 301 08-29 — 9,446 301 08-30 — 10,542 301 08-17 — 0 410 08-18 — 0 410 08-19 — 0 410 08-20 — 0 410 08-21 — 0 410 08-22 — 0 410 08-23 — 0 410 08-24 — 0 410 08-25 — 22,181 410 08-26 — 37,403 410 08-27 — 63,291 410 08-28 — 49,885 410 08-29 — 67,803 410 08-30 — 66,582 410 101,390 10,542 66,582 301 · rendered the page, then redirected 410 · answered gone

Responses a day to expired departure URLs. August 31 was a partial day and is left out.

Deployment · Continuous delivery

The Ship It adoption dashboard

Every app running in production, and how each one gets there.

  • You merge, and production updates itself. Eight of our 27 apps do, and 40% of merges reach prod on their own.
  • Addedroute, datadog-k8s, experiment-router — one workflow each
  • Addednexus — ships dev and prod on merge, 48 prod tests passing
  • Up nextwapi — tests covering every public endpoint
The Ship It adoption dashboard: one row per production app, each with a status pill — Continuous for canopy, next-prototypes, ui-react, experiment-router, reservation-service, datadog-k8s, google-partner and route; Degraded for nexus and messaging; Manual for wapi — beside columns for prod deploys, merges, percent shipped, whether ship-it.yaml exists and triggers on merge, prod tests run over tests defined, the two companion workflows, and a link to each app's adoption ticket

Live at techops.pages.wanderu.dev/reports/ship-it-adoption/

Infrastructure · Scheduled jobs

Move your scheduled jobs to gh-scheduler

GitHub's own cron is no longer dependable at any cadence.

  • Movedorders — abandon stale orders
  • Movedpayment-service — suspend virtual cards, void authorizations
  • Movedreservation-service — database cleanup
  • Movedcortex — nine importer schedules
  • Up nextThe last ten, all in review
  • Bring us every cron you have left. GitHub fires its own schedules late or not at all, and says nothing when it skips. Ours has a dashboard, an owner and an alert for every job.
  • A schedule we cannot store is now an error. We hold one per workflow file, so asking twice for the same workflow used to keep whichever entry came last. It is now refused outright and reported in Slack.
  • Several schedules for one workflow? Give each a thin caller. cortex runs its importers across three environments, so it has nine one-line files.
97 jobs on the scheduler (was 87)
10 left on native cron, every one in review

Across the stack

Smaller wins

  • Search rate limits came down. Our own monitoring had been the obstacle — Datadog's checks hit hard enough from shared addresses that the limit had to sit above them. Those 107 published ranges now sync into an allowlist automatically, so the limit can follow real traffic.
  • Two more repos retired. maverick's privacy policy and terms pages, and partner-intelligence's partner marketing pages, are served by nexus; both repos are archived and pruned from our documentation corpus.
  • Support can see what the customer saw. Our Slack /lookup command now links the customer's own confirmation page — the fastest answer to "they say they booked a different trip."
  • Our Kubernetes lint stopped reporting success over work it skipped. It rendered under a placeholder name, so in wapi it checked 9 of 33 objects and passed. It now renders as the real release and type-checks Datadog's custom resources, catching at review time what used to surface mid-deploy.
  • wapi is being profiled. The Datadog profiler had been wired up all along with the flag switched off.