Signaling state має бути явним
Signaling координує offer/answer, ICE candidates, call state та identity. Це має бути state machine, а не набір socket messages.
Явні transitions прибирають races: duplicate offers, stale candidates, late disconnect events. Потрібно зберігати достатньо state для recovery після reconnect.
TURN capacity — частина reliability
P2P connectivity не гарантована. Corporate networks, carrier NAT і firewalls часто потребують TURN relay. Якщо TURN слабкий, продукт падає саме для найскладніших користувачів.
Трекати потрібно relay percentage, bandwidth, region, auth failures та allocation latency. Capacity planning базується на реальному media traffic.
Transport encryption ≠ product E2EE
WebRTC шифрує media in transit, але це не те саме, що application-level E2EE. Якщо сервіс не повинен мати доступу до media, потрібні окремі key management і frame encryption.
Визначаються identity binding, key establishment, rotation, replay protection та recovery. Crypto має переживати reconnect і device changes.
Reconnect і network migration проєктуються окремо
Мобільний користувач переходить між Wi‑Fi/cellular, background/foreground та втрачає network. Потрібні ICE restart, signaling reconnect, session timeout і UI recovery.
Вимірюйте recovery time і success rate. Технічний reconnect без відновлення UI — все одно failure.
Media quality потребує telemetry
Проблеми realtime часто не кидають exception. Потрібні packet loss, jitter, RTT, bitrate, frame rate, freeze duration, audio levels та candidate pair.
Client telemetry корелюється з signaling і TURN logs. Тоді “поганий дзвінок” перетворюється на конкретний root cause.
Release gates мають включати погані мережі
Unit tests не відтворюють carrier NAT, packet loss чи permissions. Додайте network degradation, background transitions, Bluetooth, camera switch і TURN-only scenarios.
Security regression має покривати key rotation, replay/sequence protection і failure recovery.