Skip to content

Remote Configuration

Remote configuration and dynamic feature management is a powerful tool that allows you to control your application's behavior and features from the server side. This technology has become an indispensable part of modern mobile applications.

Quick Decision

NeedUse Remote ConfigWatch Out
Feature rolloutYesDefault value must be safe
Kill switchYesMust work while offline
Security decisionNoClient config can be manipulated
Frequently changing UI textBe carefulCache and localization get complex

Production Checklist

  • Problem: Which risk does config reduce without waiting for app update?
  • Solution: Are default, fetch interval, validation, targeting, and rollback clear?
  • Trade-off: It adds flexibility; it also adds config drift and unexpected behavior risk.
  • Failure mode: Bad config, stale config, wrong segment, and offline defaults should be handled.
  • Measurement: Track fetch success, config version, activation rate, rollback count, and error delta.
  • Security/cost: Do not put secrets or authorization rules in remote config; many segments create analysis cost.

Core Features

  • Dynamic Feature Management: Ability to toggle application features from the server
  • A/B Testing Support: Ability to provide different experiences to different user groups
  • Quick Updates: Make changes without app store updates
  • Conditional Configuration: Customized experiences based on user segmentation
  • Real-time Changes: Instant updates and modifications
  • Multi-platform Support: Consistent configuration across iOS, Android, and web platforms

Use Cases

1. Feature Rollout

Scenario: Adding a new payment method to your e-commerce app.

  • Initially shown to 5% of users
  • Monitor error rates and user feedback
  • Gradually roll out to all users if successful
  • Instantly disable if issues arise

2. Emergency Management

Scenario: A critical security vulnerability is detected in your app.

  • Immediately disable the affected feature
  • Show notification to users
  • Provide alternative flows until fixed

3. Regional Customization

Scenario: Offering different payment methods in different countries.

  • Bank transfer options in Turkey
  • Credit card focused payments in the US
  • Bank transfer priority in Germany

4. Performance Optimization

Scenario: Improving application performance.

  • Increase cache duration during peak hours
  • Reduce image quality in low-bandwidth regions
  • Adjust request frequency to balance server load

Best Practices

1. Configuration Management

  • Caching configuration values
  • Defining default values
  • Monitoring and logging changes
  • Implementing security controls

2. Error Handling

  • Using last known good configuration on connection loss
  • Validating configuration values
  • Maintaining user experience during errors

3. Performance Optimization

  • Fetching configuration updates in background
  • Preventing unnecessary updates
  • Optimizing cache strategies

Real-world Examples

Netflix

  • Different content catalogs for different countries
  • Adjusting recommendation algorithms based on user behavior
  • Gradual rollout of new features

Spotify

  • Regional pricing strategies
  • Personalized user experience
  • A/B testing of new features

Uber

  • Dynamic pricing settings
  • Regional feature restrictions
  • Emergency management and service disruptions

Technical Implementation

Configuration Keys

json
{
  "feature_flags": {
    "new_payment_method": {
      "enabled": true,
      "rollout_percentage": 25,
      "target_countries": ["TR", "US", "DE"]
    },
    "dark_mode": {
      "enabled": true,
      "default": false
    }
  }
}

Example Code

swift
// iOS example
RemoteConfig.shared.fetch { config in
    if config.isFeatureEnabled("new_payment_method") {
        // Show new payment method
    }
}
kotlin
// Android example
FirebaseRemoteConfig.getInstance().fetchAndActivate()
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            val isNewFeatureEnabled = remoteConfig.getBoolean("new_feature")
            // Manage feature
        }
    }

Created by Eren Demir.