My previous post describes why you cannot rely on having the latest data. This relates primarily to external data. But what about data you create and control? How can we ensure that's applied correctly and consistently.
Consider the example of a retailer with multiple locations. The items they sell will have assigned pricing that will be consistent across locations (in this example I'm considering only the case where a single set of pricing is used, but the principal can apply where pricing varies by region and other factors). They wish to update the price of a Widget X from $a to $b. If they send an update price message (via queuing, web services, file transfer, phone call or any other mechanism) then there is inevitably going to be a difference in the times each location gets the new price $b. It may be problematic that the locations will differ in price for some period but this is unlikely. What is more likely to be of concern is a sudden change in price for customers. If the price on the shelf is still $a then unless $b is a lower price customers are unlikely to be happy. Indeed the store will likely be obliged to sell at price $a until the shelf price is updated.
The problem here is the immediate application of the new data. The solution is to remove the immediacy. If the price is to be updated then make the new price applicable as at some point in the future. Propagation delays then become less of an issue. It also becomes possible to automatically produce the new price tags for items to be applied just prior to the new pricing taking effect.
This solution builds in tolerance for propagation delays. It also allows data to be set for periods into the future. For instance sale prices may be set as applicable from the first day of the sale. At the same time the regular prices can be set as applicable from the day after the end of the sale. This ensures sale prices do not extend beyond the period desired and eliminates the concern that someone will forget to reset the prices.