Why the TTL has to come down first

A resolver that caches a record may keep serving that copy for as long as the TTL it received. Lowering the TTL in your zone does not reach copies that are already cached: a resolver that fetched the record a minute before you lowered a one-day TTL can keep the old answer for almost a full day. So the TTL has to be lowered at least one old-TTL period before the change, and the planner counts backwards from your change time to find that moment.

After the switch, the short TTL limits how long anyone can keep seeing the old value. That window is what you have to cover by keeping the old server, IP, or platform binding alive.

How the timeline is calculated

StepFormula
Lower the TTL no later thanchange time − current TTL − margin
Make the changeyour planned time
Last moment a resolver may still return the old answerchange time + temporary TTL
Keep the old destination running until at leastchange time + temporary TTL + margin
Raise the TTL againafter you have verified the new answer everywhere you check

If you skip the first step, the worst case becomes change time + current TTL. The planner shows that number too, so you can decide whether the preparation is worth it for this record.

What a TTL cannot promise

  • Resolvers apply their own limits. Some enforce a minimum or maximum cache time, so a 30-second TTL may be held longer.
  • Clients cache too. Operating systems, browsers, and applications keep short caches of their own, and open connections keep talking to the old address until they close.
  • Brand-new names are different. If a name did not exist and someone queried it, the "does not exist" answer is cached for the negative TTL taken from the zone's SOA record. Create new records before anyone looks them up; see negative caching.
  • Proxied Cloudflare records are fixed. Proxied records use Auto, which Cloudflare currently sets to 300 seconds, and it cannot be edited. The planner switches to that value when you tick the box.

Checking progress during the change

Query the zone's authoritative server first: if it does not return the new value, nothing downstream will. Then compare public resolvers with the DNS lookup tool or from a terminal:

dig @ns1.example-dns.net app.example.com A +norec
dig @1.1.1.1 app.example.com A +noall +answer
dig @8.8.8.8 app.example.com A +noall +answer

The number in the second column of a resolver's answer is its remaining cache time. When it reaches zero the resolver asks again and should come back with the new value and a fresh TTL.