Achievement Systems & Leaderboards Development

Our video game development company runs independent projects, jointly creates games with the client and provides additional operational services. Expertise of our team allows us to cover all gaming platforms and develop an amazing product that matches the customer’s vision and players preferences.

From immersive apps to game worlds and 3D scenes

Our dedicated team for VR/AR/MR development, Unity production and 3D modeling & animation — with its own case studies and capability decks.

Visit the dedicated studio
Showing 1 of 1All 242 services
Achievement Systems & Leaderboards Development
Medium
~5 days
Frequently Asked Questions

Our competencies

What are the stages of Game Development?

Latest works

  • image_games_mortal_motors_495_0.webp
    Game development for Mortal Motors
    1457
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    A turn-based strategy game set in a fantasy setting, With Fire and Sword
    979
  • image_games_second_team_604_0.webp
    Game development for the company Second term
    605
  • image_games_phoenix_ii_606_0.webp
    3D animation - teaser for the game Phoenix 2.
    674
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Educational quiz for kids "Shopping in a store"
    29

We develop achievement and leaderboard systems that retain players through secondary goals and social pressure. At first, it seems enough to have a flag in the database and a condition check, but in practice, after six months, pitfalls appear: counter desync after game reinstallation, inability to grant retroactive achievements, and conflicts in multithreaded environments. With 10+ years of experience and 50+ implemented projects, we navigate these issues at the architecture stage.

Why achievements are harder than they seem

At project start, achievements look simple: a flag in the database, a condition check, and a record. In practice, after six months of development, you discover:

Counter state desynchronization. An achievement "kill 100 goblins" requires a persistent counter that updates on each kill. If the player reinstalls the game, the counter resets—the achievement becomes unobtainable, even though it's marked as completed in Google Play / Game Center. This is a classic dual-state problem: local state and platform state diverge.

Retroactive achievements. The team adds a new achievement three months after launch. Players who already met the condition don't get it automatically. You need a backfill procedure—recalculating from the player's historical stats. If stats weren't stored, backfill is impossible, and players get angry.

Thread-safe counters. In a multithreaded environment (Unity with Jobs System, server-side logic), simultaneous counter increments without atomic operations yield incorrect values. Several events at once cause the counter to jump values. In 90% of cases, we see this problem during load testing.

Achievement system architecture

The working scheme is event-driven architecture through a central AchievementService. Instead of each game module knowing about achievements and calling AchievementManager.CheckCondition(), modules fire events: GameEvent.EnemyKilled(enemyType, count), GameEvent.LevelCompleted(levelId, stars). The AchievementService subscribes to the needed events and updates counters itself.

Each achievement is described by a config:

  • type (incremental, single, compound)
  • list of events it reacts to
  • completion condition (lambda or ScriptableObject with logic)
  • reward

Adding a new achievement means a new config, with no changes to game code.

Platform synchronization. Google Play Games Services and Apple Game Center have their own leaderboards and achievements, but working with them directly is painful. The GPG SDK for Unity works only on Android, Game Center only on iOS. For cross-platform projects, we use an intermediate layer: our own database stores the master state, while platform SDKs are updated as satellites. On conflict (offline session), we merge using the "take max" principle for incremental counters.

Achievement (video games) PlayFab and GameSparks provide ready server-side achievement systems with APIs—for mobile F2P, this is often faster and cheaper than a custom backend.

How to avoid cheaters in leaderboards?

Client-side score submission without validation is a straight path to cheaters at the top. Minimum: score is signed with an HMAC key on the client, server verifies the signature. The proper way: the server calculates the score from game session logs; the client only sends events. We implement anti-cheat on both levels: client-side build integrity checks, server-side anomaly monitoring (e.g., a sudden 300% counter spike in 3 seconds).

Leaderboards: complexity at scale

For a game with 1000 concurrent players, SQLite or PostgreSQL with ORDER BY score DESC LIMIT 100 works fine. At 100k+ records, queries without proper indexes start slowing down. At 1M+, you need Redis Sorted Set.

Redis ZADD leaderboard {score} {userId} + ZREVRANK leaderboard {userId} gives O(log N) insertion and O(log N) rank retrieval. ZREVRANGE leaderboard 0 99 WITHSCORES gives the top 100 in microseconds. This is the standard for mobile games with large audiences.

