Certification Reality Check

Every game, patch, and DLC in Console Development must pass certification before it can appear on a console store. A failed cert submission means weeks of delay + re-submission fees. Knowing the rules before shipping saves enormous time and money.

History

How

  • Began in the 1980s with the “Nintendo Seal of Quality” to prevent the market crash caused by untested, low-quality games (like Atari’s E.T.).
  • Evolved into rigid technical standards to protect console hardware, user privacy, and ensure system stability.

Who

  • Sony PlayStation — TRC (Technical Requirements Checklist)
  • Microsoft Xbox — TCR (Technical Certification Requirements)
  • Nintendo — LOT Checks (named after manufacturing batches)

Why

  • Ensure games do not crash consoles or brick hardware.
  • Guarantee consistent user experience (UX) on the platform.
  • Verify platform features (Achievements, Cloud Saves, Multiplayer) are implemented correctly.
  • Prevent piracy and unauthorized network access.
  • Protect consumer data and privacy.

Core Concepts & Terminology

The Certification Triad

graph LR
   Cert["🎮 Certification"]
   TRC["PlayStation TRC\nFocus: App Lifecycle\nUser Management\nTrophies"]
   TCR["Xbox TCR\nFocus: Quick Resume\nXbox Live\nAccessibility"]
   LOT["Nintendo LOT\nFocus: Sleep Mode\nJoy-Con States\nThermal Limits"]
   Cert --> TRC
   Cert --> TCR
   Cert --> LOT

Key Terminology

TermDefinition
Submission BuildThe final, compiled game sent to the platform holder
Vetting / CertThe process of testing by the platform holder’s QA team
WaiverRequesting permission to bypass a specific rule for valid reasons
Day-One PatchAn update released simultaneously with the game to fix last-minute bugs
Soak TestRunning the game idle for 8-12+ hours to detect memory leaks
IQAInternal Quality Assurance (your own team testing against cert rules)

Submission Timeline Architecture

graph TD
    Dev["Development Complete\n(Content Complete)"] --> IQA["Internal QA Testing\n(Run TCR/TRC/LOT Checklist)"]
    IQA --> Fix{"Issues Found?"}
    Fix -->|Yes| FixBugs["Fix All Issues"]
    FixBugs --> IQA
    Fix -->|No| Build["Create Submission Build"]
    Build --> Upload["Upload to Partner Portal"]
    Upload --> PlatformQA["Platform Holder QA Testing"]
    PlatformQA --> Result{"Pass?"}
    Result -->|Pass| Approved["Game Approved! 🎉"]
    Result -->|Fail| Report["Failure Report Issued"]
    Report --> FixBugs2["Fix Listed Issues"]
    FixBugs2 --> Build

Certification Timeline

PlatformTypical Review TimeRe-submission FeeNotes
PlayStation2–4 weeksYes (varies by partner tier)Slower for first submissions
Xbox1–2 weeksYesFaster turnaround generally
Nintendo2–3 weeksYesVery strict, thorough testing
  • Plan Cert Into Your Schedule at least 2 cert rounds in your release schedule. Major release windows (Christmas, summer sales) have longer queues.

    A single failed cert round = 2–6 weeks of delay. Always plan for

PlayStation TRC (Technical Requirements Checklist)

TRC Fundamentals

  • TRC = Technical Requirements Checklist (see Console Development - PlayStation)
  • PlayStation TRCs are divided into categories:
    • Required (MUST pass — automatic fail if violated)
    • Recommended (SHOULD implement — not a fail, but noted)
  • TRC documents are provided via the PlayStation Partners portal. Updated periodically — always use the current version!
  • Major TRC Categories:
    • Application Lifecycle — start, suspend, resume, shutdown
    • User Management — multiple users on one console
    • Save Data — save system behavior
    • Trophy System — trophy implementation
    • Online Features — PSN integration requirements
    • Network Access — internet usage policies
    • UI & UX — button mapping, icons, accessibility
    • Content Rating — PEGI/ESRB rating display
    • Localization — language support requirements
    • Audio — DualSense audio routing
    • Performance — no indefinite hangs

Critical TRC Requirements (Highest Failure Rates)

