Outages

When SOASAP Cloud or the synchronization path is unavailable, SDK evaluation continues from the last known local snapshot while configuration updates remain delayed.

Introduction

SOASAP separates local feature flag evaluation from remote configuration delivery. A control-plane or network outage does not automatically stop flag evaluation inside a running application.

When synchronization becomes unavailable:

  • the SDK retains its current in-memory snapshot
  • existing flags continue evaluating locally
  • application requests do not wait for SOASAP Cloud
  • dashboard changes stop propagating temporarily
  • background reconnection continues
Availability vs freshness. An outage primarily affects configuration freshness. It does not necessarily affect the availability of the application evaluation path.

Application behavior during an outage depends on:

  • whether a valid snapshot exists
  • whether persistent cache is available after restart
  • which explicit defaults are defined
  • how long stale flag values remain operationally safe

For the architectural model behind this behavior, see High Availability and Offline Operation.

What counts as an outage?

An outage can occur in several parts of the synchronization path. Scenarios may look similar from the SDK perspective, but they can require different operator responses.

SOASAP Cloud outage

The SOASAP control plane is temporarily unavailable.

Network outage

The application cannot reach SOASAP Cloud because of routing, firewall, proxy, or Internet connectivity problems.

DNS failure

The application cannot resolve the SOASAP endpoint.

TLS or connection failure

A secure connection cannot be established.

SSE disconnection

The real-time synchronization connection is interrupted. See SSE Disconnected.

Regional or cluster isolation

Only part of the application fleet loses connectivity.

Credential failure

An invalid, expired, revoked, or incorrectly configured API key prevents synchronization. See Invalid API Key.

Behavior during an outage

While the application process remains running and a snapshot exists:

  • evaluations continue from memory
  • evaluation latency remains unchanged
  • no remote request is introduced into the evaluation path
  • existing flag values remain stable
  • new dashboard changes are delayed
  • defaults are not substituted for valid snapshot values

The last known snapshot becomes temporarily frozen.

What continues to work

During an outage, the following remain available when a valid local snapshot exists:

  • Boolean flag evaluation — on/off reads from the frozen snapshot
  • String flag evaluation — variants and mode strings remain readable
  • Number flag evaluation — limits, timeouts, and thresholds remain readable
  • JSON flag evaluation — structured configuration remains available in memory
  • Local in-memory lookups — O(1) evaluation with no network I/O
  • Existing environment-specific values — previously synchronized environment state remains usable
  • Code-defined defaults — fill gaps for missing or invalid values
  • Application request handling — request paths are not blocked on SOASAP connectivity
  • Previously loaded kill switches — retain their last synchronized value
  • Cached snapshot restoration — after restart, where supported

What is delayed or unavailable

The following depend on a functioning synchronization path:

  • newly created flags
  • updated flag values
  • deleted flag state
  • dashboard-driven kill-switch changes
  • environment changes
  • API key changes
  • configuration propagation
  • first synchronization for a new application instance without cache
  • confirmation that every application instance has received the latest snapshot

Reads from the existing snapshot continue. Changes to the snapshot are delayed.

Configuration freshness during an outage

During normal operation:

During an outage:

Snapshot age is the amount of time since the SDK last received a valid synchronized configuration. It is an operational signal: a larger snapshot age does not necessarily mean evaluation has failed. It means the application may be using increasingly stale configuration.

Operational practice. Define acceptable stale duration for important flags. Snapshot age alerts should be tuned to those thresholds, not treated as immediate application failures.

Frozen-flag behavior

A frozen flag is a flag whose local value cannot change because synchronization is unavailable. Teams should identify how each important flag should behave if frozen for several minutes, several hours, an entire business day, or an extended regional incident.

Release flags

Often safe to remain at the last known value temporarily.

Kill switches

May be unsafe if operators need to change them during the outage. Critical kill switches should:

  • be created before dependent code is deployed
  • have explicit safe defaults
  • be tested in both enabled and disabled states

Operational configuration

