TTLS AND PROPAGATION
Nothing propagates. Caches expire, at different times, on different resolvers, and the difference between those two descriptions explains almost every confusing DNS change.
This is the short version: what a TTL controls, why the number you set is not the one that matters, and how to plan around it.
What this covers
Chapter 1 of 5
How long a resolver may keep an answer.
A TTL is a number attached to every DNS record, measured in seconds, that tells any resolver how long it may keep the answer before asking again.
That is the entire mechanism. A record with a TTL of 300 may be cached for five minutes. One with 86400 may be cached for a day. Nothing more complicated is happening.
Chapter 2 of 5
The one already cached, not the one you just set.
Here is the part that catches almost everybody. When you change a record, the TTL that governs how long the old value survives is the one that was already published, not the one you just set.
If your record had a TTL of 86400 and you change both the value and the TTL to 300, resolvers that cached the old answer are still entitled to hold it for up to a day. They cached the old value along with the old instruction.
Lower the TTL a day before you plan to make the change. Wait for the old TTL to expire everywhere. Then make the actual change, which now propagates within minutes because the currently cached instruction is short.
Raise it again afterwards, once you are confident, because a permanently low TTL means more queries and slightly slower lookups for no benefit.
Chapter 3 of 5
Caches expire independently. That is all propagation is.
The reason a change appears to reach some people and not others is not that it is travelling. It is that different resolvers cached the old answer at different moments, so their copies expire at different moments.
Your machine may see the new value in seconds because it had never looked before. A colleague's may take an hour because theirs looked forty minutes ago. Neither is more correct.
Nothing propagates outward from your nameservers. Resolvers pull, they do not receive. The phrase describes the period during which independently-timed caches happen to still be holding old answers, which is why nobody can give you an exact completion time.
The upper bound is knowable, though, and it is the previous TTL. Past that, every resolver that follows the rules has discarded the old value.
Chapter 4 of 5
Lower a day ahead, change, raise afterwards.
The full sequence, for any change that matters:
Chapter 5 of 5
What to check when time has passed and nothing moved.
If more than the previous TTL has passed and the old value is still appearing, the problem is almost certainly not caching.
In roughly nine cases out of ten the answer is the first one: the zone being edited is not the zone being served.
Check yours
Everything above, checked on your domain in about ten seconds. Free, no account.