By Saad Iqbal
The test sheet said six months was supposed to be routine. A wireline unit sets a lubricator, the technician runs the semi-annual function test on the subsurface safety valve (SCSSV), and on a good day everyone’s back in the truck inside two hours. On a bad day, the flapper won’t seat, the leakage gauge creeps past the limit, and the well that was producing an hour ago is now shut in while someone works out whether this is a pull-and-replace or a full workover. Nobody saw it coming because nobody was looking — the valve had been degrading quietly for eighteen months between two tests that both said “pass.”
That gap is the whole problem with how most operators manage subsurface safety valves (SSVs). A valve is either tested or it isn’t; between tests, it’s a black box. The regulation that governs it — 30 CFR 250.880 — was written around that reality: it assumes the valve’s condition is only knowable at test time, and it sets the clock accordingly. But the data to know more already exists in most SCADA historians and well files. This is about using it.

What 30 CFR 250.880 Actually Requires — and Why the Clock Isn’t the Same for Every Valve
If you work offshore US wells, the testing interval for your surface-controlled subsurface safety valve (SCSSV) isn’t a single number — it depends on how the valve is installed. Under 30 CFR 250.880(c), a surface-controlled SSV gets tested semi-annually, not to exceed six calendar months between tests. A subsurface-controlled valve installed in a landing nipple gets a longer twelve-month window; one not installed in a nipple is back to six months. Surface-controlled valves on subsea tree wells are also tested semi-annually, at six-month intervals. Every well also carries a 72-hour pre-production notification requirement to the District Manager before first production on a facility — a reminder that the whole system is built around scheduled checkpoints, not continuous visibility.
The pass/fail line itself is numeric and strict: the test method specified under API RP 14C (Appendix D), alongside API RP 14B and API Standard 6AV2, fails a valve on a liquid leakage rate above 400 cubic centimeters per minute, or a gas leakage rate above 15 standard cubic feet per minute. Cross either number and the valve has failed its test, full stop — there’s no partial credit for “close.”

What the regulation doesn’t track is the shape of the decline. A valve crossing 400 cc/min on test day didn’t fail that morning — it has been trending there for months, through flapper seat erosion from produced sand, elastomer seal embrittlement from H₂S exposure, thermal cycling fatigue on the control line, or scale and debris building up on the seat every time the valve closes and reopens. Those mechanisms all leave a signature in the leakage numbers from the previous tests, if anyone bothers to plot them.
What a Failed Test Actually Costs You
A failed SCSSV test isn’t a paperwork problem. Depending on the valve type and completion, a failure typically means an unplanned wireline intervention to pull and replace the valve, or — if the well can’t be safely worked live — a full workover with a rig. Either way, the well is shut in from the moment of the failed test until the replacement is tested and passed, and that’s deferred production stacked on top of intervention cost. None of that is scheduled around your maintenance calendar; it’s scheduled around whenever the valve happened to cross the line, which is usually the worst possible time, because nobody was watching for it.
Operators have tried to get ahead of this for well-integrity failures generally — it’s the same logic behind catching corrosion before it leaks and flagging casing wear before it loses wall thickness. SCSSVs are the one piece of well-integrity equipment with a built-in, government-mandated measurement cadence, which makes them an unusually good candidate for trend-based prediction: you already have the data points, you’re just not connecting them.
From Pass/Fail Snapshots to a Continuous Trend
The fix doesn’t require a platform purchase to get started. It requires treating every historical leakage reading as a data point in a time series instead of a one-off pass/fail stamp, then asking a simple question: at the current rate of change, when does this valve cross 400 cc/min or 15 scf/min — and does that happen before or after the next scheduled test?

