Template: Scheduled Maintenance¶
Pre-announce template for planned downtime or planned degradation. Used at four moments: T-7d, T-24h, T-0 (start), maintenance complete.
Approval gate: T-7d notice requires customer-comms-owner draft + leadership sign-off. T-24h, T-0, complete can use the templated send. See
README.md§"Approval workflow".Don't use this template for emergency change windows. If the work is urgent enough that you can't wait 7 days, treat it as an incident and use
incident-acknowledgement.md(severity per the change's customer impact).
T-7d — initial customer notification¶
Send 7 calendar days before the maintenance window opens. Email to all SLA-bound customers; status-page scheduled-maintenance entry; internal Slack reminder.
Public — customer email¶
Subject: [Scheduled maintenance] {MAINTENANCE_TITLE} — {MAINT_DATE_HUMAN}
Hello,
We are scheduling planned maintenance on {CUSTOMER_NAME} that will affect {IMPACTED_SERVICES}.
Window
- Start: {MAINT_START_UTC} ({MAINT_START_LOCAL_HINT})
- End: {MAINT_END_UTC}
- Duration: up to {MAX_DURATION}
Expected impact
{EXPECTED_IMPACT}
Workaround / alternative path during the window
{WORKAROUND_OR_NONE}
Why
{ONE_SENTENCE_REASON}
This window is a planned event under our maintenance terms. No SLA credit applies, and the start time will be re-confirmed 24 hours before the window opens.
If you have questions, reply to this email or contact {SUPPORT_EMAIL}.
Regards,
{CUSTOMER_NAME} Operations
Public — status page (scheduled entry)¶
Title: Scheduled maintenance — {MAINTENANCE_TITLE}
Window: {MAINT_START_UTC} → {MAINT_END_UTC} ({MAX_DURATION})
Impact: {EXPECTED_IMPACT_ONELINER}
Workaround: {WORKAROUND_OR_NONE_ONELINER}
We will post additional updates 24 hours before the window opens, at start, and at completion.
Internal — Slack reminder¶
:calendar: Scheduled maintenance set: {MAINTENANCE_TITLE}
- window: {MAINT_START_UTC} → {MAINT_END_UTC}
- runbook: {RUNBOOK_LINK}
- exec by: {ENGINEER}
- t-7d notice: sent {TIMESTAMP_UTC}
- next reminder: t-24h
T-24h — final reminder¶
Sent 24 hours before the window. Same audiences. Subject reuses the T-7d ID so threads stay connected.
Public — customer email¶
Subject: [Reminder — scheduled maintenance] {MAINTENANCE_TITLE} — starts {MAINT_START_UTC}
Hello,
This is a 24-hour reminder of the scheduled maintenance previously communicated for {IMPACTED_SERVICES}.
Window
- Start: {MAINT_START_UTC}
- End: {MAINT_END_UTC}
- Duration: up to {MAX_DURATION}
No changes have been made to the original window. The expected impact and workaround communicated at T-7d remain in effect.
Live updates will be posted to {STATUS_PAGE_URL} at maintenance start and completion.
Regards,
{CUSTOMER_NAME} Operations
If the window has changed (later start, longer duration, expanded scope), don't use this template — send a fresh T-7d-style notification with the changes called out and the previous window superseded.
Internal — Slack reminder¶
:bell: t-24h reminder: {MAINTENANCE_TITLE}
- window opens in 24h: {MAINT_START_UTC}
- exec by: {ENGINEER} (confirmed availability)
- runbook: {RUNBOOK_LINK}
- rollback plan documented: yes/no
T-0 — maintenance start¶
Posted at the moment the window opens. Status-page only — no email at this stage.
Public — status page¶
Title: Maintenance in progress — {MAINTENANCE_TITLE}
Status: in progress
Started: {TIMESTAMP_UTC}
Expected end: {MAINT_END_UTC}
Impact: {EXPECTED_IMPACT}
We will post the next update at maintenance complete.
Internal — Slack thread¶
:hammer_and_wrench: maintenance start: {MAINTENANCE_TITLE}
- started: {TIMESTAMP_UTC}
- exec: {ENGINEER}
- bridge: {VIDEO_BRIDGE_URL_OR_NONE}
- runbook step 1 in progress
Maintenance complete¶
Posted within 15 minutes of the engineer confirming the work is verified and traffic is back to baseline.
Public — status page¶
Title: Maintenance complete — {MAINTENANCE_TITLE}
Status: completed
Started: {TIMESTAMP_START}
Completed: {TIMESTAMP_END}
Duration: {ACTUAL_DURATION}
Impact during window: {ACTUAL_IMPACT}
All affected services have returned to normal operation. If you experience any issues that started during or shortly after the window, please contact {SUPPORT_EMAIL}.
If the window overran the planned end time, name it explicitly: "The window ran {OVERRUN_MINUTES} minutes longer than planned." Don't bury it.
Public — customer email (post-maintenance)¶
Send only if the window overran, the impact was greater than communicated at T-7d, or an SLA-bound customer requested a maintenance-completion notification.
Subject: [Maintenance complete] {MAINTENANCE_TITLE}
Hello,
The scheduled maintenance for {IMPACTED_SERVICES} has been completed.
- Started: {TIMESTAMP_START}
- Completed: {TIMESTAMP_END}
- Duration: {ACTUAL_DURATION}
{IF_OVERRUN_OR_OVER_IMPACT_NOTE}
If you experience any unexpected behavior, please contact {SUPPORT_EMAIL}.
Regards,
{CUSTOMER_NAME} Operations
Internal — Slack thread¶
:white_check_mark: maintenance complete: {MAINTENANCE_TITLE}
- duration: {ACTUAL_DURATION} (planned: up to {MAX_DURATION})
- runbook executed clean: yes/no
- rollback used: yes/no
- followups: {FOLLOWUP_TICKETS_OR_NONE}
Variables to fill¶
| Variable | Notes |
|---|---|
{MAINTENANCE_TITLE} |
Short, customer-language. "Database upgrade", "WebSocket gateway scale-out", "Certificate rotation". |
{MAINT_START_UTC} / {MAINT_END_UTC} |
ISO 8601 UTC. Always include UTC in the email; you may include a local-time hint. |
{MAINT_START_LOCAL_HINT} |
Customer-friendly local-time hint. Optional; use only if the customer is single-region. |
{MAX_DURATION} |
Worst-case duration; keep generous. "Up to 30 minutes." |
{ACTUAL_DURATION} |
Filled in at completion. |
{EXPECTED_IMPACT} |
What customers will notice. "Sign-in unavailable for up to 5 minutes." "Live game broadcasts may briefly disconnect; existing sessions are preserved." |
{WORKAROUND_OR_NONE} |
"No workaround required" or a specific alternative. Don't make one up — confirm with engineering. |
{ONE_SENTENCE_REASON} |
"To upgrade our database to a newer version that improves reliability." Customer language. |
{ENGINEER} |
Person executing the work; named in internal Slack only, never in public messages. |
{RUNBOOK_LINK} |
Link to the engineering runbook for the work. Internal only. |
{IF_OVERRUN_OR_OVER_IMPACT_NOTE} |
If applicable: "The window ran {OVERRUN_MINUTES} minutes longer than initially communicated due to {ONE_SENTENCE_REASON}." |
Cross-references¶
README.md— decision tree, approval workflow (note: maintenance has its own approval flow at T-7d)../oncall-runbook.md— what to do if maintenance becomes an incident mid-windowservice-degradation.md— for unplanned partial degradation (the inverse of planned maintenance)