RequirementCategoryDescriptionDefense / Fix
TRC-R4001App LifecycleGame must start within 15 seconds of launch icon pressMinimize startup work, show loading screen immediately
TRC-R4002App LifecycleGame must respond to suspend event within 5 secondsFlush IO, pause audio, disconnect network in suspend handler. Never block suspend handler.
TRC-R4003App LifecycleGame must handle unexpected shutdown gracefullyAuto-save every 15 minutes minimum, never corrupt save on crash
TRC-R4004User ManagementGame must handle profile switch (user switch mid-game)Save current user progress, prompt to save before switch
TRC-S1001Save DataNever write to save during scene loads (IO bottleneck)Perform IO asynchronously or at safe checkpoints
TRC-S1002Save DataMust warn player before a non-reversible action (delete save)Add confirmation dialogs for destructive actions
TRC-S1003Save DataSave data must survive console shutdown mid-writeUse temp file + atomic rename (atomic write pattern)
TRC-T1001TrophiesEvery PS4/PS5 game MUST have at least one trophy setBasic trophy set implementation
TRC-T1002TrophiesTrophies must not be unlockable by in-game purchaseDecouple all trophy triggers from microtransactions
TRC-T1003TrophiesTrophy artwork must meet resolution requirements (256×256)Ensure all assets match SDK guidelines
TRC-T1004TrophiesTrophy descriptions must be accurateNo “TBD” or placeholder text in submission

Common TRC Failures

FailureRoot CauseFix
Game freezes on suspendNot handling suspend eventImplement PLM (Process Lifecycle Management) callbacks
Wrong button icons shownPS button mapping swappedUse platform SDK button icons
Trophy unlocks on purchasePaid unlock linked to trophyDecouple trophy from IAP
Save data lost on crashNon-atomic save writesUse temp file + atomic rename
Game won’t start in 15sHeavy loading at startupDefer loading to post-launch
Missing age ratingNo PEGI/ESRB rating displayAdd rating screen at startup
Network access without warningSilent background downloadsShow network permission prompt
User switch crashNo multi-user handlingTest with user switch mid-game
Missing languageRequired locale not shippedAdd all required EU languages
  • Defense Principle: Fail Secure

    Never overwrite a save file directly. If power is lost mid-write, the save is destroyed.

Atomic Save Pattern (TRC-S1003)

// C++ Atomic Save Concept
bool SaveGameSafe(const SaveData& data, const char* savePath) {
    // 1. Write to temporary file
    std::string tempPath = std::string(savePath) + ".tmp";
    FILE* tempFile = fopen(tempPath.c_str(), "wb");
    if (!tempFile) return false;
    
    // 2. Write data + checksum
    uint32_t checksum = CalculateCRC32(&data, sizeof(data));
    fwrite(&data, sizeof(data), 1, tempFile);
    fwrite(&checksum, sizeof(checksum), 1, tempFile);
    
    // 3. Flush to ensure OS writes to disk
    fflush(tempFile);
    fclose(tempFile);
    
    // 4. Atomic rename — if power lost here, old save intact
    //    If power lost before here, temp file is corrupted (not real save)
    rename(tempPath.c_str(), savePath);
    
    return true;
}
 
bool LoadGameSafe(SaveData& data, const char* savePath) {
    FILE* file = fopen(savePath, "rb");
    if (!file) return false;
    
    SaveData loadedData;
    uint32_t storedChecksum, calcChecksum;
    
    fread(&loadedData, sizeof(loadedData), 1, file);
    fread(&storedChecksum, sizeof(storedChecksum), 1, file);
    fclose(file);
    
    // Verify integrity
    calcChecksum = CalculateCRC32(&loadedData, sizeof(loadedData));
    if (calcChecksum != storedChecksum) {
        // Corrupted — try backup save
        return LoadBackupSave(data);
    }
    
    data = loadedData;
    return true;
}

Xbox TCR (Technical Certification Requirements)

TCR Fundamentals

  • TCR = Technical Certification Requirements
  • Xbox TCR documents are provided via Partner Center (see Console Development - Xbox). ID@Xbox members get full TCR documentation.
  • TCR Categories:
    • Fundamentals — startup, crash recovery, input
    • Xbox Live — achievements, presence, cloud saves
    • Game Hub — store listing, screenshots, trailers
    • Accessibility — required accessibility features
    • Multiplayer — online session requirements
    • Content — age ratings, content policies
    • Performance — hang detection, memory
    • Packaging — binary format requirements
    • Update — title update requirements
    • Quick Resume — suspend/resume behavior

Critical TCR Requirements

