SOASAP vs ConfigCat
Architectural comparison of local evaluation, synchronization, startup behavior, caching, and operational tradeoffs.
Introduction
SOASAP and ConfigCat both provide feature flag platforms with SDKs that evaluate flags inside applications. Both separate configuration delivery from request-time evaluation for common SDK deployments.
The platforms emphasize different architectural approaches to synchronization, startup, caching, offline operation, and SDK operational consistency across runtimes. This page does not recommend one platform. It helps engineers understand architecture, operational behavior, latency characteristics, startup and offline models, deployment complexity, and production tradeoffs.
High-level architecture
SOASAP
Every evaluation uses the locally available in-memory snapshot for the bound environment. The request path is independent from cloud communication once a snapshot is present. See Local Evaluation.
ConfigCat
ConfigCat SDKs download feature flag and setting configuration from ConfigCat’s CDN (or a configured base URL), store that configuration in a local cache, and evaluate flag values from the cached configuration. By default, SDKs keep the information needed for evaluation in memory; platforms may also support custom cache implementations for external or durable storage.
Configuration freshness is controlled primarily through documented polling modes (auto poll, lazy loading, and manual polling) rather than a single universal push model. Offline mode allows SDKs to work from the configured cache without HTTP communication to ConfigCat.
Local evaluation
SOASAP
- evaluation occurs from an in-memory environment snapshot
- no network request during evaluation
- predictable request path once a snapshot exists
- configuration distribution separated from evaluation
Lookup complexity is O(1) under the documented key-based model. Value type and application-side processing still affect cost. See Scaling.
ConfigCat
ConfigCat documents that after configuration is downloaded and cached, evaluation uses that locally available data rather than calling the CDN on every flag read. Runtime characteristics still depend on language, targeting/user object usage where applicable, cache provider, and application integration. The architectural implication is the same class of design: keep the evaluation path local; use the network for configuration refresh.
Control plane vs data plane
In SOASAP, temporary control-plane or network disruption primarily affects configuration freshness, not request-time evaluation, when a valid snapshot exists. See High Availability.
ConfigCat follows a similar separation: CDN/control-plane fetches refresh the cache; evaluations read from that local state. When offline mode is enabled, SDKs stop initiating HTTP requests and rely on the configured cache. Architects should still validate first-start, empty-cache, and restart behavior for their chosen polling mode and cache provider.
Synchronization model
SOASAP
Configuration freshness is managed independently of evaluation through real-time synchronization while connectivity is available. See Real-Time Synchronization.
ConfigCat
ConfigCat documents three primary polling strategies for refreshing cached configuration:
- Auto poll — periodic download into the cache (default interval commonly documented as 60 seconds, configurable within documented bounds).
- Lazy loading — download when cache is empty or TTL has expired.
- Manual polling — application-controlled refresh (for example via a force-refresh API).
Freshness therefore depends on polling mode, interval or TTL, network success, and any custom cache. This is an explicit engineering tradeoff: polling intervals and TTLs are operational knobs; real-time push models optimize for near-immediate delivery when the stream is healthy. Neither model removes the need to reason about stale configuration during outages.
Startup
SOASAP
SOASAP documents non-blocking startup where supported: restore from persistent cache or use explicit defaults, then synchronize in the background. Applications can become ready without waiting for the first network round-trip when defaults or cache are acceptable. See Non-Blocking Startup.
ConfigCat
Startup behavior depends on SDK, polling mode, and whether the application waits for a ready state (for example waiting until the latest config is available in auto-poll scenarios). With a populated cache, SDKs can evaluate from cache while refresh proceeds according to mode. Exact ready/wait semantics are SDK-specific and should be taken from ConfigCat’s SDK references for the language in use.
Persistent cache and caching
SOASAP
Persistent cache is treated as a first-class startup durability mechanism: restore the last successfully persisted snapshot across process, container, or device restarts where configured. Production guidance covers paths, permissions, lifecycle, and isolation. See Persistent Cache and Cache Strategy.
ConfigCat
ConfigCat documents in-memory caching of downloaded configuration by default, with optional custom cache implementations (platform-specific cache interfaces) for external or distributed storage. Caching accelerates evaluation and reduces CDN traffic; cache validity interacts with polling interval or TTL depending on mode. Offline mode relies exclusively on the configured cache. Persistence across restarts therefore depends on whether a durable custom cache (or platform default durable cache, where provided) is configured — it is not identical across every SDK and host by default.
Offline operation
SOASAP
Running processes continue from the last snapshot when synchronization is unavailable. Restarts can restore persisted state when cache is configured. Explicit defaults cover missing snapshots. See Offline Operation.
ConfigCat
ConfigCat offline mode stops HTTP communication and evaluates from the configured cache. With a populated cache, applications can continue serving flag values without contacting ConfigCat. Empty cache, first start, and custom-cache availability determine whether offline evaluation is possible after restart. Stale cache remains a freshness concern in both architectures.
Latency characteristics
For SOASAP, evaluation latency on the request path depends primarily on memory access and application execution — not on cloud availability or synchronization latency — once a snapshot exists. JSON deserialization and application caching remain separate costs.
For ConfigCat, evaluation latency similarly depends on local cache access and application code once configuration is available. CDN fetch latency affects refresh and first load according to polling mode, timeouts, and network conditions — not every evaluation call when cache is warm. This page does not publish comparative benchmarks.
Failure modes
SOASAP
Operators monitor sync health separately from application health. See Outages.
ConfigCat
When CDN fetches fail, SDKs continue using previously cached configuration according to mode and cache state. Auto-poll and lazy-loading refresh schedules may leave configuration stale until a successful download. Manual polling requires the application to drive refresh. Offline mode intentionally disables network refresh. Exact reconnect and error-handling details are SDK-specific.
Scaling model
In SOASAP, each SDK instance typically owns its snapshot, synchronization connection, and optional persistent cache. Horizontal scale increases aggregate memory and sync connections. See Scaling.
ConfigCat similarly evaluates from per-client local state. Scaling considerations include more processes holding cached config, more CDN poll traffic under auto-poll, and optional shared custom caches in advanced architectures (for example one writer with many offline readers, as documented in ConfigCat caching guidance). Shared custom caches introduce their own consistency and operational design requirements.
Deployment model
Shared concerns:
- SDK installation and client lifetime
- SDK key / secret management and environment isolation
- outbound network access for configuration refresh
- startup readiness policy
- cache storage when restart durability is required
SOASAP deployments emphasize environment-scoped keys, real-time sync path health (including proxy/SSE considerations), and intentional persistent-cache lifetime. ConfigCat deployments emphasize choosing polling mode and intervals/TTLs, CDN reachability, optional custom cache, and online/offline mode. Complexity tracks how many modes and runtimes you standardize on.
Network dependencies
SOASAP separates the evaluation path (local) from the synchronization path (authenticated real-time sync). Request processing does not depend on configuration transport once a snapshot exists.
ConfigCat separates evaluation (local cache) from refresh (CDN HTTP fetches under the selected polling mode). Network dependency is concentrated on refresh and first download, not on each evaluation when cache is populated. Proxy, DNS, TLS, and egress controls still affect refresh reliability.
Observability
SOASAP operators typically monitor synchronization status, snapshot freshness (time since last successful sync), cache restoration and write failures, and default fallback rates — separately from HTTP success rates.
ConfigCat operators typically monitor refresh success/failure, polling activity, ready/wait behavior where used, cache hit/availability for custom stores, and offline-mode state. Exact hooks and logging options vary by SDK.
Security
Both platforms require treating SDK credentials as secrets, isolating environments, and avoiding privileged keys in public clients. SOASAP documents environment-scoped API keys and server-versus-browser trust boundaries. See API Keys and Security.
ConfigCat uses SDK keys for client authentication to download configuration and documents data governance options affecting CDN location. Feature flags on either platform are not a substitute for application authorization.
Multi-runtime consistency
SOASAP documentation emphasizes a consistent operational model across supported SDKs: local evaluation from an environment snapshot, real-time synchronization for freshness, optional persistent cache for restart durability, non-blocking startup where supported, and explicit defaults. Supported surfaces include .NET, Node.js, Python, React, Angular, React Native, and Kotlin (with platform-specific adapters such as mobile storage).
Consistent operational semantics simplify onboarding, runbooks, incident response, and capacity planning when many runtimes share one product. Platform-specific details remain (storage providers, DI integration, threading), but the mental model for availability versus freshness is shared.
ConfigCat also provides SDKs across many languages with a shared conceptual model of polling modes, local cache, and evaluation from cached config. Implementation details, default cache backends, and ready APIs can still differ by runtime. Teams adopting either vendor should verify parity for the subset of SDKs they actually ship rather than assuming identical defaults everywhere.
Architectural tradeoffs
| Area | SOASAP | ConfigCat |
|---|---|---|
| Evaluation | Local in-memory environment snapshot | Local evaluation from cached configuration |
| Synchronization | Real-time sync to update snapshots | Auto poll / lazy load / manual poll against CDN |
| Startup | Cache restore and/or defaults; background sync | Depends on polling mode, ready/wait, and cache state |
| Offline | Last snapshot + optional persistent cache + defaults | Offline mode evaluates from configured cache without HTTP |
| Caching | In-memory snapshot; optional durable persistent cache | In-memory cache by default; optional custom durable cache |
| Deployment | Env key + sync path + intentional cache lifetime | SDK key + polling mode + optional custom cache |
| Scaling | Per-instance snapshot and sync connections | Per-client cache; poll traffic and optional shared caches |
| Observability | Freshness vs availability signals emphasized | Refresh, polling, offline, and SDK hooks/logging |
| State management | Environment snapshot as evaluation state | Downloaded config JSON cached for evaluation |
| Operational model | Shared local-first runbook across documented SDKs | Shared polling/cache concepts; verify per-SDK defaults |
When SOASAP fits well
- predictable request-path latency independent of control-plane reachability
- real-time configuration delivery as the default freshness model
- explicit persistent cache and offline restart durability
- non-blocking startup with safe defaults
- backend, Kubernetes, and high-throughput API services
- teams that want one operational mental model across multiple runtimes
When ConfigCat may fit well
- organizations already standardized on ConfigCat SDKs and tooling
- teams that prefer explicit polling-mode control (auto / lazy / manual)
- deployments that integrate ConfigCat’s CDN and data-governance options
- architectures that use documented custom/shared cache patterns
- product needs aligned with ConfigCat-specific capabilities beyond this comparison
Decision questions
- Do applications require predictable request-path behavior independent of refresh transport?
- Must restart behavior remain deterministic when Cloud/CDN is unreachable?
- Is offline startup important, and is durable cache configured for it?
- Should configuration survive process, Pod, and device restarts by default?
- Is near-real-time delivery required, or are polling intervals/TTLs acceptable?
- How important is operational consistency across many SDK languages?
- Will many runtimes share one set of runbooks and freshness SLOs?
- How important is deployment simplicity versus optional custom cache topologies?
Common misconceptions
"Every SDK behaves identically."
False. Defaults, ready APIs, and cache backends can differ by runtime even when the conceptual model is shared.
"Local evaluation means no synchronization."
False. Local evaluation depends on previously downloaded or synchronized state.
"Caching and persistence are identical."
False. In-memory caches speed evaluation; durable persistence survives restart.
"Offline support means configuration never becomes stale."
False. Offline mode preserves last-known state; freshness stops advancing.
"Request latency always depends on cloud availability."
False for local-evaluation architectures with a populated cache or snapshot — including typical SOASAP and ConfigCat deployments after successful load.
"Polling and real-time sync provide the same freshness guarantees."
False. Polling intervals/TTLs and streaming delivery have different freshness profiles and failure modes.
Related documentation
- Local Evaluation
- Persistent Cache
- Cache Strategy
- Offline Operation
- Non-Blocking Startup
- Real-Time Synchronization
- Performance
- High Availability
- API Keys
- Security
- Quick Start
- SDK Installation
External references for ConfigCat polling and caching: ConfigCat: Polling Modes & Caching.