May become unsafe when stale. Examples include rate limits, queue controls, integration endpoints, maintenance modes, and workload throttles.

Experiment flags

Usually lower operational risk, but may produce inconsistent exposure across instances during partial outages.

Document for important flags:

  • flag owner
  • purpose
  • safe default
  • acceptable stale duration
  • outage behavior
  • rollback path
  • removal date where applicable

Running process vs process restart

A running-process outage and a restart-during-outage are different failure scenarios and must both be tested.

Running process during an outage

The process continues using the last synchronized snapshot.

Restart with persistent cache

Persistent cache allows the SDK to recover the last persisted snapshot without waiting for the network. See Persistent Cache and Cache Strategy.

Restart without persistent cache

Only code-defined defaults are available until synchronization succeeds. See Cache Not Restored.

First deployment during an outage

A newly deployed application instance may have no in-memory snapshot, no persistent cache, and no previous successful synchronization.

In this state the instance can still start, but flag-dependent behavior is limited to code defaults until the first successful sync. Operational implications:

  • use explicit defaults for every evaluation
  • avoid deploying completely new flag-dependent behavior during a control-plane incident
  • ensure critical flags are synchronized before deploying dependent code
  • verify cache persistence across replacement instances where applicable

See Non-Blocking Startup and Default Values.

Partial outages

Not every outage affects the entire application fleet. Examples include one pod losing outbound connectivity, one availability zone with DNS issues, one region unable to reach SOASAP Cloud, a proxy affecting only part of the fleet, or some instances reconnecting before others.

Different instances may temporarily evaluate different snapshot versions. This is eventual convergence, not strong consistency. After connectivity returns, instances synchronize toward the latest available state. Monitor synchronization by instance, region, cluster, or deployment group. See Scaling.

Outage detection

Detect outages through synchronization observability rather than application failures alone.

Recommended signals:

  • SSE connection state
  • duration of the current disconnection
  • timestamp of last successful synchronization
  • snapshot age
  • reconnect attempts
  • authentication errors
  • DNS or TLS failures
  • cache restoration failures
  • evaluations using code defaults
  • snapshot version where exposed
  • percentage of disconnected instances
  • regional synchronization differences
Do not conflate signals. A healthy application request rate does not prove configuration is current. A disconnected SSE stream does not necessarily mean the application is unavailable.

Health check behavior

SOASAP connectivity should normally be monitored separately from application liveness.

Liveness

Should indicate whether the application process is functioning. A synchronization outage should not usually make liveness fail.

Readiness

Should indicate whether the application can safely serve traffic. When a valid snapshot or safe defaults exist, temporary disconnection should not automatically make the application unready.

Diagnostic health

Should expose SOASAP synchronization status separately. Suggested states:

  • synchronized
  • reconnecting
  • offline with snapshot
  • offline without snapshot
  • authentication failed
  • cache restore failed
  • stale beyond configured threshold

Applications with strict freshness requirements may choose stricter readiness rules, but this is an application-level policy.

Incident response

Use a practical response sequence during a synchronization outage.

Step 1: Confirm the scope

Determine:

  • whether the issue affects SOASAP Cloud, networking, credentials, DNS, or SSE
  • whether all instances are affected
  • which environments are affected
  • when the last successful synchronization occurred

Step 2: Confirm evaluation continuity

Verify:

  • application requests continue
  • existing flags are evaluated
  • no request-time network dependency has appeared
  • fallback-to-default rates are not unexpectedly increasing

Step 3: Identify frozen critical flags

Review:

  • kill switches
  • operational controls
  • incident-related flags
  • flags with short acceptable stale durations

Step 4: Avoid risky configuration assumptions

Do not assume dashboard changes have reached disconnected instances. Do not treat a successful dashboard update as proof of fleet-wide propagation. See Flag Not Updating.

Step 5: Protect the application

Use application-level mitigations when necessary:

  • traffic reduction
  • deployment rollback
  • disabling dependent jobs through existing controls
  • isolating affected regions
  • reverting application code
  • using infrastructure-level controls