A worked example makes this concrete. Say a valve’s liquid leakage history across its last four semi-annual tests reads 95, 150, 230, and 340 cc/min. That’s accelerating, not linear — each interval is adding a larger jump than the last. A simple exponential trend fit through those four points, projected one more six-month cycle forward, lands at roughly 430–450 cc/min: past the 400 cc/min limit, before the next test even happens. That’s a valve you schedule a planned change-out for now, during your next routine intervention window, instead of reacting to a failed test and an unplanned shut-in later.
Here’s that same logic as a short Python script using pandas — pull your test history, fit the trend, and flag anything projected to cross the limit before its next scheduled test:
import numpy as np
import pandas as pd
# Test history: months since valve change-out, liquid leakage (cc/min)
history = pd.DataFrame({
"month": [12, 18, 24, 30],
"leakage_cc_min": [95, 150, 230, 340],
})
LIQUID_LIMIT_CC_MIN = 400 # 30 CFR 250.880 fail threshold
TEST_INTERVAL_MONTHS = 6 # next scheduled semi-annual test
# Fit an exponential trend: log(leakage) is roughly linear in time
coeffs = np.polyfit(history["month"], np.log(history["leakage_cc_min"]), 1)
slope, intercept = coeffs
def projected_leakage(month):
return np.exp(slope * month + intercept)
next_test_month = history["month"].max() + TEST_INTERVAL_MONTHS
projected = projected_leakage(next_test_month)
status = "FLAG: projected to fail next scheduled test" \
if projected >= LIQUID_LIMIT_CC_MIN else "OK: projected to pass"
print(f"Projected leakage at month {next_test_month}: {projected:.0f} cc/min")
print(status)
Run across every SCSSV on a platform or field, that loop turns a folder of individual test certificates into one ranked list: which valves are trending toward failure, and roughly how many months of runway each one has left. For a larger fleet, a gradient-boosted model or a survival-analysis approach (predicting time-to-failure rather than a single trend line) adds production context the simple fit leaves out — H₂S concentration, flowing temperature, sand count, and cycling frequency all measurably shorten valve life, and a model trained across your full valve population learns those interactions instead of assuming every valve degrades the same way.

Building the Ranked Work List
In practice, the pipeline looks like this:
- Pull test history. Liquid and gas leakage rates from every completed SSV function test, by well, going back as many cycles as your well files hold.
- Join production conditions. H₂S concentration, flowing temperature, sand and solids indicators, and valve cycling frequency from your production database or historian, matched to the same wells.
- Fit the trend or train the model. Start with the simple per-valve regression above if you’re working from a spreadsheet; move to a fleet-wide model once you have enough wells to learn shared degradation patterns.
- Rank and schedule. Sort wells by projected days-to-threshold and route the shortest-runway valves into your next planned intervention window, not an emergency call-out.
This is the same discipline that makes early kick detection work — reading the continuous signal between discrete checkpoints instead of waiting for the checkpoint to tell you something went wrong. The valve test record already exists; the only new work is treating four data points as a line instead of four separate facts.
What to Verify — and the Pitfalls
A projected crossing date is only as good as the test history behind it, so sanity-check before you schedule anything on its word:
- Too few points, too much trust. Three or four test cycles is barely enough to fit a trend; treat an early projection as a flag to watch more closely, not a confirmed failure date.
- Valve swaps reset the clock. If a valve was replaced between tests, its “history” restarts — check the well file before chaining readings together.
- Not every valve degrades exponentially. Some fail from a discrete event — debris ingestion, a control-line leak — rather than gradual wear. A sudden jump that breaks the trend is itself a signal worth investigating, not noise to smooth over.
- Gas leakage and liquid leakage are separate checks. Track both against their own thresholds (15 scf/min and 400 cc/min); a valve can be trending fine on one and creeping on the other.
None of this replaces the semi-annual test — it’s still the legal and physical check that confirms the valve actually works. What it changes is whether that test is a surprise.
If you’re building out a broader well-integrity monitoring program rather than a single script, our roundup of the best AI well integrity monitoring tools is a reasonable next stop — and if corrosion, not valve wear, is your bigger exposure, start with how AI catches corrosion before it leaks.