{"id":2075,"date":"2026-09-22T09:30:10","date_gmt":"2026-09-22T09:30:10","guid":{"rendered":"https:\/\/cms.research.wpp.com\/?post_type=research_feed&#038;p=2075"},"modified":"2026-09-22T10:31:17","modified_gmt":"2026-09-22T10:31:17","slug":"what-is-a-promised-time-window-actually-worth","status":"publish","type":"research_feed","link":"https:\/\/cms.research.wpp.com\/?research_feed=what-is-a-promised-time-window-actually-worth","title":{"rendered":"What Is a Promised Time Window Actually Worth?"},"content":{"rendered":"\n<p class=\"has-medium-font-size wp-block-paragraph\">You have been given a slot: the specialist will arrive between 09:00 and 11:00. Someone chose those two numbers. They chose them the evening before, for every appointment on the list at once, before knowing how long any single visit would actually take. And the moment they chose them, they changed the problem they were trying to solve.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">This is a decision that almost every skilled-service business makes daily and almost nobody optimises directly. A skilled worker \u2014 a field technician, a surveyor, a home nurse, a maintenance engineer, a surgeon working through a theatre list \u2014 moves through a sequence of jobs whose durations are genuinely uncertain, and each customer or patient has been promised a time in advance. The promise is usually an afterthought: a number bolted onto a schedule after the schedule is fixed, or picked from habit.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">At Satalia, WPP&#8217;s enterprise AI and optimisation company, this class of problem arrives in production form: last-mile delivery, field-service scheduling, workforce allocation, where the distance between a good answer and a poor one is counted in vehicles, hours and missed appointments. What follows sits one step behind that work \u2014 not how to route a fleet or fill a rota, but what to tell the customer once you have. It is the part that reaches the customer directly, and the part most often left to a default.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">It is also, less obviously, a brand problem. A quoted arrival time is a promise made in a brand&#8217;s name, and one of the very few a customer can verify to the minute. Campaigns set the expectation; the slot is where it is met or quietly broken, at scale, long after the media spend has stopped. Most organisations track the sentiment that results without examining the arithmetic that produced it.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">So we wrote it up properly, and asked two questions:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"has-medium-font-size wp-block-paragraph\"><em><strong>&#8220;How should a provider choose the time windows it quotes to customers, and how much of the promised reliability actually survives a day&#8217;s work?&#8221;<\/strong><\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The first has a clean answer. The second is the uncomfortable one.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>A PROMISE MADE BEFORE THE FACTS<\/strong><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Two features make quoted windows harder than they look.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The first is that they are all committed at once, before any uncertainty resolves. Nobody knows whether the first job will be a ten-minute adjustment or a three-hour diagnostic, but every window on the list has to be published anyway.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The second is subtler, and is where our contribution sits. <strong>Each window a provider quotes changes the conditions under which every later job runs.<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Consider a worker who finishes the 09:00 job early and is ready at the next address at 10:40. That window opens at 11:00. They cannot start. They wait.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">From the customer&#8217;s point of view nothing has happened. Statistically, something significant has. A whole range of possible ready-times \u2014 10:20, 10:35, 10:52 \u2014 has been flattened onto a single actual start time of 11:00. In the language of probability, the distribution of start times has been <strong>truncated from below<\/strong> at the window&#8217;s opening, and the mass below that point collapses into an <strong>atom<\/strong>: one outcome carrying a large lump of probability.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"440\" src=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot001.jpeg\" alt=\"\" class=\"wp-image-2076\" srcset=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot001.jpeg 1000w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot001-300x132.jpeg 300w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot001-766x337.jpeg 766w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Left: distribution of the worker&#8217;s ready time, with seven candidate openings t\u2081\u2013t\u2087; bars show probability pushed to each \u2014 later openings give taller, darker bars, as waiting grows likelier and longer. Right: job duration distribution.<\/figcaption><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The consequence is that the spread of start times inherited by the <em>next<\/em> job is not the spread the planner would have faced without the window. It has been squeezed, and squeezed by an amount the planner chose. The promise has become an input to the uncertainty the provider must then manage.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"440\" src=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot002.jpeg\" alt=\"\" class=\"wp-image-2077\" srcset=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot002.jpeg 1000w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot002-300x132.jpeg 300w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot002-766x337.jpeg 766w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Seven promises, seven futures. Each curve is the start-time distribution for the next job under one candidate opening above. Picking an opening doesn&#8217;t just constrain that appointment \u2014 it sets the distribution all later ones inherit.<\/figcaption><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The existing literature handles this in one of two ways, and both give something up. Either windows are taken as exogenous and the resulting waiting is measured after the fact, or the continuous distribution is replaced by a modest set of sampled scenarios, which discards the shape of the tails where the interesting behaviour lives. We do neither: the truncation point is a decision variable, and the distribution is carried in continuous form while we optimise over it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>HOW WE MODELLED IT<\/strong><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Job durations are continuous random variables rather than point estimates. We used three families \u2014 gamma, normal and lognormal \u2014 parameterised so that mean and variance are controlled independently, which lets us vary <em>how much<\/em> uncertainty there is separately from <em>what shape<\/em> it has. That separation matters for one of our findings.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Broken promises cost two different parties, and we price them separately:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Starting early<\/strong> costs the provider: paid time spent idle at the door.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Starting later<\/strong> costs the customer, who has organised a day around a window that turned out to be fiction.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Both are charged through penalties with a linear and a quadratic term, so cost rises faster than the deviation itself: forty minutes late is more than twice as bad as twenty. That is a better match to how disruption is experienced than a flat per-minute charge, and it is the functional form used in the service-reliability literature we build on. Work running past the end of the shift is charged separately as overtime.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"444\" src=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot_34-1024x444.jpeg\" alt=\"\" class=\"wp-image-2078\" srcset=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot_34-1024x444.jpeg 1024w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot_34-300x130.jpeg 300w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot_34-766x332.jpeg 766w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot_34.jpeg 1500w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">How penalties pick the window. Hump: one job&#8217;s start times; dashed lines: the quoted window \u2014 inside = on time, left = worker waits, right = customer waits. U-curve: quadratic penalty. Bottom: reprice early vs late and window slides left.<\/figcaption><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">This is the picture worth holding onto. The optimiser is not choosing a width in the abstract; it is sliding a window across a distribution, and every position implies a different split between the two kinds of failure.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Reliability enters as a <strong>chance constraint<\/strong>: each quoted window must capture <em>*at least*<\/em> a specified share of the start-of-service distribution \u2014 we tested 50%, 70% and 90%. The optimiser then chooses both the width and the position of every window to minimise total expected inconvenience subject to those constraints.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Note the &#8220;at least&#8221;. The constraint is a floor, not a target, and it is often not the binding consideration: when penalties make wider windows cheap, the optimiser covers considerably more probability than the minimum demanded. This matters for reading the results later.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Two technical points for anyone who works with models like this. First, the expectations driving the objective are available in <strong>closed form<\/strong> \u2014 for each candidate truncation point we derive exact expressions for the truncated expected start of service under all three distribution families and embed them directly, so the objective is not a sampled approximation. Second, deciding where a window may begin requires discretising the support of the distribution, and the fineness of that grid is what binds tractability: the resulting mixed-integer quadratic programme grows quickly in both the number of jobs and the number of grid points.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">We are candid about the consequence. The formulation is exact and it does not scale. Rather than leave that implicit, we ran a systematic stress test to locate the wall \u2014 for each instance family, the finest grid still solvable inside a fixed time budget \u2014 and reported the frontier: between 500 and 3,500 grid points across sequences of 5 to 25 jobs, solved to near-zero optimality gaps. Piecewise-linear and convex reformulations are the obvious route past it, and we say so rather than claiming a scalability we do not have.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>WHAT WE TESTED<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Dimension<\/th><th class=\"has-text-align-left\" data-align=\"left\">Levels<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">Sequence length<\/td><td class=\"has-text-align-left\" data-align=\"left\">5, 9, 13, 17, 21, 25 jobs<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Penalty structures<\/td><td class=\"has-text-align-left\" data-align=\"left\">5 (baseline, width-weighted, delay-weighted, earliness-weighted, both-weighted)<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Duration distributions<\/td><td class=\"has-text-align-left\" data-align=\"left\">gamma, normal, lognormal<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Variability levels<\/td><td class=\"has-text-align-left\" data-align=\"left\">3, at fixed mean<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Reliability floors<\/td><td class=\"has-text-align-left\" data-align=\"left\">50%, 70%, 90%<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Instances solved to optimality<\/td><td class=\"has-text-align-left\" data-align=\"left\">810<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Simulated days per instance<\/td><td class=\"has-text-align-left\" data-align=\"left\">1,000<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Experimental design. Every combination was solved exactly, then the resulting windows were tested against a thousand simulated days in which durations were drawn afresh.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>WHAT WE FOUND<\/strong><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Window width is driven overwhelmingly by the reliability floor.<\/strong> Raise the floor and windows widen, consistently across every sequence length, distribution and variability level. This follows mechanically from the chance constraints, but its practical value is the ranking: the floor dominates the other levers.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>The amount of uncertainty matters much more than its shape \u2014 with one qualification worth keeping visible.<\/strong> Expected inconvenience tracked the variance of durations closely and was largely indifferent to distributional family. At the 50% and 90% floors, the median spread in cost across the three families was roughly 2% and 6%. At the 70% floor it widened to about 28%, with the lognormal typically cheapest, because for the same mean and variance it concentrates more mass at shorter durations and permits narrower, better-placed windows at intermediate reliability. The reassuring headline \u2014 estimate your variance, do not agonise over the distribution \u2014 holds at the extremes and weakens in the middle. Useful to know before relying on it.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Position is a genuine lever, not just width.<\/strong> When earliness was penalised more heavily than lateness, the optimiser systematically shifted windows toward the left tail of the start-of-service distribution, positioning them to catch the fast outcomes and avoid paid idleness \u2014 precisely the movement shown in the lower panel of Figure 2. Providers who know whether idle workers or annoyed customers cost them more can act on that, and the effect is large enough to be worth acting on.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>And the result that gave us pause: coverage at the moment of promising is not adherence at the end of the day.<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Because the windows typically cover more probability than the floor demands, the sharpest comparison is not promise-versus-outcome but <em>coverage-versus-outcome<\/em>: how much of the start-of-service distribution a window actually captures, against how often service actually began inside it across a thousand simulated days.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Sequence length<\/th><th class=\"has-text-align-left\" data-align=\"left\">Gap between coverage and realized adherence<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">5 jobs<\/td><td class=\"has-text-align-left\" data-align=\"left\">24.6 points<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">25 jobs<\/td><td class=\"has-text-align-left\" data-align=\"left\">41.9 points<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Divergence widens monotonically with sequence length \u2014 ~1 pp per extra job. Against the nominal reliability floor, mean shortfalls are 3.0 pts at 50%, 23.9 at 70%, 33.9 at 90%. Instance averages; deliberately strict adherence (see caveat).<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"315\" src=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/AvRel_2-1024x315.jpeg\" alt=\"\" class=\"wp-image-2079\" srcset=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/AvRel_2-1024x315.jpeg 1024w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/AvRel_2-767x236.jpeg 767w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/AvRel_2-300x92.jpeg 300w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/AvRel_2.jpeg 1300w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Adherence falls with sequence length in every panel (3 duration distributions \u00d7 3 reliability floors); P1\u2013P6 = 5\u201325 jobs. Width-weighted penalties: narrowest windows of five tested, a demanding case; levels sit below Table 2 (Fig. 5).<\/figcaption><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The chance constraint is satisfied exactly. But it describes the distribution faced <em>at the moment the window is quoted<\/em>, and says nothing about what happens once a full day&#8217;s uncertainty has accumulated behind it. The customer served last receives a materially weaker promise than the customer served first, and nothing in the planning output says so.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The practical implication is clear enough. If what you care about is what customers experience rather than what your scheduler asserts, the reliability parameter must be set above your true target, and set higher still for jobs late in the sequence.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>THE HONEST CAVEAT<\/strong><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Those numbers need a qualification, and we would rather supply it than have someone else find it.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Our adherence measure is strict to the point of harshness. If the worker arrives before the window opens, waits, and begins at 11:00 exactly, we score that as a failure \u2014 even though service started inside the window the customer was given. By any customer-facing definition, that is a success.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">So the gaps above are an <strong>upper bound<\/strong> on the problem. Some fraction of what we count is a worker idle at the door: a real cost to the provider, but no inconvenience to the person waiting. Decomposing the gap \u2014 separating &#8220;early and idle&#8221; from &#8220;late and disruptive&#8221; \u2014 is the natural next step in the measurement, and we have not done it yet. The direction of the finding is not in doubt. Its exact magnitude is.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">We flag this partly because it is honest and partly because it changes what a manager should do. If the gap is mostly lateness, it is a service-quality problem. If it is mostly early idleness, it is a cost problem wearing a service-quality costume. Those call for different responses.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>THIS IS NOT REALLY ABOUT ANY ONE PROFESSION<\/strong><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The model does not know what the work is. It sees a sequence of tasks of uncertain duration, performed in a fixed order, each with a time promised to somebody. A maintenance round, a district-nursing schedule and a hospital operating list are the same object to it.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The clinical case may be the most consequential. Surgical durations are among the most variable service times anywhere, the start time a hospital communicates to a patient is a promise of exactly this kind, and one procedure running long displaces every case behind it. That is the same collapse-and-propagate mechanism as the technician waiting at a door, with rather more at stake for the person waiting.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Because the sequence is taken as given, the model also sits on top of whatever produced the schedule \u2014 routing software, an appointment system, or an experienced human planner. It is a module for deciding what to promise, not a replacement for deciding what order to work in.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>THE TAKEAWAY<\/strong><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Three things worth carrying away, whether or not you ever open an optimiser.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A quoted time is not a passive forecast. It is an intervention that reshapes what happens next, and it deserves to be chosen deliberately rather than inherited from whatever produced the schedule.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">If you are estimating uncertainty for a model like this, spend your effort on how much durations vary rather than on which distribution they follow \u2014 while remembering that this simplification is strongest at aggressive and relaxed reliability floors and weakest in between.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">And treat any service-level figure in a planning system as a claim about the moment of promising, not about the customer&#8217;s experience. The two are different quantities, and the difference grows all day.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><em>The full paper, &#8220;Quoting Time Windows under Stochastic Service Times: Endogenous Waiting and the Reshaping of Service Uncertainty,&#8221; is under Review, and it is available on request.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>You have been given a slot: the specialist will arrive between 09:00 and 11:00. Someone chose those two numbers. They chose them the evening before, for every appointment on the list at once, before knowing how long any single visit would actually take. And the moment they chose them, they changed the problem they were [&hellip;]<\/p>\n","protected":false},"author":22,"featured_media":0,"template":"","meta":{"_acf_changed":false,"_ppma_block_editor_authors":"{\"authors\":[32],\"author_categories\":{\"32\":\"1\"},\"fallback_author_user\":\"4\",\"ppma_author_box_select\":\"\",\"selected_authors\":[{\"id\":32,\"display_name\":\"Panagiotis Repoussi\",\"is_guest\":0,\"category_id\":\"1\"}]}"},"tags":[],"content_types":[{"id":50,"name":"Blog Post","slug":"article"}],"ppma_author":[{"id":22,"display_name":"Panagiotis Repoussi","first_name":"Panagiotis","last_name":"Repoussis","nickname":"panos","user_nicename":"panos","user_email":"panos@satalia.com","biographical_info":null,"avatar_url":"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/04\/panos.jpg","job_title":"Head of Research","is_lead":false,"display_as_researcher":true,"order_priority":0}],"class_list":["post-2075","research_feed","type-research_feed","status-publish","hentry","content_type-article"],"acf":{"content":"<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">So we wrote it up properly, and asked two questions:<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:quote --><\/p>\n<blockquote class=\"wp-block-quote\"><p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\"><em><strong>&#8220;How should a provider choose the time windows it quotes to customers, and how much of the promised reliability actually survives a day&#8217;s work?&#8221;<\/strong><\/em><\/p>\n<p><!-- \/wp:paragraph --><\/p><\/blockquote>\n<p><!-- \/wp:quote --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">The first has a clean answer. The second is the uncomfortable one.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:heading {\"level\":3} --><\/p>\n<h3 class=\"wp-block-heading\"><strong>A PROMISE MADE BEFORE THE FACTS<\/strong><\/h3>\n<p><!-- \/wp:heading --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Two features make quoted windows harder than they look.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">The first is that they are all committed at once, before any uncertainty resolves. Nobody knows whether the first job will be a ten-minute adjustment or a three-hour diagnostic, but every window on the list has to be published anyway.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">The second is subtler, and is where our contribution sits. <strong>Each window a provider quotes changes the conditions under which every later job runs.<\/strong><\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Consider a worker who finishes the 09:00 job early and is ready at the next address at 10:40. That window opens at 11:00. They cannot start. They wait.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">From the customer&#8217;s point of view nothing has happened. Statistically, something significant has. A whole range of possible ready-times \u2014 10:20, 10:35, 10:52 \u2014 has been flattened onto a single actual start time of 11:00. In the language of probability, the distribution of start times has been <strong>truncated from below<\/strong> at the window&#8217;s opening, and the mass below that point collapses into an <strong>atom<\/strong>: one outcome carrying a large lump of probability.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:image {\"id\":2076,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} --><\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"440\" src=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot001.jpeg\" alt=\"\" class=\"wp-image-2076\" srcset=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot001.jpeg 1000w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot001-300x132.jpeg 300w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot001-766x337.jpeg 766w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Figure 1a. Left: the distribution of times at which the worker could be ready to begin a job, with seven candidate window openings marked t\u2081 to t\u2087. The bars show how much probability gets pushed up to each candidate opening \u2014 the further right the opening is placed, the taller and darker the bar, because waiting becomes both more likely and longer. Right: the duration distribution of the job itself.<\/figcaption><\/figure>\n<p><!-- \/wp:image --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">The consequence is that the spread of start times inherited by the <em>next<\/em> job is not the spread the planner would have faced without the window. It has been squeezed, and squeezed by an amount the planner chose. The promise has become an input to the uncertainty the provider must then manage.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:image {\"id\":2077,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} --><\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"440\" src=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot002.jpeg\" alt=\"\" class=\"wp-image-2077\" srcset=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot002.jpeg 1000w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot002-300x132.jpeg 300w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot002-766x337.jpeg 766w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Figure 1b. Seven promises, seven different futures. Each curve is the distribution of start times for the following job, under one of the seven candidate openings above. Choosing where to open a window does not merely constrain that one appointment \u2014 it selects which distribution every subsequent appointment has to live with.<\/figcaption><\/figure>\n<p><!-- \/wp:image --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">The existing literature handles this in one of two ways, and both give something up. Either windows are taken as exogenous and the resulting waiting is measured after the fact, or the continuous distribution is replaced by a modest set of sampled scenarios, which discards the shape of the tails where the interesting behaviour lives. We do neither: the truncation point is a decision variable, and the distribution is carried in continuous form while we optimise over it.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:heading {\"level\":3} --><\/p>\n<h3 class=\"wp-block-heading\"><strong>HOW WE MODELLED IT<\/strong><\/h3>\n<p><!-- \/wp:heading --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Job durations are continuous random variables rather than point estimates. We used three families \u2014 gamma, normal and lognormal \u2014 parameterised so that mean and variance are controlled independently, which lets us vary <em>how much<\/em> uncertainty there is separately from <em>what shape<\/em> it has. That separation matters for one of our findings.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Broken promises cost two different parties, and we price them separately:<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:list --><\/p>\n<ul class=\"wp-block-list\"><!-- wp:list-item {\"fontSize\":\"medium\"} --><\/p>\n<li class=\"has-medium-font-size\"><strong>Starting early<\/strong> costs the provider: paid time spent idle at the door.<\/li>\n<p><!-- \/wp:list-item --><\/p>\n<p><!-- wp:list-item {\"fontSize\":\"medium\"} --><\/p>\n<li class=\"has-medium-font-size\"><strong>Starting later<\/strong> costs the customer, who has organised a day around a window that turned out to be fiction.<\/li>\n<p><!-- \/wp:list-item --><\/ul>\n<p><!-- \/wp:list --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Both are charged through penalties with a linear and a quadratic term, so cost rises faster than the deviation itself: forty minutes late is more than twice as bad as twenty. That is a better match to how disruption is experienced than a flat per-minute charge, and it is the functional form used in the service-reliability literature we build on. Work running past the end of the shift is charged separately as overtime.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:image {\"id\":2078,\"sizeSlug\":\"large\",\"linkDestination\":\"none\"} --><\/p>\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"444\" src=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot_34-1024x444.jpeg\" alt=\"\" class=\"wp-image-2078\" srcset=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot_34-1024x444.jpeg 1024w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot_34-300x130.jpeg 300w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot_34-766x332.jpeg 766w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot_34.jpeg 1500w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Figure 2. How the penalties choose the window. The hump is the distribution of possible start times for one job; the two heavy dashed lines are the window that was quoted. Probability inside the window is service delivered as promised. Probability to the left of it is too early \u2014 the worker waits. Probability to the right is too late \u2014 the customer is kept waiting. The U-shaped curve is the quadratic penalty: nil inside the window, climbing steeply on either side, with a linear penalty shown for comparison. Bottom panel: change the relative price of arriving early versus arriving late, and the whole window slides. Here it moves left, capturing more probability for less width, trading the worker&#8217;s waiting against the customer&#8217;s delay.<\/figcaption><\/figure>\n<p><!-- \/wp:image --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">This is the picture worth holding onto. The optimiser is not choosing a width in the abstract; it is sliding a window across a distribution, and every position implies a different split between the two kinds of failure.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Reliability enters as a <strong>chance constraint<\/strong>: each quoted window must capture <em>*at least*<\/em> a specified share of the start-of-service distribution \u2014 we tested 50%, 70% and 90%. The optimiser then chooses both the width and the position of every window to minimise total expected inconvenience subject to those constraints.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Note the &#8220;at least&#8221;. The constraint is a floor, not a target, and it is often not the binding consideration: when penalties make wider windows cheap, the optimiser covers considerably more probability than the minimum demanded. This matters for reading the results later.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Two technical points for anyone who works with models like this. First, the expectations driving the objective are available in <strong>closed form<\/strong> \u2014 for each candidate truncation point we derive exact expressions for the truncated expected start of service under all three distribution families and embed them directly, so the objective is not a sampled approximation. Second, deciding where a window may begin requires discretising the support of the distribution, and the fineness of that grid is what binds tractability: the resulting mixed-integer quadratic programme grows quickly in both the number of jobs and the number of grid points.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">We are candid about the consequence. The formulation is exact and it does not scale. Rather than leave that implicit, we ran a systematic stress test to locate the wall \u2014 for each instance family, the finest grid still solvable inside a fixed time budget \u2014 and reported the frontier: between 500 and 3,500 grid points across sequences of 5 to 25 jobs, solved to near-zero optimality gaps. Piecewise-linear and convex reformulations are the obvious route past it, and we say so rather than claiming a scalability we do not have.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:heading {\"level\":3} --><\/p>\n<h3 class=\"wp-block-heading\"><strong>WHAT WE TESTED<\/strong><\/h3>\n<p><!-- \/wp:heading --><\/p>\n<p><!-- wp:table {\"className\":\"is-style-stripes\"} --><\/p>\n<figure class=\"wp-block-table is-style-stripes\">\n<table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th class=\"has-text-align-left\" data-align=\"left\">Dimension<\/th>\n<th class=\"has-text-align-left\" data-align=\"left\">Levels<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"has-text-align-left\" data-align=\"left\">Sequence length<\/td>\n<td class=\"has-text-align-left\" data-align=\"left\">5, 9, 13, 17, 21, 25 jobs<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-left\" data-align=\"left\">Penalty structures<\/td>\n<td class=\"has-text-align-left\" data-align=\"left\">5 (baseline, width-weighted, delay-weighted, earliness-weighted, both-weighted)<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-left\" data-align=\"left\">Duration distributions<\/td>\n<td class=\"has-text-align-left\" data-align=\"left\">gamma, normal, lognormal<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-left\" data-align=\"left\">Variability levels<\/td>\n<td class=\"has-text-align-left\" data-align=\"left\">3, at fixed mean<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-left\" data-align=\"left\">Reliability floors<\/td>\n<td class=\"has-text-align-left\" data-align=\"left\">50%, 70%, 90%<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-left\" data-align=\"left\">Instances solved to optimality<\/td>\n<td class=\"has-text-align-left\" data-align=\"left\">810<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-left\" data-align=\"left\">Simulated days per instance<\/td>\n<td class=\"has-text-align-left\" data-align=\"left\">1,000<\/td>\n<\/tr>\n<\/tbody>\n<\/table><figcaption class=\"wp-element-caption\">Table 1. Experimental design. Every combination was solved exactly, then the resulting windows were tested against a thousand simulated days in which durations were drawn afresh.<\/figcaption><\/figure>\n<p><!-- \/wp:table --><\/p>\n<p><!-- wp:heading {\"level\":3} --><\/p>\n<h3 class=\"wp-block-heading\"><strong>WHAT WE FOUND<\/strong><\/h3>\n<p><!-- \/wp:heading --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\"><strong>Window width is driven overwhelmingly by the reliability floor.<\/strong> Raise the floor and windows widen, consistently across every sequence length, distribution and variability level. This follows mechanically from the chance constraints, but its practical value is the ranking: the floor dominates the other levers.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\"><strong>The amount of uncertainty matters much more than its shape \u2014 with one qualification worth keeping visible.<\/strong> Expected inconvenience tracked the variance of durations closely and was largely indifferent to distributional family. At the 50% and 90% floors, the median spread in cost across the three families was roughly 2% and 6%. At the 70% floor it widened to about 28%, with the lognormal typically cheapest, because for the same mean and variance it concentrates more mass at shorter durations and permits narrower, better-placed windows at intermediate reliability. The reassuring headline \u2014 estimate your variance, do not agonise over the distribution \u2014 holds at the extremes and weakens in the middle. Useful to know before relying on it.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\"><strong>Position is a genuine lever, not just width.<\/strong> When earliness was penalised more heavily than lateness, the optimiser systematically shifted windows toward the left tail of the start-of-service distribution, positioning them to catch the fast outcomes and avoid paid idleness \u2014 precisely the movement shown in the lower panel of Figure 2. Providers who know whether idle workers or annoyed customers cost them more can act on that, and the effect is large enough to be worth acting on.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\"><strong>And the result that gave us pause: coverage at the moment of promising is not adherence at the end of the day.<\/strong><\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Because the windows typically cover more probability than the floor demands, the sharpest comparison is not promise-versus-outcome but <em>coverage-versus-outcome<\/em>: how much of the start-of-service distribution a window actually captures, against how often service actually began inside it across a thousand simulated days.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:table {\"className\":\"is-style-stripes\"} --><\/p>\n<figure class=\"wp-block-table is-style-stripes\">\n<table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th class=\"has-text-align-left\" data-align=\"left\">Sequence length<\/th>\n<th class=\"has-text-align-left\" data-align=\"left\">Gap between coverage and realized adherence<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"has-text-align-left\" data-align=\"left\">5 jobs<\/td>\n<td class=\"has-text-align-left\" data-align=\"left\">24.6 points<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-left\" data-align=\"left\">25 jobs<\/td>\n<td class=\"has-text-align-left\" data-align=\"left\">41.9 points<\/td>\n<\/tr>\n<\/tbody>\n<\/table><figcaption class=\"wp-element-caption\">Table 2. The divergence widens monotonically with sequence length \u2014 roughly one percentage point per additional job. Measured instead against the nominal reliability floor, average shortfalls are 3.0 points at 50%, 23.9 at 70% and 33.9 at 90%. All figures are averages across instances, under a deliberately strict adherence measure \u2014 see the caveat below.<\/figcaption><\/figure>\n<p><!-- \/wp:table --><\/p>\n<p><!-- wp:image {\"id\":2079,\"sizeSlug\":\"large\",\"linkDestination\":\"none\"} --><\/p>\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"315\" src=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/AvRel_2-1024x315.jpeg\" alt=\"\" class=\"wp-image-2079\" srcset=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/AvRel_2-1024x315.jpeg 1024w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/AvRel_2-767x236.jpeg 767w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/AvRel_2-300x92.jpeg 300w, https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/AvRel_2.jpeg 1300w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Figure 3. Realized adherence declining with sequence length, for each of the three duration distributions and three reliability floors. P1 to P6 are sequences of 5 to 25 jobs. This is the width-weighted penalty setting, which produces the narrowest windows of the five we tested and so represents a demanding case rather than a typical one \u2014 which is why the levels here sit below the all-instance averages quoted in Table 2. The downward slope, though, is present everywhere.<\/figcaption><\/figure>\n<p><!-- \/wp:image --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">The chance constraint is satisfied exactly. But it describes the distribution faced <em>at the moment the window is quoted<\/em>, and says nothing about what happens once a full day&#8217;s uncertainty has accumulated behind it. The customer served last receives a materially weaker promise than the customer served first, and nothing in the planning output says so.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">The practical implication is clear enough. If what you care about is what customers experience rather than what your scheduler asserts, the reliability parameter must be set above your true target, and set higher still for jobs late in the sequence.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:heading {\"level\":3} --><\/p>\n<h3 class=\"wp-block-heading\"><strong>THE HONEST CAVEAT<\/strong><\/h3>\n<p><!-- \/wp:heading --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Those numbers need a qualification, and we would rather supply it than have someone else find it.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Our adherence measure is strict to the point of harshness. If the worker arrives before the window opens, waits, and begins at 11:00 exactly, we score that as a failure \u2014 even though service started inside the window the customer was given. By any customer-facing definition, that is a success.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">So the gaps above are an <strong>upper bound<\/strong> on the problem. Some fraction of what we count is a worker idle at the door: a real cost to the provider, but no inconvenience to the person waiting. Decomposing the gap \u2014 separating &#8220;early and idle&#8221; from &#8220;late and disruptive&#8221; \u2014 is the natural next step in the measurement, and we have not done it yet. The direction of the finding is not in doubt. Its exact magnitude is.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">We flag this partly because it is honest and partly because it changes what a manager should do. If the gap is mostly lateness, it is a service-quality problem. If it is mostly early idleness, it is a cost problem wearing a service-quality costume. Those call for different responses.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:heading {\"level\":3} --><\/p>\n<h3 class=\"wp-block-heading\"><strong>THIS IS NOT REALLY ABOUT ANY ONE PROFESSION<\/strong><\/h3>\n<p><!-- \/wp:heading --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">The model does not know what the work is. It sees a sequence of tasks of uncertain duration, performed in a fixed order, each with a time promised to somebody. A maintenance round, a district-nursing schedule and a hospital operating list are the same object to it.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">The clinical case may be the most consequential. Surgical durations are among the most variable service times anywhere, the start time a hospital communicates to a patient is a promise of exactly this kind, and one procedure running long displaces every case behind it. That is the same collapse-and-propagate mechanism as the technician waiting at a door, with rather more at stake for the person waiting.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Because the sequence is taken as given, the model also sits on top of whatever produced the schedule \u2014 routing software, an appointment system, or an experienced human planner. It is a module for deciding what to promise, not a replacement for deciding what order to work in.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:heading {\"level\":3} --><\/p>\n<h3 class=\"wp-block-heading\"><strong>THE TAKEAWAY<\/strong><\/h3>\n<p><!-- \/wp:heading --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">Three things worth carrying away, whether or not you ever open an optimiser.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">A quoted time is not a passive forecast. It is an intervention that reshapes what happens next, and it deserves to be chosen deliberately rather than inherited from whatever produced the schedule.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">If you are estimating uncertainty for a model like this, spend your effort on how much durations vary rather than on which distribution they follow \u2014 while remembering that this simplification is strongest at aggressive and relaxed reliability floors and weakest in between.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\">And treat any service-level figure in a planning system as a claim about the moment of promising, not about the customer&#8217;s experience. The two are different quantities, and the difference grows all day.<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:separator --><\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<!-- \/wp:separator --><\/p>\n<p><!-- wp:paragraph {\"fontSize\":\"medium\"} --><\/p>\n<p class=\"has-medium-font-size\"><em>The full paper, &#8220;Quoting Time Windows under Stochastic Service Times: Endogenous Waiting and the Reshaping of Service Uncertainty,&#8221; is under Review, and it is available on request.<\/em><\/p>\n<p><!-- \/wp:paragraph --><\/p>\n","content_quarter":"","related_pods":[1362]},"research_categories":[],"raw_acf":{"content":"<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">So we wrote it up properly, and asked two questions:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:quote -->\n<blockquote class=\"wp-block-quote\"><!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\"><em><strong>\"How should a provider choose the time windows it quotes to customers, and how much of the promised reliability actually survives a day's work?\"<\/strong><\/em><\/p>\n<!-- \/wp:paragraph --><\/blockquote>\n<!-- \/wp:quote -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">The first has a clean answer. The second is the uncomfortable one.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3 class=\"wp-block-heading\"><strong>A PROMISE MADE BEFORE THE FACTS<\/strong><\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Two features make quoted windows harder than they look.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">The first is that they are all committed at once, before any uncertainty resolves. Nobody knows whether the first job will be a ten-minute adjustment or a three-hour diagnostic, but every window on the list has to be published anyway.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">The second is subtler, and is where our contribution sits. <strong>Each window a provider quotes changes the conditions under which every later job runs.<\/strong><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Consider a worker who finishes the 09:00 job early and is ready at the next address at 10:40. That window opens at 11:00. They cannot start. They wait.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">From the customer's point of view nothing has happened. Statistically, something significant has. A whole range of possible ready-times \u2014 10:20, 10:35, 10:52 \u2014 has been flattened onto a single actual start time of 11:00. In the language of probability, the distribution of start times has been <strong>truncated from below<\/strong> at the window's opening, and the mass below that point collapses into an <strong>atom<\/strong>: one outcome carrying a large lump of probability.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"id\":2076,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot001.jpeg\" alt=\"\" class=\"wp-image-2076\"\/><figcaption class=\"wp-element-caption\">Figure 1a. Left: the distribution of times at which the worker could be ready to begin a job, with seven candidate window openings marked t\u2081 to t\u2087. The bars show how much probability gets pushed up to each candidate opening \u2014 the further right the opening is placed, the taller and darker the bar, because waiting becomes both more likely and longer. Right: the duration distribution of the job itself.<\/figcaption><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">The consequence is that the spread of start times inherited by the <em>next<\/em> job is not the spread the planner would have faced without the window. It has been squeezed, and squeezed by an amount the planner chose. The promise has become an input to the uncertainty the provider must then manage.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"id\":2077,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot002.jpeg\" alt=\"\" class=\"wp-image-2077\"\/><figcaption class=\"wp-element-caption\">Figure 1b. Seven promises, seven different futures. Each curve is the distribution of start times for the following job, under one of the seven candidate openings above. Choosing where to open a window does not merely constrain that one appointment \u2014 it selects which distribution every subsequent appointment has to live with.<\/figcaption><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">The existing literature handles this in one of two ways, and both give something up. Either windows are taken as exogenous and the resulting waiting is measured after the fact, or the continuous distribution is replaced by a modest set of sampled scenarios, which discards the shape of the tails where the interesting behaviour lives. We do neither: the truncation point is a decision variable, and the distribution is carried in continuous form while we optimise over it.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3 class=\"wp-block-heading\"><strong>HOW WE MODELLED IT<\/strong><\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Job durations are continuous random variables rather than point estimates. We used three families \u2014 gamma, normal and lognormal \u2014 parameterised so that mean and variance are controlled independently, which lets us vary <em>how much<\/em> uncertainty there is separately from <em>what shape<\/em> it has. That separation matters for one of our findings.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Broken promises cost two different parties, and we price them separately:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul class=\"wp-block-list\"><!-- wp:list-item {\"fontSize\":\"medium\"} -->\n<li class=\"has-medium-font-size\"><strong>Starting early<\/strong> costs the provider: paid time spent idle at the door.<\/li>\n<!-- \/wp:list-item -->\n\n<!-- wp:list-item {\"fontSize\":\"medium\"} -->\n<li class=\"has-medium-font-size\"><strong>Starting later<\/strong> costs the customer, who has organised a day around a window that turned out to be fiction.<\/li>\n<!-- \/wp:list-item --><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Both are charged through penalties with a linear and a quadratic term, so cost rises faster than the deviation itself: forty minutes late is more than twice as bad as twenty. That is a better match to how disruption is experienced than a flat per-minute charge, and it is the functional form used in the service-reliability literature we build on. Work running past the end of the shift is charged separately as overtime.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"id\":2078,\"sizeSlug\":\"large\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/Rplot_34-1024x444.jpeg\" alt=\"\" class=\"wp-image-2078\"\/><figcaption class=\"wp-element-caption\">Figure 2. How the penalties choose the window. The hump is the distribution of possible start times for one job; the two heavy dashed lines are the window that was quoted. Probability inside the window is service delivered as promised. Probability to the left of it is too early \u2014 the worker waits. Probability to the right is too late \u2014 the customer is kept waiting. The U-shaped curve is the quadratic penalty: nil inside the window, climbing steeply on either side, with a linear penalty shown for comparison. Bottom panel: change the relative price of arriving early versus arriving late, and the whole window slides. Here it moves left, capturing more probability for less width, trading the worker's waiting against the customer's delay.<\/figcaption><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">This is the picture worth holding onto. The optimiser is not choosing a width in the abstract; it is sliding a window across a distribution, and every position implies a different split between the two kinds of failure.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Reliability enters as a <strong>chance constraint<\/strong>: each quoted window must capture <em>*at least*<\/em> a specified share of the start-of-service distribution \u2014 we tested 50%, 70% and 90%. The optimiser then chooses both the width and the position of every window to minimise total expected inconvenience subject to those constraints.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Note the \"at least\". The constraint is a floor, not a target, and it is often not the binding consideration: when penalties make wider windows cheap, the optimiser covers considerably more probability than the minimum demanded. This matters for reading the results later.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Two technical points for anyone who works with models like this. First, the expectations driving the objective are available in <strong>closed form<\/strong> \u2014 for each candidate truncation point we derive exact expressions for the truncated expected start of service under all three distribution families and embed them directly, so the objective is not a sampled approximation. Second, deciding where a window may begin requires discretising the support of the distribution, and the fineness of that grid is what binds tractability: the resulting mixed-integer quadratic programme grows quickly in both the number of jobs and the number of grid points.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">We are candid about the consequence. The formulation is exact and it does not scale. Rather than leave that implicit, we ran a systematic stress test to locate the wall \u2014 for each instance family, the finest grid still solvable inside a fixed time budget \u2014 and reported the frontier: between 500 and 3,500 grid points across sequences of 5 to 25 jobs, solved to near-zero optimality gaps. Piecewise-linear and convex reformulations are the obvious route past it, and we say so rather than claiming a scalability we do not have.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3 class=\"wp-block-heading\"><strong>WHAT WE TESTED<\/strong><\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:table {\"className\":\"is-style-stripes\"} -->\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Dimension<\/th><th class=\"has-text-align-left\" data-align=\"left\">Levels<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">Sequence length<\/td><td class=\"has-text-align-left\" data-align=\"left\">5, 9, 13, 17, 21, 25 jobs<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Penalty structures<\/td><td class=\"has-text-align-left\" data-align=\"left\">5 (baseline, width-weighted, delay-weighted, earliness-weighted, both-weighted)<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Duration distributions<\/td><td class=\"has-text-align-left\" data-align=\"left\">gamma, normal, lognormal<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Variability levels<\/td><td class=\"has-text-align-left\" data-align=\"left\">3, at fixed mean<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Reliability floors<\/td><td class=\"has-text-align-left\" data-align=\"left\">50%, 70%, 90%<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Instances solved to optimality<\/td><td class=\"has-text-align-left\" data-align=\"left\">810<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Simulated days per instance<\/td><td class=\"has-text-align-left\" data-align=\"left\">1,000<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Table 1. Experimental design. Every combination was solved exactly, then the resulting windows were tested against a thousand simulated days in which durations were drawn afresh.<\/figcaption><\/figure>\n<!-- \/wp:table -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3 class=\"wp-block-heading\"><strong>WHAT WE FOUND<\/strong><\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\"><strong>Window width is driven overwhelmingly by the reliability floor.<\/strong> Raise the floor and windows widen, consistently across every sequence length, distribution and variability level. This follows mechanically from the chance constraints, but its practical value is the ranking: the floor dominates the other levers.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\"><strong>The amount of uncertainty matters much more than its shape \u2014 with one qualification worth keeping visible.<\/strong> Expected inconvenience tracked the variance of durations closely and was largely indifferent to distributional family. At the 50% and 90% floors, the median spread in cost across the three families was roughly 2% and 6%. At the 70% floor it widened to about 28%, with the lognormal typically cheapest, because for the same mean and variance it concentrates more mass at shorter durations and permits narrower, better-placed windows at intermediate reliability. The reassuring headline \u2014 estimate your variance, do not agonise over the distribution \u2014 holds at the extremes and weakens in the middle. Useful to know before relying on it.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\"><strong>Position is a genuine lever, not just width.<\/strong> When earliness was penalised more heavily than lateness, the optimiser systematically shifted windows toward the left tail of the start-of-service distribution, positioning them to catch the fast outcomes and avoid paid idleness \u2014 precisely the movement shown in the lower panel of Figure 2. Providers who know whether idle workers or annoyed customers cost them more can act on that, and the effect is large enough to be worth acting on.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\"><strong>And the result that gave us pause: coverage at the moment of promising is not adherence at the end of the day.<\/strong><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Because the windows typically cover more probability than the floor demands, the sharpest comparison is not promise-versus-outcome but <em>coverage-versus-outcome<\/em>: how much of the start-of-service distribution a window actually captures, against how often service actually began inside it across a thousand simulated days.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:table {\"className\":\"is-style-stripes\"} -->\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Sequence length<\/th><th class=\"has-text-align-left\" data-align=\"left\">Gap between coverage and realized adherence<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">5 jobs<\/td><td class=\"has-text-align-left\" data-align=\"left\">24.6 points<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">25 jobs<\/td><td class=\"has-text-align-left\" data-align=\"left\">41.9 points<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Table 2. The divergence widens monotonically with sequence length \u2014 roughly one percentage point per additional job. Measured instead against the nominal reliability floor, average shortfalls are 3.0 points at 50%, 23.9 at 70% and 33.9 at 90%. All figures are averages across instances, under a deliberately strict adherence measure \u2014 see the caveat below.<\/figcaption><\/figure>\n<!-- \/wp:table -->\n\n<!-- wp:image {\"id\":2079,\"sizeSlug\":\"large\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/cms.research.wpp.com\/wp-content\/uploads\/2026\/09\/AvRel_2-1024x315.jpeg\" alt=\"\" class=\"wp-image-2079\"\/><figcaption class=\"wp-element-caption\">Figure 3. Realized adherence declining with sequence length, for each of the three duration distributions and three reliability floors. P1 to P6 are sequences of 5 to 25 jobs. This is the width-weighted penalty setting, which produces the narrowest windows of the five we tested and so represents a demanding case rather than a typical one \u2014 which is why the levels here sit below the all-instance averages quoted in Table 2. The downward slope, though, is present everywhere.<\/figcaption><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">The chance constraint is satisfied exactly. But it describes the distribution faced <em>at the moment the window is quoted<\/em>, and says nothing about what happens once a full day's uncertainty has accumulated behind it. The customer served last receives a materially weaker promise than the customer served first, and nothing in the planning output says so.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">The practical implication is clear enough. If what you care about is what customers experience rather than what your scheduler asserts, the reliability parameter must be set above your true target, and set higher still for jobs late in the sequence.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3 class=\"wp-block-heading\"><strong>THE HONEST CAVEAT<\/strong><\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Those numbers need a qualification, and we would rather supply it than have someone else find it.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Our adherence measure is strict to the point of harshness. If the worker arrives before the window opens, waits, and begins at 11:00 exactly, we score that as a failure \u2014 even though service started inside the window the customer was given. By any customer-facing definition, that is a success.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">So the gaps above are an <strong>upper bound<\/strong> on the problem. Some fraction of what we count is a worker idle at the door: a real cost to the provider, but no inconvenience to the person waiting. Decomposing the gap \u2014 separating \"early and idle\" from \"late and disruptive\" \u2014 is the natural next step in the measurement, and we have not done it yet. The direction of the finding is not in doubt. Its exact magnitude is.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">We flag this partly because it is honest and partly because it changes what a manager should do. If the gap is mostly lateness, it is a service-quality problem. If it is mostly early idleness, it is a cost problem wearing a service-quality costume. Those call for different responses.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3 class=\"wp-block-heading\"><strong>THIS IS NOT REALLY ABOUT ANY ONE PROFESSION<\/strong><\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">The model does not know what the work is. It sees a sequence of tasks of uncertain duration, performed in a fixed order, each with a time promised to somebody. A maintenance round, a district-nursing schedule and a hospital operating list are the same object to it.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">The clinical case may be the most consequential. Surgical durations are among the most variable service times anywhere, the start time a hospital communicates to a patient is a promise of exactly this kind, and one procedure running long displaces every case behind it. That is the same collapse-and-propagate mechanism as the technician waiting at a door, with rather more at stake for the person waiting.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Because the sequence is taken as given, the model also sits on top of whatever produced the schedule \u2014 routing software, an appointment system, or an experienced human planner. It is a module for deciding what to promise, not a replacement for deciding what order to work in.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3 class=\"wp-block-heading\"><strong>THE TAKEAWAY<\/strong><\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">Three things worth carrying away, whether or not you ever open an optimiser.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">A quoted time is not a passive forecast. It is an intervention that reshapes what happens next, and it deserves to be chosen deliberately rather than inherited from whatever produced the schedule.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">If you are estimating uncertainty for a model like this, spend your effort on how much durations vary rather than on which distribution they follow \u2014 while remembering that this simplification is strongest at aggressive and relaxed reliability floors and weakest in between.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\">And treat any service-level figure in a planning system as a claim about the moment of promising, not about the customer's experience. The two are different quantities, and the difference grows all day.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:separator -->\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<!-- \/wp:separator -->\n\n<!-- wp:paragraph {\"fontSize\":\"medium\"} -->\n<p class=\"has-medium-font-size\"><em>The full paper, \"Quoting Time Windows under Stochastic Service Times: Endogenous Waiting and the Reshaping of Service Uncertainty,\" is under Review, and it is available on request.<\/em><\/p>\n<!-- \/wp:paragraph -->","content_quarter":"","related_pods":["1362"],"featured":"","legacy_perspective_source_id":""},"_links":{"self":[{"href":"https:\/\/cms.research.wpp.com\/index.php?rest_route=\/wp\/v2\/research_feed\/2075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cms.research.wpp.com\/index.php?rest_route=\/wp\/v2\/research_feed"}],"about":[{"href":"https:\/\/cms.research.wpp.com\/index.php?rest_route=\/wp\/v2\/types\/research_feed"}],"author":[{"embeddable":true,"href":"https:\/\/cms.research.wpp.com\/index.php?rest_route=\/wp\/v2\/users\/22"}],"acf:post":[{"embeddable":true,"href":"https:\/\/cms.research.wpp.com\/index.php?rest_route=\/wp\/v2\/research_pods\/1362"}],"wp:attachment":[{"href":"https:\/\/cms.research.wpp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2075"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cms.research.wpp.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2075"},{"taxonomy":"content_type","embeddable":true,"href":"https:\/\/cms.research.wpp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcontent_types&post=2075"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/cms.research.wpp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fppma_author&post=2075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}