Chat Requirements
Here are my standards for a chat application/protocol. I think that (1) they are pretty simple and (2) they are rare to find in all applications. They are listed in descending order of priority (highest priority features first).
High:
Full sync: all messages (sent or received) reach all compatible devices
Full history: all past messages (sent or received) can be accessed on all devices
Persistent groups: a group can be created, named, and will persist indefinitely. Members continue to receive messages until they are explicitly removed from a group.
Cross platform: Supports 95% (two standard deviations) of users/devices (e.g., as of 2016-12-26, iOS + Android makes up 99% of the smartphone industry, but all mobile combined does not make up 95% of users: Windows and Mac desktops/laptops also matter.) Apple has about 7% market share of desktops/laptops, but of overall web browsing, covering iOS, Android, and Windows would probably cover 95% of devices.
Configurable notifications: at a granular level, notifications can be set (sound, vibrate) and can be altered by the device state (e.g., vibrate-only or silent). Missed message notification is a must.
Encryption: even if it is only traditional client/server
Efficient: enough that it doesn't kill battery when in background
Medium:
End-to-end encryption: server cannot read messages
Push-to-talk (async) voice (channel or person-to-person)
Live full duplex voice (channel or person-to-person)
Push-to-talk (async) video (channel or person-to-person)
Live full duplex video (channel or person-to-person)
Background synchronization of messages
Open protocol: interoperable with third party clients
Hotkeys: can change channel/person with only keyboard
Cloud backup: integrates with 95% of market share of cloud storage
Multi-factor auth: supports 95% of market share of multi-factor
Nice to have:
Searchable history
Perfect forward secrecy (e.g., Signal)
Push-to-talk works in toggle-to-talk mode.
Push-to-talk works in true walkie-talkie mode (immediate voice)
Web app