{"stable_id":"dd6d683bf4ef1237","slug":"google-speculative-cycles","company":"Google","workflow_name":"Postsubmit Speculative Cycles with Transition Prediction","function_code":"software_engineering","pattern_codes":["continuous_decisioning","queue_elimination"],"changed_assumption":"Novel breakages need not wait for a comprehensive post-submit test cycle.","evidence_strength":"verified","publication_tier":"showcase","freshness":"current","reviewed_at":"2026-08-23","updated_at":"2026-08-22","source_quality_summary":"1 peer reviewed, 1 primary; publication outcomes are verified.","caveat_summary":"Comparison is to the prior comprehensive scheduler on empirically observed production timings at a 25% target budget, not a randomized controlled experiment. The paper says Google 'is implementing' Speculative Cycles; the evaluated production-data window does not state the fleet fraction live during every day of the three months. The Google Research abstract reports an approximately 70-minute median reduction; the ICST paper states 65% from 107 to 37 minutes, which is the same difference.","freshness_caveat":null,"workflow_summary":{"before":[{"actor":"Developer","action":"Submits a change after limited presubmit testing.","actor_type":"control"},{"actor":"TAP Postsubmit comprehensive cycle","action":"Waits for capacity, then runs all tests affected since the last definitive repository status.","actor_type":"control"},{"actor":"Culprit finding / autorollback / developers","action":"Triage the first detected failure, identify the culprit change, and roll back when evidence thresholds are met.","actor_type":"control"}],"hinge":"Novel breakages need not wait for a comprehensive post-submit test cycle.","after":[{"actor":"Developer","action":"Submits a change after limited presubmit testing.","actor_type":"system"},{"actor":"Transition Prediction (TRANSPRED)","action":"Every ~20 minutes, after static affected-target filtering, scores targets for pass-to-fail transition risk and ranks.","actor_type":"system"},{"actor":"Speculative Cycle scheduler","action":"Schedules the top-risk targets within a 25% test budget to find novel breakages sooner.","actor_type":"system"},{"actor":"Culprit finding / autorollback / developers","action":"Consume earlier failure signals for investigation and rollback.","actor_type":"system"}],"decision_mode":"moved","decision_marker":"Selection moves from a fixed rule to the model"},"before":[{"order":1,"actor":"Developer","action":"Submits a change after limited presubmit testing.","handoff_to":"TAP Postsubmit","control":"Presubmit checks and code review; comprehensive testing is deferred"},{"order":2,"actor":"TAP Postsubmit comprehensive cycle","action":"Waits for capacity, then runs all tests affected since the last definitive repository status.","handoff_to":"Culprit finding and autorollback","control":"Static build-graph dependence; no ML ranking of which tests to run first"},{"order":3,"actor":"Culprit finding / autorollback / developers","action":"Triage the first detected failure, identify the culprit change, and roll back when evidence thresholds are met.","handoff_to":"Developer","control":"Autorollback currently requires at least 10 distinct failing targets"}],"after":[{"order":1,"actor":"Developer","action":"Submits a change after limited presubmit testing.","handoff_to":"TAP Speculative Cycles","control":"Same presubmit and review gates"},{"order":2,"actor":"Transition Prediction (TRANSPRED)","action":"Every ~20 minutes, after static affected-target filtering, scores targets for pass-to-fail transition risk and ranks them.","handoff_to":"Speculative Cycle scheduler","control":"Shallow gradient-boosted trees on coarse metadata; scores are ranks, not calibrated probabilities"},{"order":3,"actor":"Speculative Cycle scheduler","action":"Schedules the top-risk targets within a 25% test budget to find novel breakages sooner.","handoff_to":"Culprit finding and autorollback","control":"Fixed top-k cost cap; comprehensive cycles still run"},{"order":4,"actor":"Culprit finding / autorollback / developers","action":"Consume earlier failure signals for investigation and rollback.","handoff_to":"Developer","control":"Same autorollback evidence threshold (AtLeast 10 targets)"}],"decision_rights":"Transition Prediction decides speculative scheduling order within a human-set budget. Humans retain rollback policy, feature/training configuration, and the continued existence of comprehensive cycles. The model does not skip required comprehensive coverage by itself.","exception_path":"Missed breakages wait for the next comprehensive cycle. Flaky or low-evidence culprits are filtered by culprit verification. Late speculative detections that do not beat comprehensive timing still fall back to the existing gardening workflow.","removed_work":["Waiting solely on the next capacity-gated comprehensive cycle to surface a novel breakage","Treating all affected tests as equal priority in the first postsubmit slice"],"outcomes":[{"metric":"Median (p50) time to detect novel breaking targets","baseline":"107 minutes with comprehensive cycles only","result":"37 minutes with Speculative Cycles (approximately 65% / 70-minute reduction)","period":"Three months of production TAP Postsubmit data contemporaneous with the 2025 study","scale":"120 billion test×cycle pairs, 7.7 million breaking targets, ~20,000 unique breakages","attribution_caveat":"Comparison is to the prior comprehensive scheduler on empirically observed production timings at a 25% target budget, not a randomized controlled experiment. The paper says Google 'is implementing' Speculative Cycles; the evaluated production-data window does not state the fleet fraction live during every day of the three months. The Google Research abstract reports an approximately 70-minute median reduction; the ICST paper states 65% from 107 to 37 minutes, which is the same difference.","evidence_label":"verified"}],"executive_lesson":"When the expensive complete pass cannot get faster, the transformation is to give a cheaper, more frequent pass the right to choose what to run. Google moved postsubmit ordering from 'all affected tests when capacity allows' to a ranked speculative slice, and median novel-breakage detection fell from 107 minutes to 37.","anti_pattern":"Claiming that developers used to pick test order by hand, or reporting a 70-minute win without stating the 107-to-37-minute comprehensive-cycle baseline and the 25% budget.","questions_for_leaders":["What is the first pass that is allowed to be incomplete in order to be faster?","If the model is wrong, does a slower complete cycle still run, or did we just create silent coverage gaps?","Is the outcome median time-to-detect on production traffic, or a replay against a synthetic scheduler?"],"collections":["queue-eliminated"],"bundle_version":"1.0.0","bundle_fingerprint":"sha256:c23c6cc2b88153d008ea8fda928f632ce0011fc2d4c5036672a16e5d895bab93","canonical_url":"https://brianletort.ai/transformations/google-speculative-cycles"}