Weekly and seasonal leaderboards. A separate table (or Redis Sorted Set) per period plus a cron job for rotation. On rotation—snapshot winners to archive, distribute rewards via a queue (not synchronously—with a large audience, synchronous reward distribution kills the server).

What’s included in the work

deliverable description
API documentation and data schemas description of events, configs, and endpoints
Game designer tool achievement config editor (web interface or Unity/Unreal plugin)
Platform integration GPG, Game Center, PlayFab—including sync and conflict merge
Load testing leaderboard testing with 1000+ concurrent requests
Post-launch support bug fixing, config tweaks, team consultations

Development stages

  1. Schema design—achievement types, events, state storage, platforms.
  2. Server side—tables/Redis, API endpoints, anti-cheat.
  3. Client integration—AchievementService, event subscriptions, UI.
  4. Platform synchronization—GPG / Game Center / PlayFab.
  5. Game designer tools—achievement config editor.
  6. QA—retroactive achievement testing, offline scenario testing, leaderboard load testing.
Scope Timeline
Local achievements without server (mobile/casual) 1–2 weeks
Server-based achievements + leaderboards for one platform 3–5 weeks
Cross-platform system with anti-cheat and seasonal leaderboards 6–12 weeks

Cost is determined individually after analyzing your project architecture and scalability requirements. Evaluate your project—contact us, and we'll provide a plan tailored to your budget.

Game Support and Development Services

Release is not the final build — it's the start of a continuous support system. In our practice, 80% of projects without live ops lose up to 30% of their audience in the first two weeks: crash rates above 1%, onboarding drops 40% of new players, and content updates get stuck in store review for 3–4 days. We solve this with Remote Config, crash reporting, and A/B testing. With over 8 years of experience in mobile game live operations, we've supported 40+ titles and helped reduce post-launch churn by an average of 25%. Assessing your project's current state takes one day — contact us to schedule an audit.

What game support problems do we solve?

Problems we tackle include retention drop, content fatigue, and technical debt. Without analytics-driven onboarding, D1 retention falls to 45%. We rebuild tutorials: reduce steps from 10 to 4, add a skip option for returning players — result: +18% D3 retention. If new content isn't released every 2–3 weeks, D30 retention drops by 25%. We introduce seasonal events via Remote Config without a new build. Migrating to Unity 6 LTS from an older version lowers FPS bugs by 30%, but requires SDK updates (Firebase, Adjust, AppLovin). Delaying leads to publishing blocks from outdated libraries — we've seen it happen on projects using SDKs older than two years.

Why live ops matters for post-launch support

The ability to change game behavior without re-releasing the app is the foundation of modern post-launch strategy. A well-structured pipeline allows you to adjust balance, enable events, or test new monetization mechanics in 15 minutes without touching the build. Over the years, we've moved from store-based hotfixes to a full live ops architecture that saves up to 30% of time on content updates. According to Firebase official documentation, proper Remote Config setup can reduce update cycles from weeks to hours. (As noted on Wikipedia, Remote Config is used by thousands of mobile games globally for dynamic control.)

Remote Config Architecture

A typical setup:

Dashboard / CMS
      ↓
Remote Config Provider (Firebase / PlayFab)
      ↓
Game Client (fetch on session start + periodic polling)
      ↓
Local Cache (fallback when no network)

Firebase Remote Config is the most common solution for mobile games. Keys are stored in the console; the client fetches them on session start via RemoteConfig.FetchAndActivateAsync(). Important: Firebase caches values for 12 hours by default — in production you must explicitly set minimumFetchInterval. For live events we use minimumFetchInterval = 0 with manual client throttling. See Firebase Remote Config documentation on Wikipedia for details.

PlayFab offers Title Data, Player Data, and CloudScript — great for server-side purchase validation, player progress storage, and A/B testing segments. If your game has a server component (PvP, leaderboards, inventory), PlayFab often provides more value overall.

Typical Remote Config Key Structure

Key Type Example Value
event_halloween_active bool true
event_halloween_end_ts long 1730332800
iap_sale_multiplier float 2.0
tutorial_skip_enabled bool false
daily_reward_sequence JSON [10, 20, 50, 100, 200]
ads_interstitial_cooldown_sec int 120