Step 6: Monitor recovery

Track:

  • reconnect progress
  • last synchronization timestamps
  • snapshot convergence
  • authentication errors
  • regional recovery

Step 7: Verify configuration after recovery

Confirm that intended values reached all relevant application instances.

Rollbacks during an outage

A dashboard rollback cannot reach an SDK that remains disconnected. Operators should not rely exclusively on remote flag changes during a synchronization outage.

Fallback rollback paths include:

  • application deployment rollback
  • infrastructure traffic controls
  • disabling workloads outside SOASAP
  • queue pausing
  • external integration shutdown
  • database or service-level controls
  • regional failover

Once synchronization returns, dashboard changes can propagate normally. Document both flag-based rollback and non-flag rollback for critical production features.

Kill switches during outages

A kill switch only provides remote operational control while configuration updates can reach the SDK.

During an outage:

  • an already synchronized kill switch retains its last value
  • changing it in the dashboard may not affect disconnected instances
  • a newly created kill switch cannot protect instances that have never received it
  • an explicit default applies only when no valid snapshot value exists

Recommend:

  • create kill switches before deploying risky functionality
  • default critical kill switches to the safest code behavior
  • test kill switches before production rollout
  • maintain a non-SOASAP emergency rollback path
  • document how long the current value may safely remain frozen

See Production Safety.

Reconnection and recovery

Recovery should not require application restart, SDK recreation, manual cache deletion, or request-handler changes. See Real-Time Synchronization.

After reconnection:

  • the SDK refreshes its local state
  • subsequent evaluations use the updated snapshot
  • different instances may recover at different times
  • operators should verify fleet convergence

Post-recovery validation

Service recovery is not complete until configuration state has been validated across the relevant fleet.

  • SSE connections have recovered
  • Snapshot age has returned to normal
  • Authentication errors have cleared
  • Intended dashboard changes have propagated
  • Critical flags have the expected values
  • All regions and instances have converged
  • Default fallback rates are normal
  • Cache persistence is functioning
  • No temporary mitigation remains active unintentionally
  • Application metrics have returned to baseline

Failure-scenario table

Scenario Evaluation Behavior Configuration Freshness Restart Behavior Recommended Operator Action
SOASAP Cloud outage Continues from last in-memory snapshot Stops advancing until recovery Unaffected while process stays up Monitor snapshot age; prepare non-flag mitigations
Temporary SSE disconnect Continues from last snapshot Temporarily stale Unaffected Confirm auto-reconnect; avoid treating as app failure
Application network loss Continues locally while process remains up Unavailable on the affected path Unaffected until restart Restore outbound connectivity; check regional scope
DNS failure Continues from last snapshot Paused while resolution fails Unaffected until restart Fix DNS/resolvers; verify endpoint resolution
TLS failure Continues from last snapshot Paused while handshake fails Unaffected until restart Inspect certificates, TLS policy, and proxies
Invalid or revoked API key Uses existing snapshot if present; otherwise defaults Blocked by authentication Same constraints after restart Rotate/replace key; distinguish from transient network loss
Running process with valid snapshot Local evaluation continues Frozen at last sync N/A Track frozen critical flags; wait for reconnect
Process restart with persistent cache Restores persisted snapshot May still be stale Flags available before network sync Verify cache restore metrics and background reconnect
Process restart without persistent cache Code-defined defaults only No snapshot until first sync Ready without waiting if defaults are safe Confirm safe defaults; restore network or enable cache
First deployment with no snapshot Defaults until first successful sync Depends on first connect Same as no-cache startup Avoid new flag-dependent deploys during the incident
Partial regional outage Varies by instance connectivity Mixed snapshot versions possible Per-instance cache behavior Monitor by region/cluster; expect eventual convergence
Cache corruption Falls back to defaults until sync Requires successful network sync Restart may lose restored state Investigate storage integrity; see Cache Not Restored
Cache write failure In-memory evaluation unaffected while process lives Sync may continue Restart resilience reduced Alert on write failures; fix disk/permissions
Prolonged outage with stale operational flag Continues with frozen operational value Increasingly stale Depends on cache availability Use non-flag rollback; reassess acceptable stale duration

