What's in this article
- At a glance
- Why customers get confused (and how to think about it)
- Is schedule generation right for my team?
- Scheduling rules: the foundation
- Event rule nuances worth knowing
- Schedule generation: how automation works
- The generation dashboard
- Schedule assistant: optimize what you already have
- Before you run: sanity checks
- Results that look wrong (but aren't)
- Troubleshooting
- Known limitations
- Permissions and availability
- Still seeing unexpected results?
At a glance
Scheduling rules are the policies that define what a valid schedule looks like: when people can work, how long they can work, what breaks and meetings they need, and (optionally) what kind of productive work they should do.
Schedule generation is the automation that builds or updates schedules using those rules, plus your forecast and existing schedule data.
Think of it this way:
| Layer | What it is | Where you manage it |
|---|---|---|
| Scheduling rules | Your requirements and guardrails | Configure → Scheduling rules |
| Schedule generation | Automated schedule building | Schedule → Schedule generation |
| Schedule assistant | On-demand optimization on the timeline | Staffing timeline → Schedule assistant |
Why customers get confused (and how to think about it)
1. "Rules" and "generation" sound like the same thing
They are related but different:
- Rules = what should be true (policies, labor requirements, availability)
- Generation = what Assembled does with those rules to create or fix a schedule
Rules are used in two ways:
- Validation — flag broken rules on the Staffing timeline (orange highlights)
- Generation — use rules as inputs when building schedules automatically
2. There are multiple automation tools, not just one
| Tool | Best for | Time range | Output |
|---|---|---|---|
| Schedule generation dashboard | Building full schedules ahead of time | Configured intervals (week / 4 weeks / month), up to 16 intervals ahead | Events placed on a destination schedule |
| Schedule assistant | Optimizing an existing schedule (today, this week, ad hoc) | Up to 31 days | Updates applied directly to the schedule you're viewing |
The legacy Event optimizations feature is being retired in favor of the schedule assistant.
3. Not every rule type is required for generation
| Rule type | Required for generation? | Role |
|---|---|---|
| Working hours | Yes (for anyone who should get a shift) | Defines when someone can be scheduled |
| Event | Yes (for each non-productive event you want placed) | Defines breaks, meals, meetings, training, etc. |
| Shift | Recommended | Defines shift constraints (length, rest, consecutive days, etc.) |
| Productive work | Optional | Guides which productive work types to assign; without these, Assembled uses forecast + agent qualifications |
4. A rule only applies if it's assigned
Creating a rule is not enough. The rule must be assigned to the right people (or groups) for the right time period. If someone isn't assigned to an event rule, generation won't schedule that event for them — and validation won't check for it either.
5. Some rules are for generation only
Custom date range event rules are used when you want a one-off event placed (e.g., a team meeting sometime in the next 5 days). These are used by the schedule assistant and generation flows, but they are not used to validate your existing schedule. Review the result manually after generation.
Is schedule generation right for my team?
Schedule generation works best for larger teams where manually placing events would be time-consuming and where staffing patterns are complex enough to benefit from optimization. The generator optimizes toward a coverage goal — not a specific output. The more you need to control exactly what gets scheduled and when, the less value generation provides.
It may be less suitable if:
- Your team is small and schedules are largely pre-agreed
- You have many per-agent variables that can't be expressed as shared rules
- You want to dictate a precise output (e.g., "schedule exactly X agents on phones at 10am")
A hybrid approach is totally valid — you can use generation for some event types and manage others manually.
Scheduling rules: the foundation
What scheduling rules do
Scheduling rules act as a safety net for your schedule. They help you:
- Follow labor laws — required breaks, rest periods, max hours
- Enforce company policy — consistent shift patterns across teams and sites
- Catch problems early — broken rules are flagged on the Staffing timeline
- Power automation — generation uses the same rules as validation
When a rule is broken, you'll see an orange highlight and warning icon on that agent's row on the Staffing timeline.
The four rule types
When you create a rule (Configure → Scheduling rules → Add rule → Create manually), you choose what you want to manage:
Working hours — "Decide when people can be scheduled"
Defines when each person is available to work — the foundation for everything else. Examples: Mon–Fri, 9:00 AM–5:00 PM PT; rotating patterns across multiple weeks.
Working hours appear as outlined boxes on the Staffing timeline. Every person who should be auto-scheduled needs working hours assigned. You can create working hours manually or upload a CSV (Add rule → Upload working hours).
Shift rules — "Define how much people can work"
Defines constraints on shifts themselves:
- Working time: shift length, max consecutive working days, hours per week, allowed work times, shift timing
- Rest time: minimum time between shifts, total rest in a period, rest after consecutive working days
Some shift constraints (shift timing, consistent start times, allowed work times) are used specifically for shift/working-hours generation, not just validation.
Event rules — "Control breaks, meetings, tasks, or training"
Defines non-productive events that must happen during a shift:
- Duration (fixed or a range, e.g., 30–45 minute lunch)
- Timing (beginning of shift, every X hours, between specific times, relative to another event)
- Recurrence (every shift, weekly, monthly, or custom date range)
- Conditions (optional): only apply if the shift meets criteria (e.g., "only if shift is longer than 9 hours")
- Overlap policy: whether the same event must be scheduled at the same time across people (synchronous), cannot overlap (disallowed), or can be flexible (allowed)
Productive work rules — "Choose what people do during their shift"
Optional. Guides which productive event types someone should work on, based on channel, queue, skill, or other attributes. If you don't configure these, generation uses your forecast and each person's eligible channels/queues/skills to place productive work.
⚠️ The Productive Work rule type is not enabled by default. If you don't see it in your rule creation options, reach out to Assembled support to have it turned on for your account.
Assigning rules
For each rule, assign who it applies to:
- Specific people, or
- Groups sharing attributes: team, site, queue, channel, or skill
You can set start and end dates per assignment group, so rules can change over time (e.g., a new shift pattern starting next month).
Important: Overlapping working hours rules for the same person will conflict. Only one working hours rule applies at a time during generation. Use the By person view on the Scheduling rules page to find and resolve conflicts.
Managing rules
On Configure → Scheduling rules:
| View | Use it to... |
|---|---|
| By rule | Find duplicates, review all rules of a type, check recent changes |
| By person | Verify each person has the right rules, find missing working hours, resolve conflicts |
Filter by rule type, team, site, channel, queue, skill, and date range.
Event rule nuances worth knowing
Exact time constraints block Schedule Requests
If a rule is set to trigger at an exact time (e.g., "at 1:30pm"), that constraint locks the event in place. It also prevents agents from submitting Schedule Requests to move it. If you need both a default time and agent flexibility, you have two options:
- Use a recurring event: Add the event directly to the schedule at the desired time, then remove the hard time constraint from the rule. The agent defaults to that time but can still submit requests to adjust it.
- Switch to a time window: Replace the exact time with a flexible window (e.g., 12:00–2:30pm). The generator works within that range while still honoring the intent.
"Before or after" timing is less predictable than "before" or "after"
If an event isn't landing where you expect relative to a break, try setting the timing condition to "after" rather than "before or after." The more specific direction produces more consistent results.
If you set 0.00 hours in a timing constraint, you may not be able to edit that field. Use 0.1 hours as a workaround.
"During custom date range" rules only fire via Schedule Assistant
These rules are not applied during standard Schedule Generation dashboard runs. If you want an event included in a regular generation run, set the recurrence to "every week" or "every month" instead. Custom date range is best for one-off placements.
Weekly event rules require a full calendar week in the date range
A "weekly" rule won't fire unless the date range includes at least one complete calendar week (Sunday through Saturday for most accounts, or whatever your configured week start is). A 7-day range that spans Thursday→Wednesday won't trigger the rule — even though it covers 7 days.
Fix: Adjust your date range to include a full Sun→Sat week, or switch the rule to "During custom date range" to fire regardless of week boundaries.
Productive work: time-of-day constraints aren't supported
If a channel has operating hours (e.g., Chat closes at 5pm), you can restrict when a default event is placed using Scheduling Rules → Constraints. However, time-of-day cutoffs are not currently supported for productive events. Productive event rules cover eligibility and time limits only — not operating hours windows.
Breaks clumping together?
Instead of one rule for "2 breaks per shift, any time," split into two separate rules:
- Break 1: 1 time per shift, must occur at least 1 hour after shift start / before the meal
- Break 2: 1 time per shift, must occur at least 1 hour after the meal
You can also add a constraint that each break must occur at least 30 minutes before or after any other break event.
Schedule generation: how automation works
What gets generated
Schedule generation uses:
- Your scheduling rules (working hours, events, shifts, productive work)
- Your forecast (required staffing by channel/queue)
- Existing schedule data (current events, time off, manual placements)
- Agent attributes (channels, queues, skills)
The result is a schedule that follows your policies while trying to meet coverage needs.
Core generator principles
Minimal disruption. The generator moves as few events as possible. It only displaces an event if doing so meaningfully improves coverage.
Manually placed events are never moved. Any event a user has manually created or edited is locked in place. If a manually placed event already satisfies a rule, the generator won't add another one — even if there's a theoretically better placement available.
No over-optimization. If net staffing for a queue is already positive (in the green), the generator won't try to improve it further. This is a common reason events appear "unmoved" after a run.
Aggregate view only. The generator always evaluates the unfiltered, aggregate view of all channel queues — not a filtered view by site, team, or specific queue. Keep this in mind when debugging unexpected results.
Agent eligibility is respected. The generator will never assign an agent a productive event type they're ineligible to work.
Time off is handled last. The generator first optimizes for agents without time off, then places events for agents with time off — assuming they would optimally help coverage if the time off were removed.
How rules and generation connect
Rules are the single source of truth. Whether Assembled is checking a schedule or building one, it reads from the same rule set (except custom date range rules, which are generation-only).
SCHEDULING RULES
Working hours → When can this person work?
Shift rules → How long / how much rest?
Event rules → What breaks/meetings are required?
Productive → What work should they do? (optional)
|
┌───────────────┼───────────────┐
▼ ▼ ▼
Validation Dashboard Assistant
(timeline) generation (timeline)
└───────────────┴───────────────┘
▼
Staffing timeline
(your schedule)
The generation dashboard
Go to Schedule → Schedule generation.
The dashboard shows a grid of time intervals (based on your configuration). Depending on your account's features, you may see up to three types of generation:
Events — Places productive work, breaks, meals, and other events onto a destination schedule (a non-live/test schedule). This is the main "build my schedule" action.
- Select a time period → Create schedule
- Review on the Staffing timeline → publish when ready
Manual events are preserved. Generation replaces automated events but keeps: time off, recurring events, Google Calendar events, and events you created or edited manually.
Working hours — Generates shift patterns from working hours and shift rules for a time period. Review the results, then publish working hours to your team before generating events.
Shift plans — (Newer workflow, when enabled.) Lets you create shift plans for assigned and unassigned coverage needs, then assign those shifts to people.
Configuring the dashboard
Select Configure → Generation dashboard (or Automation settings) to set:
| Setting | What it controls |
|---|---|
| Destination schedule | Where generated event schedules are saved (non-live schedules only) |
| Interval | Week, 4 weeks, or month |
| Time zone | Time zone used for generation intervals |
| Range | How many intervals ahead to show (4–16) |
Recommended setup order
- Create working hours for everyone who needs to be scheduled
- Create event rules for breaks, meals, meetings, and other required events — and assign them
- Create shift rules for labor constraints (shift length, rest, consecutive days)
- (Optional) Create productive work rules if you need fine-grained control over work type placement
- Configure the generation dashboard
- Generate working hours / shift plans (if using that workflow)
- Generate events
- Review, edit manually, regenerate if needed, then publish
Schedule assistant: optimize what you already have
The schedule assistant lives on the Staffing timeline and is best for shorter-term, targeted changes — not building a full schedule months ahead.
When to use it
- Add or reposition breaks and meals to improve coverage
- Fix schedules where manual edits broke scheduling rules
- Respond to a volume change for the rest of today
- Place a one-off event (training, team meeting) across multiple people
How it works (3 steps)
- Who and what — Select people, date range (up to 31 days), and which events to include (All, Default, Productive, or Specific events)
- How to build shifts — Choose whether to use working hours or existing events on the schedule
- Review and run — Confirm what will change, then update the schedule
Shift creation options
| Option | Behavior |
|---|---|
| Use working hours | Creates shifts from each person's working hours. People without working hours are skipped. |
| Use existing events | Uses current shift start/end times. Falls back to working hours for unscheduled people. |
| Use existing events, then working hours | Same as above, for a mix of scheduled and unscheduled people. |
What the assistant changes (and what it doesn't)
Will change:
- Productive events (placed to improve forecast coverage)
- Default events like breaks and meals (if the person is assigned to the matching rule)
- Events governed by custom date range rules (one-off placements)
Will not change:
- Time off
- Recurring events
- Google Calendar events
- Manually placed or edited events
Updating today's schedule
If the date range includes today:
- The next 5 minutes are preserved (so you can notify agents)
- In-progress productive events may be adjusted
- Breaks that haven't started yet may move; in-progress breaks will not
Test schedules
Use a test schedule when experimenting. You can either improve the existing test schedule or reset it from the default schedule (to pick up latest time off and calendar events). Publish to the default schedule when you're satisfied.
Before you run: sanity checks
Before generating — or before troubleshooting unexpected results — confirm:
- Do agents have the expected rules? Use the By person view on the Scheduling rules page to verify each agent has the right rules assigned.
- Do agents have working hours assigned? Events can only be placed within an agent's working hours window.
- Do agents have channels and queues assigned? Agents must have the appropriate channel and queue assignments to be eligible for productive event types.
Results that look wrong (but aren't)
"My phone block looks longer than my rule allows"
Expected behavior. If your rule sets a maximum of 2.5 hours per phone event, the generator may create two separate 2.5-hour phone blocks around a break. At the end of the run, a cleanup step merges adjacent productive events into a single block — so what looks like a 5.25-hour phone shift in the compressed view is actually two 2.5-hour events separated by a break.
To see the true structure, use the Layers view on the Staffing Timeline. This shows each event as a separate block, making the breaks between productive events visible.
Troubleshooting
My generated schedule is blank
- Missing working hours — Go to Scheduling rules → By person. Anyone without working hours won't be scheduled. Add and assign working hours, then regenerate.
- Wrong destination schedule — Open Configure → Generation dashboard and confirm the destination schedule matches the one you're viewing on the timeline.
- No agents in scope — Confirm the people you expect are active for the generation date range.
Events are missing for some people
- They may not be assigned to the event rule. Check assignments on the Scheduling rules page.
- The schedule assistant will warn you: "Some of the selected people aren't assigned to these rules, so we won't schedule events for them."
- If you selected Default events but no default event rules exist, you'll see: "We couldn't find any default events with associated scheduling rules."
Working hours are being ignored
- Conflicting working hours rules — Only one applies at a time. Go to Scheduling rules → By person, find the conflict warning, and resolve it.
- Assignment date ranges — A rule may not be active for the period you're generating.
"0 schedules were updated"
A few things can cause this:
- Agents already have manual events that satisfy the rule. The generator won't add or move anything if a manually placed event already covers what the rule requires.
- Net staffing is already positive. The generator won't optimize if a queue is already adequately covered.
- Weekly rules weren't triggered. The date range doesn't include a full calendar week — see the weekly rules section above.
Rules aren't being followed correctly
- Conflicting rules — Two rules may require incompatible things (e.g., 2 breaks vs. 3 breaks). Review conflicts on the By person view.
- Rule setup error — Double-check duration, timing constraints, and conditions. Conditions apply to whether the rule applies at all; timing within a shift is a constraint, not a condition.
- Recurrence vs. time range — A weekly event won't be placed if you only optimize a 3-day window (see weekly rules section above).
My weekly event rule isn't generating
Weekly rules require the date range to include at least one complete calendar week (Sunday through Saturday, or your account's configured week start). A 7-day range spanning Thursday→Wednesday won't trigger it — even though it's 7 days.
Fix: Adjust your date range to include a full Sun→Sat week, or switch the rule to "During custom date range" to fire regardless of week boundaries.
Generation is slow or stuck
Generation can take several minutes for large teams. You can leave the page and return. Use the status indicators on the generation dashboard, or cancel and retry if needed.
Known limitations
- Time-of-day cutoffs for productive events are not currently supported. You can restrict when default events are placed, but productive event scheduling doesn't support operating hours windows.
- Highly individualized shift start times across many agents with no natural groupings are difficult to express as shared rules. This is a common challenge for teams with diverse timezone setups or per-agent schedules.
- Conditional logic (e.g., "schedule 1 hour of project time, but only 30 minutes if a meeting is also scheduled that day") isn't fully expressible in the current rules engine.
- Splitting a single event type across a shift (e.g., one block before break, one after) requires two separate rules with timing constraints — this adds complexity and may not always produce the exact desired result.
Permissions and availability
| Feature | Typical access |
|---|---|
| Scheduling rules | Admins (configurable via Roles and permissions → Configure → Scheduling rules) |
| Schedule generation dashboard | Requires the schedule_generation feature |
| Schedule assistant | Requires staffing generation permissions (staffing.generations) |
| Working hours / shift plans | Additional feature flags may apply |
| Productive Work rule type | Not enabled by default — contact support to enable |
If you don't see these features, contact your Assembled account team or support@assembledhq.com.
Still seeing unexpected results?
If you've worked through the troubleshooting steps above and results still don't look right, reach out to Assembled support with:
- The specific agent name(s) and date range where you're seeing the issue
- A description of the rule you expect to apply
- Screenshots of the rule configuration and the resulting schedule
This gives the support team what they need to investigate quickly.
Comments
0 comments
Article is closed for comments.