Store only what actually changes. Gameplay constants untouched for a year are not candidates.

Comparison: Firebase Remote Config vs. PlayFab Title Data

Criteria Firebase Remote Config PlayFab Title Data
Max key size 64 KB (total limit) 1 MB per key
Data types primitives + JSON strings (JSON inside)
A/B testing built-in (Firebase A/B Testing) via CloudScript + segments
Free limit 10M requests/month unlimited for basic calls
Offline support 12-hour cache 1-hour cache (configurable)

How does Remote Config speed up content delivery?

A/B tests via Firebase allow you to segment users and collect statistics on D1/D7 retention, revenue, and custom events. Each user is consistently assigned to a group based on Installation ID. If the test affects monetization, we verify via Unity Analytics that purchase distribution is random. Average D7 retention increase after implementing such tests is 12%. Compared to manual app-store rollouts, Remote Config is 4x faster for publishing new events — hours instead of days. That translates to roughly $2,500–$4,000 monthly savings on content update cycles.

How do we monitor game stability?

Without crash reporting, you learn about critical bugs from reviews, not from a dashboard. Firebase Crashlytics is the standard for mobile games. It integrates via Firebase SDK and automatically captures unhandled C# exceptions and native crashes (including IL2CPP).

Key metrics we monitor daily:

  • Crash-free users rate: should be above 99.5% for a stable project.
  • ANR rate: a common issue with heavy loads on the main thread.
  • Top crashes by affected users — not by total events.

For projects with native code or complex C++ components (Unreal, custom plugins), we also use Backtrace — it decodes symbols better for native crashes. For Unity projects, we enable Unity Cloud Diagnostics for additional engine error context.

Analytics and Content Iteration

We use Unity Analytics (formerly Unity Gaming Services Analytics) for funnel tracking. For more complex scenarios, we build a custom event pipeline sending to BigQuery or ClickHouse. Minimum event set:

  • session_start / session_end
  • level_start / level_complete / level_fail
  • tutorial_step_N
  • iap_purchase / ad_watched
  • feature_unlocked

This data shows where the audience drops off, which content underperforms, and where to invest next update efforts.

How to implement live ops: step-by-step plan

  1. Audit current state: Analyze crash-free rate, retention, build performance. Identify the tightest bottlenecks.
  2. Set up Remote Config: Integrate Firebase or PlayFab, create key schema, configure polling.
  3. Implement crash reporting: Integrate Crashlytics, set alerts for crash-free rate below 99%.
  4. Launch A/B tests: Start with simple experiments (reward balance, ad frequency), monitor metrics.
  5. Regular content sprints: Every two weeks: adjustments based on analytics, new events, optimizations.

Work process and timeline

For projects on support, we use a dedicated rhythm: weekly metric reports, 2-week sprints for content updates, an on-call engineer for critical bugs with SLA up to 24 hours. All changes pass through a staging environment before deploying to production — both Remote Config and code changes.

Live ops implementation takes 2 to 4 weeks depending on complexity and current architecture. Cost is calculated individually, but average monthly savings on content updates range between $2,500 and $4,000 compared to traditional hotfix cycles. Typical live ops setup investment is between $3,000 and $8,000. We guarantee deadlines and transparent pricing — order an audit of your project and we'll provide an estimate within one day. Contact us to get started.

What you get: deliverables

After the engagement you receive:

  • Documented Remote Config key schema with version history
  • Crash analytics dashboard (Firebase or Backtrace) with alert rules
  • Tutorial rewrite report and updated onboarding funnel
  • A/B test design with success metrics and monitoring plan
  • Access to staging environment and deployment scripts
  • 2-week handover session with your team, including runbook for common issues

Common pitfalls we avoid: storing too many keys in Remote Config (keep only dynamic values), forgetting to set minimum fetch interval (leads to wasted quota and stale data), not testing Remote Config changes against offline scenarios (crash on first session), combining A/B test segments with unrelated features (pollutes results), delaying crashlytics integration until after launch (we install it during pre‑production).

Need game support that actually retains players? Request a free audit by email or through the website form — we'll advise on any technical questions.