RequirementCategoryDescriptionDefense / Fix
TCR-F001FundamentalsGame must start in under 2 minutes from logo to gameplayOptimize startup loading, add progress indicator
TCR-F002FundamentalsGame must never hang (infinite loop with no output)Watchdog timer — force-restart if no progress in 60s
TCR-F003FundamentalsGame must handle all 4 users on one consoleTest every feature with 4 different user accounts
TCR-XBL001Xbox LiveAchievements must unlock during normal gameplay onlyNo dev-console commands to force-unlock achievements
TCR-XBL002Xbox LiveCloud saves must sync before save accessWait for XGameSave sync before reading/writing saves
TCR-XBL003Xbox LivePresence string must reflect current activityUpdate presence string on game state change
TCR-QR001Quick ResumeGame must resume from Quick Resume in under 15 secondsHandle OS resume signal efficiently
TCR-QR002Quick ResumeAfter Quick Resume, all gameplay must function correctlyReconnect audio, network, validate game state on resume
TCR-ACC001AccessibilityGame must support button remapping (or use system remapping)Implement UI or inherit OS settings
TCR-ACC002AccessibilityGame must support Narrator (screen reader) in menusAdd proper UI focus management and accessible labels

Common TCR Failures

FailureRoot CauseFix
Hang on startupDeadlock waiting for Xbox LiveAdd timeout fallback
Quick Resume brokenNetwork state not restoredReconnect on resume
Achievement unlockable via cheatDev test code left inRemove all bypass code
Save corruption on user switchWrong user handleRe-init save provider on switch
UI not accessibleNo focus/narrator supportAdd automation IDs to UI
Presence not updatedStatic presence stringHook into game state changes
Multi-user crashUntested with 4 usersTest all user combinations
Game doesn’t use Smart DeliverySame binary for allConfigure GDK chunking

Quick Resume Flow

sequenceDiagram
    participant OS as Xbox OS
    participant G as Game
    OS->>G: Suspend Event
    Note over G: Pause Audio, Drop Network, Flush Save
    G->>OS: Suspend Complete
    Note over OS: Game state saved to NVMe
    OS->>G: Resume Event
    Note over G: Reconnect Network, Restore Audio
    G->>OS: Ready

Nintendo LOT Checks

LOT Checks Fundamentals

  • LOT Check = Console Development - Nintendo Switch certification process. Named “LOT” from Japanese manufacturing term (lot = batch).
  • Nintendo is the strictest of the three platforms. LOT checks are extremely thorough — expect 50–150+ test cases.
  • LOT Check Categories:
    • Basic Operation — start, stop, error handling
    • Sleep Mode — lid closed, wake behavior
    • Joy-Con handling — attach/detach during play
    • Network — online features, offline fallback
    • Save Data — corruption resistance
    • Controller types — all supported controllers
    • Handheld/Docked — mode switching
    • amiibo — if supported
    • Local Wireless — if supported
    • Nintendo Switch Online — if using NSO multiplayer
    • Content Policies — age ratings, violent content rules
    • Language support — required languages per region

Critical LOT Rules

RequirementCategoryDescriptionDefense / Fix
LOT-001Sleep ModeGame must handle sleep (lid closed) within 2 secondsPause game, stop audio, suspend network on sleep signal
LOT-002Sleep ModeGame must resume from sleep correctlyResume audio, refresh network connections, sync time
LOT-003Sleep ModeSave data must not corrupt on sleep during saveNever save during sleep transition (atomic writes)
LOT-010Joy-ConJoy-Con detach during gameplay must not crashHandle NpadId disconnect event gracefully, pause or show prompt
LOT-011Joy-ConAll gameplay must be playable with one Joy-Con (horizontal)In single Joy-Con mode, remap to SL/SR/stick only (OR explicitly declare game requires dual Joy-Con)
LOT-012ControllerPro Controller must work if game supports itTest all controller types — NpadStyleSet must be correct
LOT-020PerformanceHandheld mode must maintain minimum 30 FPSDynamic resolution, reduce quality in handheld. Fail: If game dips to <20 FPS regularly in handheld
LOT-021PerformanceDocked mode must not exceed thermal limitsNintendo monitors GPU temperature — don’t run at 100% GPU 100% of time
LOT-022PerformanceBattery drain must not exceed specified rateMonitor GPU/CPU utilization — use Nintendo’s power profiler

