What to consider when making an chat app
For years, I’ve used apps like Whatsapp and Skype while taking for granted all the little features that make the apps so great. There are so many features that I expect from a modern chat app and would consider an app incomplete if they were missing. After developing apps for a couple years and attempting to make a chat app of my own, I’ve come to learn about all the little nuances I’ve never noticed while I was just a user of an app.
The nuances that makes some apps amazing usually goes unnoticed but are immediately noticed when it’s missing. The purpose of this article is to bring to light the little optimizations that the brilliant developers of Whatsapp built to improve the user experience for their app. I will be going through some of the things that I believe make an amazing chat app by using Whatsapp as an example since it’s my favorite. The list I’m about to go through does not only apply to only chat apps but to any modern app.
The recent privacy and data security issues that have surfaced over the past few years has made the general public very aware about what’s happening to their information. Whatsapp provides end to end encryption for all messages, this means encrypting texts, images, videos, gifs and everything else that is moved between users. As a lone developer, building a rigorous, secure encryption system is no easy feat and requires a hefty amount of work and a solid understanding of data security. Encryption is important because app users can rest easy knowing their data is safe from malicious intent.
All data on Whatsapp, including texts, photos, videos, gifs and files are stored/cached locally on your phone with a SQlite database. As a result of storing data on the phone, all chat information is loaded instantly with absolutely no loading screens. The SQlite database is used as a single source of truth for the app and all the data is loaded from the SQlite database.
The local data is also kept in sync with the Whatsapp’s database at all times providing updates when a new message is sent. Whatsapp also syncs your data during inactive hours to provide a non disruptive user experience. As most app developers know, building an optimized app that syncs network data with local data can be a challenging and time consuming operation. Developers can forgo the local data but building a chat app that with only network data can result in a choppy, “loading” filled app that provides a poor user experience.
Keeping features in app:
While using Whatsapp, you might have noticed that you never leave the app and nearly all operations are supported on the app. You never have to leave the app for website links, videos, gifs, camera, photo gallery and etc. For a developer, building an in app camera, photo gallery or web view for links is a time consuming operation that can drastically increase the development time for the app.
All long running tasks such as media uploads, data syncing run in the background without the user ever knowing. But at the same time, the app will let the user know if something has gone wrong and if it needs the user’s attention. Background tasks result in a good user experience because it doesn’t slow down the app and the user doesn’t have to concern themselves with unnecessary information. Background work requires a little more attention from the a developer to build successfully especially if the background task has to communicate it’s progress to the user.
Phone number syncing:
One of the challenges I had with building my chat app was to build an intuitive way of adding friends to your chats. Most of my ideas were clunky or non-intuitive and resulted in a not too perfect user experience. Whatsapp removes the need for a use to find their friends because it automatically syncs with your phone contacts and there is no need to go through a long registration process. Adding and chatting with friends is a seamless experience that requires no work from the user. There’s quite a lot of work that goes in the background to achieve the syncing of contacts and would be a challenge for most developers.
The minimalist design of Whatsapp is what I believe to be it’s strongest aspect of Whatsapp. All the important features a user might need is available right away and the user doesn’t need to go out of their way to look for it. Features such as deleting messages are slightly hidden but very easy to find if a user decides they need it. What makes a modern app brilliant is hiding a huge layer of complexity behind a simple facade which results in an optimal user experience. For most developers, building such an app takes copious amounts of trial and error and user testing.
Whatsapp monitors the presence of it’s users and keeps track of when they were last online and offline. Text messages also have a presence and users are notified if a message has been sent, read or delivered to the other members of the chat. The presence system keeps the user updated about what the status of the app at all times and drastically improves the user experience. Building a presence system can be a daunting task and would involve live updates and automatic syncing.
Whatsapp allows users to build up their personal profiles and group chat profiles. This gives the user a sense of individuality and adds some color and character to the app. Platforms are successful because they allow users to express themselves and use the tools they are provided as they see fit. Building a solid profile system on top a chat and presence system can once again drastically increase the development time for a chat app.
Notifications can make or break an app, there’s nothing worse than constant and useless notifications. Whatsapp groups notifications, provides previews, allows the user to reply in the notification and doesn’t bombard the user with hoards of notifications. Building a strong notification system requires proper analytics and user testing to ensure users aren’t losing interest in the app.
Whatsapp takes most situations that a user might encounter into account. Whether it’s a slow internet connection, no internet, failed uploads or any other errors, the user always knows what’s going on. Whatsapp will attempt to resend a text several times if there is no internet connection or wait till internet connection is restored before attempting again. Like the other aspects in my list, responsiveness once again increases the development time of the app.
What I’ve mentioned in this article only scratches the surface of what goes on in Whatsapp or any other amazing app. A 10 paragraph article could never hope to capture all the optimization that the Whatsapp developers have made over the years. With all the aspects I’ve mentioned in this article, a simple chat app could easily turn into a 4 month project if a full solution is required. I hope I’ve brought into the light the plight of humble app developers. As app developers our job is to increase the complexity on our end so that the users of our apps can have a flawless experience.