Testing outage behavior

Validate failure behavior in staging before production incidents expose gaps.

Test 1: Block outbound SOASAP traffic

Verify:

  • evaluations continue
  • application requests remain healthy
  • synchronization status becomes degraded
  • reconnect attempts are observable

Test 2: Disconnect SSE only

Verify:

  • the snapshot remains active
  • evaluation latency does not change
  • reconnection occurs automatically

Test 3: Restart with network blocked and cache present

Verify:

  • the snapshot restores successfully
  • the application becomes ready
  • values remain available without synchronization

Test 4: Restart with network blocked and no cache

Verify:

  • explicit defaults are used
  • startup does not block indefinitely
  • health status clearly reports the missing snapshot

Test 5: Change a flag while an instance is offline

Verify:

  • connected instances receive the change
  • the disconnected instance retains its previous value
  • the disconnected instance converges after recovery

Test 6: Simulate an extended outage

Verify:

  • frozen critical flags remain safe
  • monitoring alerts at the expected threshold
  • operators can follow documented rollback paths

Test 7: Invalidate an API key

Verify:

  • authentication failure is distinguishable from temporary network loss
  • evaluation continues from the existing snapshot
  • operators can identify and correct the credential issue

Common misconceptions

"If SOASAP Cloud is down, application flag reads stop."

False. Existing values continue evaluating from the local snapshot.

"Defaults replace all values during an outage."

False. Valid snapshot values remain active. Defaults apply when no valid synchronized value exists.

"A dashboard change is an immediate rollback during every outage."

False. Disconnected SDKs cannot receive the update until connectivity returns.

"An SSE disconnect means the application is down."

False. It normally means configuration freshness is degraded.

"Every application instance will hold the same value throughout a partial outage."

False. Instances may temporarily use different snapshot versions.

"Persistent cache guarantees the latest configuration."

False. It restores the latest successfully persisted snapshot, which may be stale.

"Recovery is complete as soon as SOASAP Cloud is reachable."

False. Operators should verify reconnection and configuration convergence across the fleet.

Production recommendations

  • Monitor SSE disconnection duration — duration exposes lasting freshness degradation better than a transient disconnect count alone.
  • Monitor time since last successful synchronization — this is the primary signal for configuration staleness.
  • Define acceptable stale duration for critical flags — different flags have different operational risk when frozen.
  • Use explicit defaults for every evaluation — defaults protect startup and missing-value scenarios.
  • Enable persistent cache where supported — protects restarts during an outage.
  • Create kill switches before deploying dependent features — unsynchronized controls cannot protect disconnected instances.
  • Maintain non-flag rollback paths — dashboard changes may not propagate during an outage.
  • Test partial and full outages in staging — fleet-wide failure is not the only relevant scenario.
  • Monitor synchronization separately from application uptime — availability and freshness are different properties.
  • Verify convergence after recovery — individual instances may reconnect at different times.

Outage runbook template

Copy the following into an internal runbook and fill it during an incident.

Incident:
Affected environment:
Affected regions or clusters:
Start time:
Last successful synchronization:
Current snapshot age:
Percentage of disconnected instances:
Critical frozen flags:
Application impact:
Current mitigations:
Non-flag rollback options:
Recovery status:
Post-recovery validation:
Incident owner:
Link to retrospective:

Relationship to other SOASAP concepts

Concept Relationship to outages
High Availability Explains why local evaluation keeps application traffic independent from the control plane
Offline Operation Describes SDK evaluation behavior while connectivity is unavailable
Persistent Cache Allows the last snapshot to survive process restarts
Non-Blocking Startup Allows the application to start without waiting for synchronization
Default Values Provide deterministic behavior when no valid snapshot value exists
Production Safety Defines safe kill-switch, default, and environment-isolation practices
Real-Time Synchronization Keeps snapshots current and restores freshness after recovery

Related documentation