<?xml version="1.0"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Timefold</title>
    <link>https://timefold.ai/</link>
	<atom:link href="https://timefold.ai/feed.xml" rel="self" type="application/rss+xml" />
    <description>Timefold product updates, news, press releases &amp; more!</description>
    <language>en</language>
    <lastBuildDate>Tue, 10 Mar 2026 13:04:44 +0100</lastBuildDate>
	<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
	<generator>timefold.ai</generator>
	<image>
   		<title>Timefold</title>
		<url>https://timefold.ai/images/og.jpg</url>
		<link>https://timefold.ai/</link>
	</image>
	<copyright>All rights reserved 2024, Timefold BV</copyright>
	<category>Planning</category>
	<category>Planning Optimization</category>
	<category>Planning Software</category>
	<category>Planning Solving</category>
	<category>Timefold</category>
	<category>OptaPlanner</category>

    		      <item>
        <title><![CDATA[ Solver 2.x: Java Platform Module System (JPMS) support. ]]></title>
        <link>https://timefold.ai/blog/solver-2-x-java-platform-module-system-support</link>
        <guid>https://timefold.ai/blog/solver-2-x-java-platform-module-system-support</guid>
        <pubDate>Tue, 10 Mar 2026 11:41:00 +0100</pubDate>
		<description><p>We are introducing JPMS support in Timefold Solver 2.x. In this blog post, we explain what that means to our current users and to the long term maintainability of the project. </p></description>
        <content:encoded>
          <![CDATA[ <p>We recently announced Timefold Solver 2.x, slated for somewhere later this month. It’s our first <i>real</i> major version since the fork (1.x was largely a package rename from the old OptaPlanner days) which means it’s finally time to address some issues we’ve been wanting to tackle for ages. One of them was <i>modularity</i>.</p><h2><strong>Java's </strong><code><strong>public</strong></code><strong> challenge</strong></h2><p>In Java, classes have a few visibility options. <code>private</code>, package-private, <code>protected</code>, and <code>public</code>. Large libraries often end up marking internal classes as <code>public</code> so different packages inside the library can interact. That’s exactly what happened in Timefold over the years.</p><p>As the codebase grew, some classes were technically public but <strong>never meant to be used by consumers</strong>. You’ve probably seen them:</p><p><code>ai.timefold.solver.core.*impl.*</code></p><p>Those packages contain implementation details of the solver. But since the classes were public, they were sometimes used anyway. From a user’s perspective, the reasoning is understandable: <i>"If it’s public, why shouldn’t I use it?"</i></p><p>For years, Java lacked a visibility level that meant “public within this codebase, but not part of the supported API.” That changed with the introduction of <a target="_blank" href="https://cr.openjdk.org/~mr/jigsaw/spec/" rel="noreferrer noopener">Java Platform Module System (JPMS)</a>, which we will formally be supporting starting with Solver 2.0.</p><p>With JPMS we can explicitly choose which packages are exported and which remain internal.</p><pre><code class="language-java">module ai.timefold.solver.core {

    exports ai.timefold.solver.core.api.domain.common;
    exports ai.timefold.solver.core.api.domain.entity;
    exports ai.timefold.solver.core.api.domain.solution;
    exports ai.timefold.solver.core.api.domain.solution.cloner;
    
    // rest of file excluded
}
</code></pre><p>Exported packages are the supported API. Everything else stays internal. In other words:</p><p><strong>public no longer means “public to the world.”</strong></p><p><i>(If you run everything on the classpath instead of the modulepath, JPMS boundaries can still be bypassed. But for Solver 2.x, exported packages define the supported API.)</i></p><h2><strong>Why does this matter?</strong></h2><p>This change is mostly about <strong>clarity and long-term stability</strong>.</p><p>With explicit API boundaries we can:</p><ul><li>avoid accidental dependencies on internals</li><li>refactor internal code more freely</li><li>make upgrades less risky</li></ul><p>Internal classes may change or disappear without notice. Exported packages are the stable API.</p><h2><strong>If you depend on internal classes</strong></h2><p>If your code imports packages containing <code>.impl.</code>, you’re probably using internals.</p><p>Sometimes that happened because certain advanced use cases required it (e.g. Custom Moves). We’re actively working on replacing those patterns with <strong>supported public APIs</strong>.</p><p>If you have a legitimate use case that depends on internals, we’d like to hear about it. The goal isn’t to block anything, it’s to provide <strong>stable ways to do what you need without relying on implementation details</strong>.</p><p>If you’re using Timefold Solver and have concerns about internal classes you depend on, now is a great time to let us know.</p>]]>
        </content:encoded>
		<enclosure url="https://timefold.ai/uploads/images/blog/2026/pexels-andreea-ch-371539-11889329.jpg" length="0" type="image/jpg" />      </item>
    		      <item>
        <title><![CDATA[ Am I Ready for Optimization? The Data Foundations of Efficient Field Service ]]></title>
        <link>https://timefold.ai/blog/am-i-ready-for-optimization-the-data-foundations-of-efficient-field-service</link>
        <guid>https://timefold.ai/blog/am-i-ready-for-optimization-the-data-foundations-of-efficient-field-service</guid>
        <pubDate>Tue, 03 Mar 2026 15:12:00 +0100</pubDate>
		<description></description>
        <content:encoded>
          <![CDATA[ <p>Over the past decade, enterprises have invested heavily in understanding their data. Enterprises that have learned how to work with their data are in a strong position to forecast future needs, spot efficiencies, and act on opportunities.</p><p>If your field service organization has reached that point (or is getting close) there is one more door that structured, accessible data unlocks: <strong>optimization</strong>.</p><p>Not the vague, aspirational kind of optimization. The kind where you feed your technician availability, customer appointments, and job locations into an engine that produces the best schedule for the day - respecting every shift limit, skill requirement, time window, and lunch break - and returns it in seconds. </p><p>Optimization can be a key differentiator for many enterprises, but it is only as good as the data it consumes. In this post, we will walk through the data prerequisites for field service scheduling optimization, and explain why data readiness matters, which specific data you need (and where it typically lives), what opportunities open up once it is structured, and how to put it to work.</p><h2>Why data readiness determines optimization success</h2><p>A scheduling optimization engine is, at its core, a constraint solver. It takes a precise description of your planning problem (every technician, every job, every rule) and finds the best feasible assignment of work to people across time and space.</p><p>The operative word is <i>precise</i>. The engine cannot infer what it does not know. If a technician's lunch break is not in the data, the optimizer will schedule visits straight through it. If a customer's availability window is missing, the engine has no reason to avoid sending someone at 7 AM. If locations are inaccurate, travel time calculations fall apart, and the beautifully optimized route becomes fiction the moment a technician starts driving.</p><p>The quality of the output is bounded by the quality of the input. Organizations that have invested in structuring and owning their operational data are already past the hardest part. The remaining step is understanding <i>which</i> data optimization requires, and mapping it from where it already lives.</p><h2>Which data do you need?</h2><p>Field service optimization consumes three categories of data, each representing a different dimension of your operation. If you are familiar with spreadsheet-based scheduling, think of these as the tabs in your planning workbook. The difference? Instead of a planner manually cross-referencing them, an engine processes them all simultaneously.</p><h3>1. Employee and vehicle data (the supply side)</h3><p>This describes your workforce: who is available, when they work, what they can do, and when they need a break.</p><p>In the optimization model, each vehicle represents a technician and their transport for a given day. A vehicle record includes an <code>id</code>, the operating date, shift boundaries (<code>minStartTime and maxEndTime</code>), an optional <code>maxSoftEndTime</code> for overtime flexibility, the technician's skills, their <code>startLocation</code> and <code>endLocation</code> (typically home or a depot), a <code>technicianRating</code>, and any <code>requiredBreaks</code> for that day.</p><p>Breaks are defined within each vehicle's shift. Each break includes an <code>id</code>, a type (floating for a lunch that can slide within a window, or fixed for something like a medical appointment that cannot move), the date, a <code>minStartTime</code> and <code>maxEndTime</code> defining when the break can occur, and optionally a <code>locationId</code> if the technician needs to be somewhere specific for it.</p><p>Here is a simplified example of what this looks like as structured data:</p><pre><code class="language-java">{
 "id": "vehicle-1",
 "date": "2025-06-10",
 "minStartTime": "08:00",
 "maxEndTime": "17:00",
 "skills": ["HVAC", "electrical"],
 "startLocation": "loc-depot-01",
 "endLocation": "loc-depot-01",
 "requiredBreaks": [
   {
     "id": "break-1",
     "type": "floating",
     "minStartTime": "11:30",
     "maxEndTime": "13:30"
   }
 ]
}</code></pre><p>This data typically lives across your HR or workforce management system (for shifts, skills, and PTO), your fleet management tool (for vehicle assignments), and sometimes a separate time-and-attendance platform. The key is being able to extract it per day, per technician, in a structured format.</p><h3>2. Customer and work order data (the demand side)</h3><p>This is every job that needs to happen: where, how long, when, and under what conditions. </p><p>Visits are the core unit of demand. Each visit includes an <code>id</code>, a <code>name</code>, a <code>locationId</code> linking it to a physical address, a <code>serviceDuration</code> (how long the job takes on-site), any <code>requiredSkills</code> the technician must have (matching the skills defined on the vehicle), a <code>latestSlaEndTime</code> if there is a contractual deadline, a <code>priority</code> level, and optionally a <code>visitGroupId</code> for jobs that require multiple technicians on-site simultaneously.</p><p>Each visit also includes one or more time windows defining when the customer is available. A time window has an <code>id</code>, a <code>date</code>, and a <code>minStartTime</code> and <code>maxEndTime</code>. A window of 10:00 to 13:00 means the technician must arrive within that range. Some visits may have multiple windows across different days, giving the optimizer flexibility in scheduling.</p><p>The completeness of your time windows and skill requirements often determines how much optimization headroom you actually have. If the engine does not know a customer is only available in the morning, it cannot avoid scheduling an afternoon arrival.</p><p>This data typically originates in your CRM, ERP, ticketing system, or field service management application.</p><h3>3. Geographical data (the physical reality)</h3><p>The third pillar ties everything together spatially. Without it, the optimizer has no concept of distance or travel time.</p><p><strong>Locations</strong> are simple but critical: each record is an <code>id</code>, a <code>latitude</code>, and a <code>longitude</code>. These location IDs are referenced everywhere, in visits (where the job is), in vehicles (where the technician starts and ends their day), and in vehicle breaks (where a fixed appointment takes place).</p><p>This data lives in your CRM, address databases, or GIS systems. If you are still working primarily with street addresses, geocoding them into coordinate pairs is a prerequisite. Street-level addresses introduce ambiguity, a geocoded coordinate does not.</p><p>The optimization engine uses these coordinates to compute real-world travel times and distances between every relevant pair of points. The accuracy of your locations directly determines the accuracy of every route the engine produces.</p><h2>What opportunities open up</h2><p>Structuring and connecting these three data pillars is not just a checkbox exercise. It is the foundation for a fundamentally different way of operating.</p><p><strong>From manual assembly to automated optimization.</strong> Today, dispatchers and planners spend hours each morning assembling routes by hand: Cross-referencing technician availability, customer windows, skill requirements, and geography, often in spreadsheets or on whiteboards. With structured data, this entire process becomes an API call. The engine considers every constraint simultaneously and returns an optimized plan in seconds.</p><p><strong>From static plans to real-time replanning.</strong> A technician calls in sick at 8 AM. An emergency job arrives at 11:00. A visit runs an hour over. With structured, accessible data, you update the inputs and re-solve. The engine does not carry stale assumptions from the morning schedule. It takes the current reality and produces the best schedule from this point forward.</p><p><strong>From gut feeling to explicit trade-offs.</strong> Should you minimize mileage or minimize overtime? Is SLA compliance more important than travel efficiency? With structured data and a configurable optimization model, these become tunable parameters with measurable impact. Not judgment calls made under pressure at 6 AM.</p><p><strong>From siloed reporting to operational KPIs.</strong> Optimization outputs include metrics like total travel time, overtime incurred, visits completed versus unassigned, and utilization per technician. When your input data is clean and complete, these outputs become trustworthy enough to drive strategic decisions.</p><h2>Putting it into practice</h2><p>Most organizations will not find all three data pillars neatly organized in a single system. That is normal. The integration challenge is not about migrating everything into one database. It is about building a pipeline that assembles the optimization input from your existing sources and keeps it flowing.</p><p><strong>Step 1: Map your sources.</strong> For each data entity (vehicles, vehicle breaks, visits, visit time windows, visit groups, locations), identify which system of record holds the authoritative version. Document where gaps exist: missing coordinates, incomplete time windows, skills not yet digitized.</p><p><strong>Step 2: Close the gaps.</strong> Geocode addresses into coordinates. Ensure every technician's shift has explicit start and end times. Capture customer availability as structured time windows, not free-text notes. Define skills as a controlled vocabulary, not ad-hoc descriptions.</p><p><strong>Step 3: Build the extraction layer.</strong> Create repeatable, automated exports from each source system. This could be API integrations, database queries, or scheduled file exports, whatever your systems support. The goal is to assemble a complete optimization dataset on demand, not through manual effort.</p><p><strong>Step 4: Transform and submit.</strong> Map your extracted data into the structure the optimization engine expects (each vehicle with its shifts and breaks, each visit with its time windows and skills, each location as a coordinate pair) and POST it as a JSON payload to the API. Timefold's Field Service Routing API is stateless by design: it takes the full problem description, validates the input, solves it, and returns the optimized route plan. It does not store your data between runs. Each request is self-contained.</p><p><strong>Step 5: Integrate the results.</strong> The response contains the optimized assignments - which visits land on which vehicle shift, in what order, with arrival times, departure times, and travel durations - plus KPIs summarizing overall plan quality. Push these assignments back into your dispatch system, mobile app, or field service management platform.</p><p>This stateless architecture is a deliberate choice that keeps you in control. Your data stays in your systems and you send only what is needed for each run. Any system that can make an HTTP request can integrate. When reality changes mid-day, you update the inputs and re-solve with no stale state. And every input and output is a complete, self-describing JSON document you can version, compare, and audit.</p><h2>The takeaway</h2><p>Data readiness is not a prerequisite you endure before the real work begins. For many organizations, it <i>is</i> the highest-leverage work and the foundation that makes forecasting, analysis, and optimization possible.</p><p>If your field service operation has been investing in structuring and owning its data, you are closer to optimization than you might think. The data you need already exists in your systems. The remaining step is connecting it.</p><p>And once it is connected, the results follow: less time on the road, more visits per day, fewer SLA breaches, and dispatchers freed to focus on exceptions rather than assembly. Not because of a magic algorithm, but because you gave the algorithm something precise to work with.</p><p>If you want to see how your data maps to the optimization model,<a target="_blank" href="https://docs.timefold.ai/field-service-routing/latest/introduction" rel="noreferrer noopener"> explore Timefold's Field Service Routing documentation</a> or<a target="_blank" href="https://app.timefold.ai" rel="noreferrer noopener"> </a><a target="_blank" href="https://timefold.ai/request-a-trial" rel="noreferrer noopener">start a trial on the platform.</a></p>]]>
        </content:encoded>
		<enclosure url="https://timefold.ai/uploads/images/blog/2025/Am-I-ready-for-optimization-The-data-foundations-of-efficient-field-service.jpeg" length="0" type="image/jpeg" />      </item>
    		      <item>
        <title><![CDATA[ Beyond self-scheduling: Balancing efficiency and autonomy in field service ]]></title>
        <link>https://timefold.ai/blog/beyond-self-scheduling-balancing-efficiency-and-autonomy-in-field-service</link>
        <guid>https://timefold.ai/blog/beyond-self-scheduling-balancing-efficiency-and-autonomy-in-field-service</guid>
        <pubDate>Sun, 01 Mar 2026 20:57:00 +0100</pubDate>
		<description><p>Self-scheduling feels like freedom for field technicians, but it masks inefficiencies that drain profitability. And forcing technological solutions that ignore frontline expertise is a recipe for resistance.</p></description>
        <content:encoded>
          <![CDATA[ <p>Field service engineers don't resist technology because they fear change. They resist it because they've seen what happens when tools<strong> ignore how work actually gets done</strong>.</p><p>The objection we hear most often from operations leaders: "Our FSEs self-schedule. They won't accept a system that tells them where to go."</p><p>They're right to be cautious. But the <strong>choice isn't between autonomy and optimization</strong>. The best-performing field service organizations have found a third way.</p><h2>The real problem with self-scheduling</h2><p>Self-scheduling persists because it solves real problems. Engineers know their territories. They understand which customers need extra time. They've built relationships that smooth difficult service calls.</p><p>But self-scheduling also creates <strong>invisible costs</strong>:</p><ul><li><strong>Route inefficiency compounds daily.</strong> An engineer who prefers to work east-to-west on Mondays might be adding 30 minutes of drive time without realizing it. Multiply that across a 50-person team and 250 working days.</li><li><strong>You have to trust blindly.</strong> The 80-20 rule applies here. Even if 80% of your employees schedule in good faith, there's always a minority that takes advantage of their freedom.</li><li><strong>The bigger picture stays invisible.</strong> Engineers often schedule only their immediate workload. They can't see that shifting Tuesday's route would unlock a more efficient Wednesday, or that a job they're avoiding this week will cascade into a scheduling nightmare next week. Longer planning horizons (across days, weeks, over the full team) reveal efficiencies that short-term, individual scheduling simply cannot surface.</li><li><strong>Skill mismatches go undetected.</strong> The best-qualified engineer for a complex repair might be in the next territory, but self-scheduling never surfaces that option.</li><li><strong>Preference conflicts accumulate.</strong> When three engineers all want Fridays off, or all avoid a difficult customer site, someone ends up overloaded, usually the newest team member who hasn't yet learned to game the system.</li></ul><p>Can you afford the efficiency gap between what your team produces and what's mathematically possible?</p><h2>Why FSEs push back on optimization</h2><p>If optimization delivers clear efficiency gains,<strong> why the resistance</strong>?</p><p>Because most pure optimization tools treat engineers as interchangeable units to be deployed, not as skilled professionals with legitimate preferences and local knowledge.</p><p>When an algorithm assigns routes <strong>without explanation, engineers lose trust</strong>. When the schedule ignores a technician's need to pick up their child on Wednesdays, it fails the human test. When the system can't answer "why am I driving past this job to reach one further away?", it invites workarounds.</p><p>The result: engineers learn to game the system, dispatch overrides multiply, and the theoretical efficiency gains evaporate in practice.</p><p>This is a <strong>design failure, not an optimization failure</strong>.</p><h2>The hybrid model: Optimal starting points, human control</h2><p>The solution is not choosing between optimization and autonomy, but architecting systems that provide both.</p><p><strong>Start with mathematically optimal schedules.</strong> The optimization engine generates routes that account for every constraint: geography, skills, time windows, equipment, SLAs, labor rules, and historical performance. This is objectively the best possible starting point, one that no human could calculate manually.</p><p><strong>Present schedules as recommendations, not mandates.</strong> Engineers see their daily route with clear rationale. They can accept it as-is (which they probably should, since it's mathematically proven to be the most efficient solution given all constraints) or they can adjust it.</p><p><strong>Enable controlled adjustments.</strong> If an engineer needs to be in a specific area on Wednesdays, they can set that preference. If they want to make a personal stop, they can adjust the route. If they see a better option based on local knowledge, they can make the change. Whether it's display as a drag-and-drop UI, or as re-optimize button with new constraints, engineers keep working on their terms.</p><h2>Explainable AI: The trust architecture</h2><p>Optimization without explanation is a black box. Engineers won't trust it, and operations leaders can't defend it.</p><p>For any scheduling decision, the <strong>system should articulate which constraints drove it</strong>: "You're assigned this job because you hold the required certification and are 12 minutes closer than the next qualified option." When trade-offs exist, show them: "Swapping these two stops would save 8 minutes of drive time but push the priority customer outside their SLA window."</p><p>When engineers can see <i>why</i> a schedule looks the way it does, <strong>resistance transforms into collaboration</strong>. Questions like "wouldn't it be better to go here first?" get answered in plain language, whether it's geographical clustering, skill-matching, time windows, or SLA requirements driving the sequence.</p><p>Engineers become<strong> partners in optimization </strong>rather than subjects of it.</p><h2>Self-scheduling vs. optimized scheduling</h2><figure class="table"><table><thead><tr><th> </th><th>Self-Scheduling</th><th>Optimization-Assisted</th></tr></thead><tbody><tr><td><strong>Planning horizon</strong></td><td>Mostly one day at a time</td><td>Days, weeks, months, for the entire team</td></tr><tr><td><strong>Route efficiency</strong></td><td>Based on intuition and habit</td><td>Mathematically optimized for all constraints</td></tr><tr><td><strong>Skill matching</strong></td><td>Limited to what the engineer knows</td><td>System-wide visibility into certifications and expertise</td></tr><tr><td><strong>SLA visibility</strong></td><td>Reactive: problems surface late</td><td>Proactive: risks flagged before they materialize</td></tr><tr><td><strong>Workload distribution</strong></td><td>Uneven, favors experienced engineers</td><td>Balanced across the team</td></tr><tr><td><strong>Engineer preferences</strong></td><td>Fully autonomous, but uncoordinated</td><td>Respected as constraints, coordinated across team</td></tr><tr><td><strong>Adjustments</strong></td><td>Total freedom, no guardrails</td><td>Freedom to adjust with re-optimization</td></tr><tr><td><strong>Explainability</strong></td><td>"I know my territory"</td><td>Plain-language rationale for every decision</td></tr><tr><td><strong>Adaptability</strong></td><td>Slow and stressful: requires manual replanning</td><td>Real-time re-optimization when conditions change</td></tr></tbody></table></figure><h2>Implementation without disruption</h2><p>Even more than distrust, the strongest <strong>objection to any new system is disruption</strong>. Field service operations can't pause while IT rebuilds the scheduling stack. The right approach integrates optimization via <strong>API into existing dispatch systems</strong> and mobile apps. Why? Because engineers keep using familiar interfaces, and dispatchers keep their dashboards. Start with a pilot team, run optimization in parallel, compare results, and expand once the efficiency gains are proven.</p><h2>A different conversation</h2><p>The field service teams that succeed with optimization aren't the ones that override engineer autonomy. They're the ones that<strong> reframe the conversation</strong>.</p><p>Self-scheduling asks: "What route do I want to run today?"</p><p>Optimized scheduling asks: "Given everything we need to accomplish, what's the best version of the day I want to have?"</p><p>The second question is better. It respects engineer preferences while acknowledging that individual choices affect teammates, customers, and business outcomes.</p><p>When the optimization engine handles the combinatorial complexity,<strong> engineers can focus on what they do best: solving problems, building customer relationships, and applying the expertise that no algorithm can replicate.</strong></p><p>That's the balance worth building toward.</p>


<section
	class=" rounded-3xl p-8 prop-bg   "
	
	style="background-image: url(); background-size: cover; background-position: center;"
>
	
</section>

]]>
        </content:encoded>
		<enclosure url="https://timefold.ai/uploads/images/blog/2025/self-scheduling-vs-optimization-field-service.jpeg" length="0" type="image/jpeg" />      </item>
    		      <item>
        <title><![CDATA[ From complex labor laws to scalable conditional constraints ]]></title>
        <link>https://timefold.ai/blog/complex-labor-laws-to-scalable-conditional-constraints</link>
        <guid>https://timefold.ai/blog/complex-labor-laws-to-scalable-conditional-constraints</guid>
        <pubDate>Wed, 18 Feb 2026 14:27:00 +0100</pubDate>
		<description><p><br />Our engineer Lukas Downes shares his experience building constraints which don't always apply.</p></description>
        <content:encoded>
          <![CDATA[ <p>I like labor laws, but holy cats, they're complex to implement. The people who formulated the labor laws wanted to ensure the well-being of employees, but forgot about the poor engineers who have to implement them.</p><p>Take a look at this scheduling constraint for example:</p>



<blockquote class="c-quote  ">
	<span class="c-quote__quote"></span>

	</blockquote>
<p>This is what we call a (headache) <strong>Conditional Constraint</strong>. Let me show you how I solved it.</p><h2>Dealing with conditional constraints</h2><p>The first step is to understand the requirement. "Every seven days" means that I need to group shifts in 7 day windows we call these “rolling windows”. "If they work a night shift" means that I need to count the night shifts in this group of shifts. "Work a Maximum of 40h" is what I need to evaluate and penalize in that same group of shifts, if I detected a night shift.</p><p>Next, I want to lay out how I want my constraint to look.</p><ol><li>I need to count the amount of shifts worked in a rolling window</li><li>I also need to track the minutes worked in that same rolling window</li><li>I want to filter shifts with certain tags, but independently for both previous rules, i.e. we want to count night shifts, and penalise the time worked of all shifts</li><li>Everything should be high performance and scale up to at least 100.000 shifts</li><li>The API should be minimal, clear, extensible, specific...</li></ol><p>With the rules set, I can start working on this. Grouping the shifts for (1.) and (2.) can be difficult, but luckily I can just do a cheeky copy paste from our existing constraints. Combining them can also be pretty challenging, because I have to penalize a group of shifts, if the same group of shifts exists in the other stream. </p><p>But the answer lies in how you formulate the problem. "... if ... exists ..." is the perfect case to use the constraint node <a target="_blank" href="https://docs.timefold.ai/timefold-solver/latest/constraints-and-score/score-calculation#constraintStreamsConditionalPropagation" rel="noreferrer noopener">ifExists</a>. A benefit of using <code>ifExists</code> in this case, is that we ensure scalability and performance.</p><h2>API design</h2><p>Another difficult step is creating an easily extensible, specific, easily understandable API. During our design meeting, we settled on:</p><pre><code class="language-plaintext">{
 "rollingWindowRules": {
   "id": "max 36h worked if night shift is present",
   "window": 0,
   "minutesWorkedLimit": {
     "minutesWorkedMax": 2160 // 36 * 60 minutes
   },
   "condition": {
     "triggerLimit": 1,
     "type": "MIN_SHIFTS_WORKED",
     "includeShiftTags": [ "night shift" ],
     "shiftTagMatches": "ALL"
   }
 }
}</code></pre><p>Let's see if it meets our requirements. </p><ol><li><i>minimal</i>: yes, we only added the 'condition' field.</li><li><i>extensible</i>: yes, a type to specify what type of condition the triggerLimit will represent, for example MIN_SHIFTS_WORKED or MIN_MINUTES_WORKED. I only implemented these two, but we can easily add more.</li><li><i>specific</i>: yes, we allow the filtering of shifts with our includeShiftTags.</li></ol><h2>Conclusion</h2><p>I'm proud of how the constraint turned out. I managed to create a design for a complex problem that makes full use of the constraint stream's performance capabilities and is still readable and extensible. Creating new conditions is super easy now. So if you're interested in having a condition like "if the time off exceeds 48h then ..." or "if the amount of consecutive shifts worked exceeds 3 then..." Please do contact us, and I'll be so glad to put my hard work to good use!</p>]]>
        </content:encoded>
		<enclosure url="https://timefold.ai/uploads/images/blog/2025/From-complex-labor-laws-to-scalable-conditional-constraints.jpeg" length="0" type="image/jpeg" />      </item>
    		      <item>
        <title><![CDATA[ Humans are always the hardest part: The one thing in optimization you can&#039;t debug ]]></title>
        <link>https://timefold.ai/blog/humans-are-always-the-hardest-part-the-one-thing-in-optimization-you-cant-debug</link>
        <guid>https://timefold.ai/blog/humans-are-always-the-hardest-part-the-one-thing-in-optimization-you-cant-debug</guid>
        <pubDate>Wed, 18 Feb 2026 14:09:00 +0100</pubDate>
		<description><p>Why the algorithm is the easy part, and the change management is the "boss fight."</p></description>
        <content:encoded>
          <![CDATA[ <p>Whenever I speak at a conference or just casually talk to people about what we do here at Timefold, I often get asked:</p><p>“What is the hardest part of solving the optimization problems?”.</p><p>My answer is always the same: “<strong>the human side</strong>”.</p><p>This usually leads to surprised faces. Surely, humans can’t be harder than solving an optimization problem with more possible solutions than there are atoms in the observable universe? And yet, when talking to other optimization experts, they will probably tell you the same.</p><p>The math is hard. The psychology is harder.</p><h3>Cognitive Biases at Work</h3><p>When we use Timefold to optimize a plan, that plan usually matches all the constraints and is by all formal definitions better than what a human planner would have created in a similar time. Yet, when shown to the stakeholders, the first things they see is usually something like:</p><ul><li>The one technician who now starts 20 minutes earlier.</li><li>The one employee who has to work a different day.</li></ul><p>Not the 98 improvements. The 2 changes. And they might hate it.</p><p>This is the <a target="_blank" href="https://en.wikipedia.org/wiki/Status_quo_bias" rel="noreferrer noopener">status quo bias</a> in full swing! Change feels risky, even when the plan is objectively better. “This is how we’ve always done it” is a powerful force. People tend to convince themselves that sticking with something worse but familiar is <i>safer,</i> until the problem grows to a scale the current problem can’t solve anymore.</p><p>Even before implementation, another bias creeps in. Stakeholders often say: “Let’s just improve what we have. It shouldn’t take long.”</p><p>That’s the <a target="_blank" href="https://en.wikipedia.org/wiki/Planning_fallacy" rel="noreferrer noopener">planning fallacy</a>. We consistently underestimate how long incremental fixes will take. “Just a few tweaks” turns into months of spreadsheet archaeology and fragile macros.</p><p>We underestimate the effort required to evolve a manual or semi-manual process because we imagine best-case scenarios not messy reality. That’s why software estimates quietly grow buffers. We’re compensating for our own optimism.</p><p>The planning fallacy often meets another one: the <a target="_blank" href="https://en.wikipedia.org/wiki/Sunk_cost_fallacy" rel="noreferrer noopener">sunk cost fallacy</a>. Instead of moving to a entirely novel way of planning their operations, they will try to improve their current solution, whether that is with some custom software development, or adding another bunch of macros to their Excel spreadsheets.</p><p>“We’ve put too much work into this to abandon it now.” So instead of moving forward, we keep patching yesterday’s solution.</p><p>Let’s say the optimized plan <i>does</i> go live. Drivers ignore the suggested route because “they know a faster way.” Planners manually override assignments because “this is how we usually do it.” That’s the <a target="_blank" href="https://en.wikipedia.org/wiki/Well_travelled_road_effect" rel="noreferrer noopener">well-travelled road effect</a> at work. Familiar processes feel faster and better than they actually are.</p><p>People underestimate how long manual planning takes because they’ve done it for years. The friction has become invisible. And when it’s invisible, why would you ever deal with “<i><strong>change</strong></i>”?</p><figure class="image"><img style="aspect-ratio:1098/732;" src="https://timefold.ai/uploads/images/blog/2025/_hundredPercent/cognitive-biases.jpeg?transformId=3403&site=default" width="1098" height="732" alt="" /></figure><h3>Where Optimization Actually Breaks</h3><p>None of these biases are irrational. They’re human.</p><p>Optimization is rarely blocked by math. It’s blocked by psychology.</p><p>The real constraints in planning projects are often:</p><ul><li>Fear of change</li><li>Overconfidence in familiar workflows</li><li>Emotional attachment to past investments</li><li>Unrealistic timelines</li></ul><p>So when people ask me what the hardest part of optimization is, I still give the same answer: “the human parts of the schedule”. An optimization tool can search millions of possibilities per second. But humans decide whether the result is accepted.</p><p>And honestly? That’s not a bug. It’s a reminder that planning education isn’t just about better models. It’s about better awareness of both the mathematical and human limitations.</p><p>Modeling hard constraints is easy. Modeling human behavior is not.</p>]]>
        </content:encoded>
		<enclosure url="https://timefold.ai/uploads/images/blog/2025/Humans-are-always-the-hardest-part.jpeg" length="0" type="image/jpeg" />      </item>
    		      <item>
        <title><![CDATA[ Building Smarter Planning &amp; Scheduling UIs with Timefold and Bryntum ]]></title>
        <link>https://timefold.ai/videos/building-smarter-planning-scheduling-uis-with-timefold-and-bryntum</link>
        <guid>https://timefold.ai/videos/building-smarter-planning-scheduling-uis-with-timefold-and-bryntum</guid>
        <pubDate>Tue, 17 Feb 2026 15:40:00 +0100</pubDate>
		<description><p>Join Timefold and Bryntum on March 4, 2026, for a live demo-driven webinar on combining optimization engines with modern scheduling UIs to build powerful planning applications.</p></description>
        <content:encoded>
          <![CDATA[ <figure class="media"><div data-oembed-url="https://www.youtube.com/watch?v=onI7sENMsZ0"><div class="c-embed__wrapper c-embed--video"><iframe src="https://www.youtube.com/embed/onI7sENMsZ0" frameborder="0"></iframe></div></div></figure><p>In this webinar, Timefold and <a target="_blank" href="https://bryntum.com/" rel="noreferrer noopener">Bryntum</a> team up to show what's possible when you combine smart optimization with a great UI. Timefold takes care of the hard stuff on the backend, solving complex scheduling problems by juggling skills, time windows, travel time, costs, and even technician proficiency levels. Bryntum brings it all to life on the frontend with interactive drag-and-drop scheduling, live map views, and smooth real-time updates.</p><p>You'll see field service routing in action, watch how the system handles a mid-day emergency with a recommendation API, explore replanning with pinned and frozen schedule elements, and compare different optimization strategies (cost vs. fairness, for example). Bryntum also gives a first look at their brand new AI copilot, which lets you talk to your schedule in plain language or even by voice.</p><p>Both technologies plug into whatever backend you already have, whether that's Salesforce, SAP, or something custom. The session wraps up with an exciting look at what's next: simulations, deeper AI integration, and the shared goal of making "speak to your schedule" a reality.</p><p>Want to learn more? </p><ul><li><a target="_blank" href="https://bryntum.com/download/" rel="noreferrer noopener">Contact Bryntum</a></li><li><a target="_blank" href="https://timefold.ai/talk-to-us" rel="noreferrer noopener">Contact Timefold</a></li></ul>]]>
        </content:encoded>
		<enclosure url="https://timefold.ai/uploads/images/blog/2025/webinar-timefold-bryntym-scheduling.jpeg" length="0" type="image/jpeg" />      </item>
    		      <item>
        <title><![CDATA[ The definitive Field Service Optimization guide ]]></title>
        <link>https://timefold.ai/blog/field-service-routing-optimization-guide</link>
        <guid>https://timefold.ai/blog/field-service-routing-optimization-guide</guid>
        <pubDate>Mon, 16 Feb 2026 14:44:00 +0100</pubDate>
		<description><p>If you’re still routing and scheduling your technicians manually, you’re fighting a losing battle against math. With more possible route combinations than there are atoms in the observable universe (seriously), "good enough" is leaving 30% of your efficiency on the table.</p></description>
        <content:encoded>
          <![CDATA[ 


<section
	class=" rounded-3xl p-8 prop-bg   "
	
	style="background-image: url(); background-size: cover; background-position: center;"
>
	
</section>

<h2>What is Field Service Routing Optimization?</h2>



<blockquote class="c-quote  ">
	<span class="c-quote__quote"></span>

	</blockquote>
<p>In practical terms, a field service operation starts each day with a set of jobs that need to be completed, a workforce of technicians with different skills, availability windows, and home locations, and a set of rules governing what is and isn't a valid schedule. Routing optimization is the process of computing the best possible solution to this assignment and sequencing problem. Automatically, at scale, and fast enough to update throughout the day as conditions change.</p><p>The term "routing optimization" is sometimes used interchangeably with "route planning" or "dispatch scheduling." These are related but distinct. Route planning (as offered by tools like Google Maps or traditional mapping APIs) determines how to travel between two known points. Routing optimization determines which technician should go to which job, in what order, accounting for hundreds of real-world constraints simultaneously. It is a fundamentally more complex problem.</p><p><strong>Key distinction:</strong> Route planning answers "how do I get from A to B?" Routing optimization answers "who should go where, in what order, given all the constraints we operate under?" for an entire workforce, for the entire day/weeks/months, updated continuously.</p><h2>Why Field Service Scheduling is hard</h2>



<blockquote class="c-quote  ">
	<span class="c-quote__quote"></span>

	</blockquote>
<p>Consider a field service operation with 50 technicians and 200 jobs to schedule. The number of ways to assign those jobs to technicians - before even considering the sequencing of routes - exceeds 10<sup>300</sup> possible combinations. For context, the estimated number of atoms in the observable universe is approximately 10<sup>80</sup>. No dispatcher, and no rule-based software, can evaluate more than a tiny fraction of the solution space.</p><p>This is why field service scheduling is classified as a variant of the Vehicle Routing Problem (VRP) one of the most studied optimization problems in operations research and first formulated in 1959. The VRP is NP-hard, meaning there is no known algorithm that can find the provably optimal solution in polynomial time for large instances. In practice, this means real-world field service operations use metaheuristic solvers:  Algorithms that search intelligently through the solution space to find solutions that are near-optimal within practical time constraints.</p><p>Field service adds additional complexity on top of standard VRP because it must also handle:</p><ul><li><strong>Skill requirements:</strong> not every technician can perform every job</li><li><strong>Customer time windows</strong>: jobs must start within a specific availability window</li><li><strong>Service level agreements</strong>: priority jobs carry contractual completion commitments</li><li><strong>Multi-day and multi-shift planning</strong>: some jobs span multiple days or require sequenced visits</li><li><strong>Real-time disruptions</strong>: urgent jobs, no-shows, and traffic changes require intraday re-optimization</li><li><strong>Fairness and labor compliance: </strong>schedules must distribute workload equitably and comply with shift and overtime rules</li></ul><h2>How Field Service Routing Optimization works</h2><p>At its core, a routing optimization engine solves what is formally known as a <strong>Capacitated Vehicle Routing Problem with Time Windows and multiple side constraints</strong> (CVRPTW+). The process follows three stages:</p><h3>1. Problem encoding</h3><p>The engine encodes the scheduling problem as a formal optimization model. This involves defining planning entities (technicians, shifts, visits), decision variables (which technician is assigned to which visit, in what position in their route), and constraints (the rules that define a valid and good schedule).</p><h3>2. Constraint evaluation and scoring</h3><p>Constraints are separated into three categories based on their weight in the scoring system:</p><ul><li><mark class="mark--purple"><strong>Hard constraints</strong></mark><br />Must never be violated. Breaking a hard constraint makes the schedule infeasible. Examples: skill requirements, shift availability, required time windows.</li><li><mark class="mark--purple"><strong>Medium constraints</strong></mark><br />Should be satisfied where possible but can be relaxed when resources are insufficient. Example: maximizing the number of visits assigned in a day.</li><li><mark class="mark--purple"><strong>Soft constraints</strong></mark><br />Optimization targets that improve the quality of the schedule. Examples: minimize total travel time, minimize overtime, balance workload fairly across technicians.</li><li><mark class="mark--purple"><strong>Preferred constraints</strong></mark><br />Desirable but lower-priority preferences. Examples: preferred time windows, customer affinity (same technician as previous visit), coverage area alignment.</li></ul><p>Each candidate schedule receives a score across hard, medium, and soft dimensions. A schedule that breaks zero hard constraints but has a soft score of −1,000,000 is always better than one that breaks even a single hard constraint, because the latter is simply not a valid schedule.</p><h3>3. Solver search</h3><p>The solver applies metaheuristic search algorithms (techniques like simulated annealing, tabu search, and large neighborhood search), to explore the solution space efficiently. Starting from an initial solution, the solver iteratively proposes modifications (moving a visit from one technician to another, swapping two visits in a route, inserting an unassigned visit) and accepts changes that improve the score. The result is a high-quality near-optimal schedule delivered within a configurable time budget.</p>


<section
	class=" rounded-3xl p-8 prop-bg   "
	
	style="background-image: url(); background-size: cover; background-position: center;"
>
	
</section>

<h2>The Constraint Model in Field Service</h2><p>A complete field service constraint model covers six categories: visit dependencies, SLA compliance, shift hours and overtime, skill and seniority matching, fairness across technicians, and route optimization objectives. Each constraint group is independently configurable.</p><p>The practical value of a routing optimization engine is determined largely by the depth and accuracy of its constraint model. The following constraint categories are standard in a production field service scheduling system:</p><figure class="table" style="width:618px;"><table><thead><tr><th style="padding:12px 16px;"><strong>Constraint Category</strong></th><th style="padding:12px 16px;"><strong>Examples</strong></th><th style="padding:12px 16px;"><strong>Type</strong></th></tr></thead><tbody><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Visit time windows</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Required windows (hard), preferred windows (soft), fixed-time appointments</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Hard / Soft</td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Skill and seniority matching</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Minimum certification level required, seniority preference for complex jobs</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Hard / Soft</td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Visit dependencies</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Task B cannot start until Task A is complete; tasks must be completed with a minimum delay between them</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Hard</td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Shift hours and overtime</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Technicians cannot be scheduled outside their shift; overtime is minimized and capped</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Hard / Soft</td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Service level agreements</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">P1 jobs must be attended within 4 hours; SLA breach is a hard penalty</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Hard / Medium</td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Fairness and workload balance</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Distribute visits equitably based on availability and historical utilization</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Soft</td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Route optimization</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Minimize total travel time and distance across all technicians</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Soft</td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Technician coverage area</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Geofenced territory constraints: Technicians can only be assigned to visits within their designated zone</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Hard / Soft</td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Cost optimization</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Minimize shift activation costs; prefer lower-cost contractors when output is equivalent</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Soft</td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Multi-visit jobs</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Jobs requiring multiple technicians simultaneously with different skills (e.g. electrician + carpenter)</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Hard</td></tr></tbody></table></figure><p>Timefold allows constraint weights to be configured, so that operators can express the relative priority of competing goals (e.g. "SLA compliance is more important than travel minimization") without modifying the underlying model. </p><h2>What results to expect: Benchmark data</h2><p>Organizations deploying constraint-based routing optimization typically achieve 25-35% reductions in technician drive time, higher visit throughput with the same workforce, and measurable improvements in first-time fix rate due to better skill-to-job matching.</p><ul><li><strong>25-35% </strong>Reduction in technician drive time after optimization</li><li><strong>&lt;2 mo </strong>Typical time-to-value when integrating via API (vs 15+ months for in-house builds)</li><li><strong>1,000s </strong>Technicians schedulable simultaneously by a single optimization engine</li></ul><p>A 25-35% reduction in drive time has compounding operational benefits. For a field service team with 100 technicians each spending an average of two hours per day driving, a 30% reduction recovers approximately 60 technician-hours per day - equivalent to gaining 7-8 additional technicians without hiring. Those hours can be converted into additional visits, reduced overtime, or earlier shift ends.</p><p>The improvement is achieved by simultaneously solving three problems that human dispatchers and rule-based tools handle in isolation: <strong>who goes where</strong> (assignment), <strong>in what order</strong> (sequencing), and <strong>how to respond when plans change</strong> (re-optimization). Human dispatchers are good at recognizing obviously bad schedules, but cannot hold thousands of interdependencies in mind simultaneously to find globally optimal ones.</p><p><strong>On "the last 20%":</strong> Early-stage routing tools (basic nearest-neighbor algorithms) can capture roughly 60-70% of available efficiency gains with minimal setup. Reaching 90%+ of the theoretical optimum requires a proper constraint solver. The gap between a good greedy heuristic and a metaheuristic optimizer often represents 10-15% of total drive time, which is material at scale.</p><h2>Manual scheduling vs Routing Optimization: A direct comparison</h2><p>Manual scheduling by dispatchers is feasible for fleets of 10-20 technicians but degrades rapidly at scale. For operations with 50+ technicians, algorithmic optimization consistently outperforms manual dispatch on both efficiency and SLA compliance metrics.</p><figure class="table" style="width:618px;"><table><thead><tr><th style="padding:12px 16px;"><strong>Dimension</strong></th><th style="padding:12px 16px;"><strong>Manual / Rule-Based Dispatch</strong></th><th style="padding:12px 16px;"><strong>Routing Optimization</strong></th></tr></thead><tbody><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Scale</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Degrades above ~20 technicians</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Handles 1,000s of technicians</strong></td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Real-time disruptions</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Handled by re-dispatching one job at a time</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Full re-optimization in seconds</strong></td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Constraint coverage</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Dispatcher knowledge; inconsistently applied</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>All constraints encoded and enforced</strong></td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>SLA compliance</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Reactive; SLA breaches identified after the fact</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Proactive; SLA constraints enforced during planning</strong></td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Travel efficiency</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Locally optimized; globally suboptimal</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Globally optimized across all routes simultaneously</strong></td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Skill matching</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Manual lookup; skill gaps cause rework</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Automated skill-to-job matching with proficiency levels</strong></td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Fairness</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">Uneven workload distribution common</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Algorithmic fairness across availability and history</strong></td></tr><tr><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Dispatcher overhead</strong></td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;">High; experienced dispatchers required</td><td style="border-bottom:1px solid rgb(235,235,235);padding:11px 16px;vertical-align:top;"><strong>Low; dispatchers focus on exceptions</strong></td></tr></tbody></table></figure><p>It is worth noting that routing optimization does not eliminate the role of dispatchers. The technology empowers them to do more. Instead of spending the majority of their time constructing schedules manually, dispatchers in optimized operations review AI-generated plans, handle edge cases requiring human judgment, and manage customer escalations. The optimization engine handles the combinatorial work; humans handle the exceptions.</p><h2>Real-time re-optimization</h2><p>Real-time re-optimization automatically recalculates routes and assignments when disruptions occur (like urgent jobs, cancellations, traffic delays) producing an updated plan within seconds without requiring manual dispatcher intervention.</p><p>A static daily schedule, produced once in the morning, degrades throughout the day. Technicians run late, customers cancel, emergency jobs are called in. Without re-optimization, dispatchers manually insert changes and hope the rest of the schedule holds. In practice, a cascade of small disruptions can make an optimized morning schedule look like an unplanned afternoon.</p><p>Real-time re-optimization - sometimes called intraday re-scheduling - addresses this by treating the schedule as a continuously updated plan rather than a daily fixed output. When a trigger event occurs, the engine receives the current state of all ongoing and pending work, re-solves the assignment and routing problem for all unstarted visits, and returns an updated schedule. Visits already in progress are locked; the solver optimizes around them.</p><p>Key re-optimization triggers in production systems include:</p><ul><li>Insertion of a new urgent or emergency visit</li><li>Technician becoming unavailable (sick, vehicle issue)</li><li>Visit cancellation requiring workload redistribution</li><li>Significant travel time deviation due to traffic</li><li>Job overrun requiring subsequent visit rescheduling</li></ul><p>The "Smart Reassignment" use case, where an unexpected technician absence triggers automatic identification of the best available backup, is a direct application of real-time re-optimization. Rather than requiring a dispatcher to manually review availability and skills, the engine re-solves the affected portion of the schedule and surfaces a recommended replacement with full route and timing context.</p><h2>How Routing Optimization is delivered: The API model</h2><p>Field service routing optimization is delivered via REST API. An FSM platform submits a dataset describing jobs, technicians, and constraints to the optimization engine, which returns a complete optimized route plan, typically within seconds to minutes. Timefold's Field Service Routing API can handle up to 30,000 visits in one optimization run.</p><p>Routing optimization is not a standalone application, it is an engine embedded within a broader field service management platform. FSM software handles the user interface, job management, customer communication, and mobile workflows. The routing optimization engine handles the mathematical scheduling problem as a back-end service.</p><p>The integration pattern is straightforward. The FSM platform sends a <code>POST</code> request to the optimization API endpoint with a JSON dataset describing the planning problem: vehicles (technicians and their shifts), visits (jobs and their constraints), and configuration parameters. The engine processes the dataset and returns an optimized route plan, the specific assignment of visits to vehicle shifts, with arrival times and route sequences for each technician.</p><p>For FSM product teams evaluating routing optimization engines, the key integration considerations are:</p><ul><li><mark class="mark--purple">Constraint coverage</mark> - does the engine's model support the specific constraints your customers operate under?</li><li><mark class="mark--purple">Re-optimization latency </mark>- how quickly can the engine respond to intraday trigger events?</li><li><mark class="mark--purple">Scale</mark> - what is the tested performance at the fleet sizes your enterprise customers operate?</li><li><mark class="mark--purple">Deployment flexibility </mark>-<mark class="mark--purple"> </mark>is the engine available as a managed cloud service, on-premise, or both?</li><li><mark class="mark--purple">Integration timeline </mark>-<mark class="mark--purple"> </mark>how long does it take to go from API access to a production-grade integration?</li></ul>


<section
	class=" rounded-3xl p-8 prop-bg   "
	
	style="background-image: url(); background-size: cover; background-position: center;"
>
	
</section>

<h2>Frequently Asked Questions</h2><h3>What is the difference between routing optimization and GPS navigation?</h3><p>GPS navigation determines the fastest path between two known points. Routing optimization determines the best assignment of work to a fleet of technicians and sequences their routes to minimize travel time across all technicians simultaneously, while satisfying all scheduling constraints. These are different problems: one is pathfinding, the other is combinatorial optimization.</p><h3>Can routing optimization handle jobs that span multiple days?</h3><p>Yes. Multi-day planning windows are a standard feature of production routing optimization models. The engine treats each technician shift as a separate planning unit and can handle jobs that require sequential visits across days, jobs with delayed dependencies (e.g. a visit that cannot happen until 48 hours after a prior visit), and rolling planning horizons that extend weeks into the future.</p><h3>What happens when a technician doesn't have the required skill for an urgent job?</h3><p>The constraint model enforces skill requirements as hard constraints by default. This means the engine will not assign a job to a technician who lacks the required skill, regardless of proximity or availability. When an urgent job cannot be covered by any available technician with the required skill, the engine surfaces this as an unassigned visit so the dispatcher can take manual action (e.g. calling in a specialist or escalating to an external contractor).</p><h3>How does routing optimization handle customer time windows?</h3><p>Time windows can be encoded as hard constraints (the visit must start within the window and violations make the schedule infeasible) or soft/preferred constraints (the visit should start within the window where possible, but can be scheduled outside it to maintain overall schedule feasibility). The engine honors the window type specified and minimizes any deviations from preferred windows when hard constraints make full compliance impossible.</p><h3>Is routing optimization the same as FSM software?</h3><p>No. Field Service Management (FSM) software is a broad category covering job management, mobile workforce apps, customer portals, invoicing, and reporting. Routing optimization is a specific computational capability (the scheduling and routing engine) that is typically embedded within an FSM platform. Some FSM platforms build this engine themselves; others integrate specialized routing optimization APIs to provide this capability without the internal development burden.</p>]]>
        </content:encoded>
		<enclosure url="https://timefold.ai/uploads/images/blog/2025/The-definitive-guide-to-Field-Service-Routing-and-Scheduling-Optimization.webp" length="0" type="image/webp" />      </item>
    		      <item>
        <title><![CDATA[ Field Service Medical ]]></title>
        <link>https://timefold.ai/events/field-service-medical</link>
        <guid>https://timefold.ai/events/field-service-medical</guid>
        <pubDate>Wed, 11 Feb 2026 16:46:00 +0100</pubDate>
		<description></description>
        <content:encoded>
          <![CDATA[ <p><a target="_blank" href="https://fieldservicemd.wbresearch.com/" rel="noreferrer noopener"><strong>FAIR</strong></a> - We’re joining medical device service and support leaders to focus on what truly drives performance in MedTech operations: better <a target="_blank" href="https://timefold.ai/solutions/route-optimization" rel="noreferrer noopener">field service routing</a> and <a target="_blank" href="https://timefold.ai/scheduling-intelligence" rel="noreferrer noopener">intelligent workforce scheduling</a>. In an environment shaped by strict SLAs, complex skill requirements, regulatory constraints, and nationwide coverage, optimization is essential.</p><p>We’re there to show how advanced routing and scheduling help medical device organizations reduce travel and service costs, increase utilization across their field teams, improve first-time fix rates, and deliver more predictable service outcomes. Our mission is to help MedTech service organizations run leaner, more efficient, and scalable field operations.</p><p>Meet us at our booth, and join our AI Advisory Lab case study! </p><figure class="image"><img style="aspect-ratio:1080/1080;" src="https://timefold.ai/uploads/images/blog/2025/Field-Service-Medical-talk-AI-lab.png" alt="" width="1080" height="1080" /></figure><p> </p>]]>
        </content:encoded>
		<enclosure url="https://timefold.ai/uploads/images/blog/2025/Dark-7.jpeg" length="0" type="image/jpeg" />      </item>
    		      <item>
        <title><![CDATA[ Introducing Timefold Solver 2.0 ]]></title>
        <link>https://timefold.ai/blog/introducing-timefold-solver-2-0</link>
        <guid>https://timefold.ai/blog/introducing-timefold-solver-2-0</guid>
        <pubDate>Tue, 20 Jan 2026 13:31:00 +0100</pubDate>
		<description><p>A major evolution of Timefold Solver arrives in March 2026. Version 2.0 removes legacy APIs, simplifies model development, introduces enterprise license keys, and provides a clear, automated upgrade path. This upgrade is designed for long-term maintainability and faster developer onboarding.</p></description>
        <content:encoded>
          <![CDATA[ <p><strong>We are pleased to announce we are working on the next major release of Timefold Solver 2.0. This release represents a substantial evolution of the solver, focused on:</strong></p><ul><li><strong>delivering a cleaner API</strong></li><li><strong>improved maintainability</strong></li></ul><h2>What’s coming in Timefold Solver 2.0</h2><h3>1. A streamlined, future-ready API</h3><p>When <a target="_blank" href="https://timefold.ai/blog/optaplanner-fork" rel="noreferrer noopener">Timefold continued OptaPlanner</a>, we kept a number of legacy and deprecated APIs to ensure a smooth transition for early adopters. Today, those legacy constructs limit our ability to innovate.<br /><br />With Solver 2.0, we will remove all deprecated functionality. This will:</p><ul><li>Simplify and modernize the developer experience</li><li>Reduce ambiguity and technical debt</li><li>Unlock future improvements in performance, stability, and usability</li></ul><h3>2. Significant ease of use improvements</h3><p>Over the past year, we’ve introduced several enhancements to reduce complexity and speed up model development, including:</p><ul><li><strong>Custom Shadow Variables</strong> (replacing most custom VariableListener implementations)</li><li><strong>@PlanningListVariable</strong> (now fully equivalent in capability to chained variables)</li></ul><p>Solver 2.0 continues this process by removing:</p><ul><li>Classic VariableListener implementations</li><li>Chained planning variables</li><li>Additional legacy constructs that no longer provide value, many of which have been deprecated for years.</li></ul><p>These changes make Timefold Solver easier to adopt and significantly reduces the learning curve for new engineers.</p>


<section
	class=" rounded-3xl p-8 prop-bg   "
	
	style="background-image: url(); background-size: cover; background-position: center;"
>
	
</section>

<h2>A clear and guided upgrade path</h2><p>To make the transition to Solver 2.0 as smooth as possible, we will provide:</p><ul><li>A <strong>comprehensive migration guide</strong> outlining every required change</li><li><strong>OpenRewrite recipes</strong> to automate the majority of updates</li><li>A <strong>structured plan</strong> for larger changes that cannot be automated</li></ul><p>Our goal is to reduce risk and ensure predictable upgrade timelines for enterprise teams.</p><h2>Long-term support for Timefold Solver 1.x</h2><p>We recognize the importance of stability and predictability in enterprise environments. </p><ul><li><strong>Timefold Solver Enterprise Edition 1.x</strong> will continue to be supported in line with support clauses in contracts and released versions will remain available from our repository.</li><li><strong>Timefold Solver Community Edition 1.x </strong>will be maintained throughout 2026 with quarterly bug-fix releases and security updates.</li></ul><p>This gives organizations ample flexibility in planning their migration window. In the case these timelines would be troublesome for your organization, please reach out to us so we can understand your situation and find alternative solutions.</p><h2>How to start preparing today</h2><p>You can begin preparing your codebase for Solver 2.0 now:</p><ul><li><a target="_blank" href="https://docs.timefold.ai/timefold-solver/latest/upgrading-timefold-solver/upgrade-to-latest-version" rel="noreferrer noopener">Upgrade to the latest 1.x release using our OpenRewrite migration assistance</a></li><li>Remove usage of all deprecated APIs</li><li>Begin migrating larger components if they are used:<ul><li>Custom Variable Listeners → <strong>Declarative Shadow Variables</strong></li><li>@PlanningVariable(type = CHAINED) → <strong>@PlanningListVariable</strong></li></ul></li></ul><p>Proactively adopting these changes will make the final upgrade significantly easier.</p><h2>What’s next</h2><p>Upon release, we will:</p><ul><li>Publish the full list of changes, including details about license key configuration</li><li>Keep the migration guide continuously updated</li></ul><p>Thank you for your partnership and continued trust. We are excited to bring you the next generation of Timefold Solver. If you have any questions, don’t hesitate to reach out to us through your enterprise contact.</p>]]>
        </content:encoded>
		<enclosure url="https://timefold.ai/uploads/images/blog/2025/timefold-solver-2.0.webp" length="0" type="image/webp" />      </item>
    		      <item>
        <title><![CDATA[ You Can’t Opt Out of Decisions ]]></title>
        <link>https://timefold.ai/blog/you-cant-opt-out-of-decisions</link>
        <guid>https://timefold.ai/blog/you-cant-opt-out-of-decisions</guid>
        <pubDate>Thu, 15 Jan 2026 14:53:00 +0100</pubDate>
		<description><p>Every system makes decisions, even when no one is paying attention. This article explores how everyday heuristics quietly shape outcomes, and why optimization is a way to make those decisions intentional, transparent, and defensible.</p></description>
        <content:encoded>
          <![CDATA[ <p>Despite being children of television, internet and smartphones ourselves, my wife and I are extra protective towards our 2 year old son. We’d much rather he play outside or with his toys than watch television. To make sure we stay aligned when television <i>is</i> allowed, we came up with a simple decision diagram.</p><figure class="image"><img style="aspect-ratio:1600/921;" src="https://timefold.ai/uploads/images/blog/2025/decisions-timefold.png" width="1600" height="921" alt="" /></figure><p>Raising a kid turns out to be a never-ending stream of decisions. We don’t have a diagram like this for everything. Being intentional takes time and energy, so we reserve it for the decisions that really matter.</p><p>Parenting isn’t special in that sense. Decisions are everywhere. In a restaurant, someone decides who gets served first. A manager decides who works late. A system decides what comes next in the queue.</p><p>Decisions need to be made all the time. You can’t opt out. Even not deciding is a decision.</p><h2><strong>Decision Heuristics!</strong></h2><p>Making decisions all day is exhausting. So we take shortcuts. We rely on what is called d<i>ecision heuristics, simple</i> rules of thumb that help us move fast without thinking too hard. Most of the time, they show up as “just the way we do things”.</p><p>“<strong>First-come-first-served (FCFS)”</strong> is one of these rules. It <i>feels</i> fair. But is it?</p><p>At a frituur (yes, the Belgian fries place, but replace this with any take-out restaurant), is it reasonable that someone ordering a single pack of fries waits half an hour because the person in front placed a party-sized order?</p><p><strong>First-come-first-served</strong> assumes all requests are equally important. We ignore urgency, impact, or downstream cost. All for the sake of “easier to plan and execute”.</p><p>Another classic default is <strong>alphabetical ordering</strong>. Many of us experienced this in school. If your last name starts with an A, chances are you were often called on first to present your work or to answer questions. This “decision” has lingering effects. Students later in the alphabetical order often<a target="_blank" href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4603146" rel="noreferrer noopener"> receive lower grades</a> and get fewer chances to take the lead, which has a long term impact on their development and job opportunities.</p><p>In some parts of academia, authors are listed in alphabetical order (and not by size of their contribution), which disincentivises people later in the alphabet to co-author, as their name will be swallowed by their arch nemesis: “<i><strong>et al</strong>.”</i></p><p>These are just two decision heuristics. Others include hard-coded priorities in software systems, automatic functions in spreadsheets nobody understands anymore and the king of accidental decisions: <strong>“We’ve always done it this way”.</strong></p><h2><strong>From Accidental to Intentional</strong></h2><p>The real risk of sticking with accidental decisions isn’t that they’re wrong. It’s that they quietly block better options. For some critical decisions, we need to become more <i><strong>intentional. Deliberate.</strong></i> Just starting with planning optimization forces <strong>clarity</strong>. It’s a thinking tool, and with it, you can no longer dodge the hard questions:</p><ul><li><i>What do we want to optimize for?:</i> Employee happiness? Throughput? Endless heaps of $$$?</li><li><i>What constraints do we have?:</i> Availability? Maximum capacity of our warehouses and vehicles?</li><li><i>What trade-offs are we willing to make?: e.g. </i>Do we accept more overtime, if that enables us to give people more days off?</li></ul><p>Simply answering these questions already improves the quality of your decisions.</p><p><i><strong>Second,</strong> a good planning optimization tool unlocks scenarios that are otherwise practically impossible to reason about with pen and paper or a thousand post it notes.</i></p><ul><li>A take-out service optimized for lower average wait time can prevent a single large order from blocking many small orders.</li><li>Work rosters that respect employee preferences (in addition to availability) suddenly become manageable.</li></ul><p>These options often get ignored not because they lack value, but because they’re too hard to reason about.</p><h2><strong>Decision Intelligence, Not Decision Delegation</strong></h2><p>Becoming more intentional doesn’t mean handing decisions over to algorithms. It means refusing to hide behind them.</p><p>The role of a good planning optimization tool isn’t to replace human judgment, but to support it. By making trade-offs visible, constraints explicit, and alternatives comparable, it turns vague instincts into conscious choices.</p><p>Not just delivering a solution, but providing the context needed to question it, adjust it, and ultimately stand behind it.</p><p>Accidental decisions have a kind of gravity. Once in place, they keep pulling everything back to “this is how we do things.”</p><p>Decision intelligence gives us the leverage to push back against that gravity so we can decide deliberately, instead of drifting by default.</p>]]>
        </content:encoded>
		<enclosure url="https://timefold.ai/uploads/images/blog/2025/You-Cant-Opt-Out-of-Decisions.webp" length="0" type="image/webp" />      </item>
      </channel>
</rss>