Common LOT Failures

FailureRoot CauseFix
Crash on Joy-Con detachNpadId not handledHandle disconnect event
Sleep corrupts saveIO during sleep transitionBlock saves during transition
<30 FPS in handheldNo performance scalingAdd dynamic resolution
Can’t play with single Joy-ConNo horizontal mode supportAdd or explicitly exclude
Network crash offlineNo offline fallbackTest all features offline
No Japanese languageMissing required localeAdd JP text + Nintendo fonts
amiibo crash (if using)NFC not tested all modelsTest all amiibo series
Overheat (thermal)GPU at 100% non-stopCap GPU usage, add thermal monitoring
  • Top Failure Point

    Sleep mode failures are the #1 reason for LOT check rejection.

Sleep Mode Handling

// Nintendo Switch sleep mode handling (conceptual)
 
// Register for system event callbacks
AppletHookCookie hookCookie;
appletHook(&hookCookie, AppletHookCallback, nullptr);
 
void AppletHookCallback(AppletHookType type, void* param) {
    switch (type) {
    case AppletHookType_OnExitRequest:
        // Player pressed home button — exit cleanly
        g_gameRunning = false;
        SaveGameState();        // save progress
        AudioEngine::Shutdown();
        NetworkManager::Disconnect();
        break;
        
    case AppletHookType_OnFocusState:
        // Focus changed (sleep, overlay, etc.)
        AppletFocusState focusState = appletGetFocusState();
        
        if (focusState == AppletFocusState_InFocus) {
            // Resumed — restore everything
            AudioEngine::Resume();
            NetworkManager::ReconnectAsync();
            SyncGameTime();
        } else {
            // Lost focus — pause game
            AudioEngine::Suspend();
            g_gamePaused = true;
        }
        break;
        
    case AppletHookType_OnOperationMode:
        // Docked/handheld mode changed
        AppletOperationMode mode = appletGetOperationMode();
        bool isDocked = (mode == AppletOperationMode_Console);
        RenderSettings::AdjustForMode(isDocked);
        break;
    }
}

Pre-Certification Checklist

Universal Requirements (All Platforms)

[ ] Game launches successfully from cold start
[ ] Game launches successfully from sleep/suspend resume
[ ] Game handles unexpected shutdown without save corruption
[ ] Save data writes are atomic (temp file + rename)
[ ] Backup save exists and loads on primary corruption
[ ] All supported controller types tested
[ ] Correct platform button icons shown (not generic / wrong platform)
[ ] Age rating displayed at startup (ESRB/PEGI/CERO)
[ ] Game handles multiple user accounts
[ ] Online features degrade gracefully when offline
[ ] No debug/dev-only code paths in submission build
[ ] All required languages shipped (check per-region requirements)
[ ] All placeholder text removed ("TODO", "TBD", "PLACEHOLDER")
[ ] Game does not access filesystem paths it doesn't own
[ ] No infinite loops / hangs tested (10 hour soak test)
[ ] Memory usage within approved budget
[ ] Frame rate meets minimum target (30 FPS minimum, sustained)

PlayStation-Specific Checklist

[ ] Trophy set implemented correctly (at least 1 set, Platinum if 2+ Gold)
[ ] Trophy artwork at correct resolution (256×256 PNG)
[ ] DualSense haptics implemented (required for PS5 certification)
[ ] Adaptive triggers implemented or explicitly disabled
[ ] Activity Cards configured (PS5 recommended)
[ ] Game Help hints configured (PS5 recommended)
[ ] Suspend event handled within 5 seconds
[ ] PSN presence string updated correctly
[ ] Save data uses PSN save APIs (not raw filesystem)
[ ] Cross-save implemented if supporting PS4 → PS5 upgrade
[ ] PS4 → PS5 upgrade path tested (if supporting both)

Xbox-Specific Checklist

[ ] Achievements implemented (1,000 Gamerscore base)
[ ] Achievement artwork at correct resolution (1920×1080 min)
[ ] Cloud saves implemented via Xbox Game Save API
[ ] Quick Resume implemented (game resumes cleanly from suspended state)
[ ] Presence string updates with game state
[ ] Smart Delivery configured if shipping Xbox One + Series versions
[ ] Button remapping supported (or system remapping enabled)
[ ] Narrator/accessibility mode tested in all menus
[ ] 4-user local testing (all features work with 4 different accounts)
[ ] PLM events handled (suspend, resume, constrained)
[ ] Network timeout tested (graceful offline handling)
[ ] MicrosoftGame.config correct (TitleId, StoreId, version)

Nintendo Switch-Specific Checklist

[ ] Sleep mode tested (lid close + wake-up)
[ ] Joy-Con detach tested mid-gameplay (no crash)
[ ] All controller types tested: dual Joy-Con, single Joy-Con, Pro Controller
[ ] Handheld mode performance: sustained 30 FPS
[ ] Docked mode resolution: 1080p output
[ ] Mode switch (dock/undock) tested during gameplay
[ ] HD Rumble implemented (required for Joy-Con games)
[ ] Home button press handled (game pauses gracefully)
[ ] Offline mode tested (all features without internet)
[ ] Japanese fonts included if shipping in Japan
[ ] Battery drain within Nintendo guidelines (6 hour minimum target)
[ ] Thermal stress test (1 hour continuous play, check for throttling)
[ ] microSD card tested (slower load times — no hang)
[ ] System applets tested: camera, news, shop overlays don't crash game

Security & Hardening for Cert

  • Never Submit Dev Builds

    Debug features left in submission builds will result in an immediate certification failure.

Build Hardening

  • 1. Remove all dev shortcuts:
    • No “press F1 to unlock all levels”
    • No invincibility debug modes
    • No achievement force-unlock commands
    • No “skip to level” console commands
  • 2. Remove all placeholder content:
    • No “TODO” strings in any text
    • No missing translation strings (should fallback to English, not crash)
    • No broken asset references (missing textures show as error in cert)
  • 3. Run the build in certification mode:
    • PlayStation: use devkit in “Testkit” mode (simulates retail behavior)
    • Xbox: enable “Retail Sandbox” mode
    • Switch: use EDEV in production mode

Robust Testing Strategies

StrategyDescription
Soak TestingLeave game running for 8–12 hours straight (memory leak detection) and in menus overnight
Stress TestingRapid controller connect/disconnect for 30 minutes, spam UI buttons
Edge CasesFull storage (no space for save) — show error, don’t crash. Network disconnect mid-session

Submission Checklist Final

Final submission checklist:

Build:
[ ] Build compiled in Release/Final mode (not Debug)
[ ] Correct version number in manifest
[ ] Platform SDK version matches required minimum

Store Listing:
[ ] Game title correct
[ ] Description accurate and in all required languages
[ ] Screenshots meet resolution requirements
[ ] Trailer uploaded (if required)
[ ] Age rating certificate uploaded (ESRB/PEGI/CERO submission done)
[ ] Content descriptor flags set correctly (violence, language, etc.)
[ ] Price and release date set

Technical:
[ ] All platform TRC/TCR/LOT items verified
[ ] Soak test passed (8+ hours)
[ ] Crash-free on all target hardware
[ ] Performance targets met on all hardware

Submit:
[ ] Upload to partner portal
[ ] Fill out submission questionnaire
[ ] Specify submission type (initial / patch / DLC)
[ ] Note any waiver requests (if any requirements inapplicable)
[ ] Confirm contact info for cert team questions

Patch Certification

Title Updates

  • Every patch requires certification — same process as initial submission.
  • Patch certification is typically faster:
    • Platform has your game in their system already
    • Only changed features need full testing (regression testing)
    • Emergency patches (game-breaking bugs) can request expedited review
  • Patch strategies:
    • Plan patch submissions 3–4 weeks before desired live date
    • Batch small fixes — don’t submit weekly (each submission takes time)
    • Test patches on the same hardware as original cert

Hotfixes & Day-One Patches

  • Day-one patch:
    • Very common — final cert changes fixed post-submission
    • Submit day-one patch immediately after initial cert passes
    • Platform approves simultaneously when possible
  • Hotfix (emergency):
    • Contact partner manager — explain severity (crash/data loss)
    • Platform holders have expedited process for game-breaking issues
    • Submit fix ASAP — document the bug and fix clearly

Key Takeaways

  • Always build with certification in mind from day one (especially save architecture and UI accessibility).
  • Implement atomic saves and graceful sleep/suspend handling immediately; retrofit is difficult.
  • Perform internal 8-12 hour soak tests before submitting any build.
  • A failed certification can cost a month of time; test thoroughly against platform documentation.

More Learn

Github & Webs