This document outlines the overall requirements for MyChat - a hypothetical chat/messaging system.
Introduction
This document outlines the functional and non-functional requirements for MyChat. The requirements follow the RFC 2119 standard using MUST, MUST NOT, SHOULD and SHOULD NOT.
An MVP of the MyChat service MUST include all MUST requirements.
Goals
To provide a simple yet comprehensive text-based messaging system.
Problems To Be Solved
- How do we differentiate MyChat from existing services?
- How do we scale to billions of users?
- How do we provide “realtime” messaging across multiple user devices?
- How do we secure messages at rest and inflight?
How Your Project Is Better Than Existing Solutions
- Simpler sign up process.
- Can suspend and resume messages.
- All messages are encrypted at rest and inflight and cannot be used for marketing purposes.
- Can set availability to all or a set of chat Spaces.
Vision
People can setup secure communication between trusted parties in a simple
Engineers will efficiently develop products that make the company money. Their day-to-day work environment will be consistent across engineering teams. The services deployed will be developed and tested in environments that are consistent with the production environment. They will focus on programming and not on the details of how their code gets packaged and deployed.
The developer experience will be “self-serve” and not require a cumbersome process to create new services and to acquire associated resources.
Personas
Name:
Kelly Tort
Role: End user
Age: 22
Gender: Female
Location: Provo, Utah
Education: BS - English
Preferences
- Uses mobile devices more than desktops
- Rarely uses email
- Likes to use emojis to “sprinkle” her messages
- Likes auto-completion of words when typing in a message
Objective(s): Kelly has family members and friends who she wants to keep in touch with. She wants to share what she is doing with others and to know what other people are doing. She wants a simple but secure messaging service to accomplish these objectives.
Name:
Acharya Chakrabarti
Role: End user
Age: 26
Gender: Male
Location: Walnut Creek, CA
Education: MS - Computer Science
Preferences
- Uses mobile and desktop devices.
- Uses email.
- Likes to customize his applications (e.g., dark mode, background images)
Objective(s): Acharya has family and friends all over the world he wants to stay in contact. He is concerned about security and wants a messaging service that “guarantees” privacy.
Stories
S.1 I want to choose one of my current social account identities (Facebook, Twitter, Instragram etc.) to sign up.
5.2 I want create multiple chat Spaces.
5.3 I want to invite people to join a chat Space.
5.4 I want to be invited to join a chat Space.
5.5 When I go to a new device I want my settings to be synced to the new device.
5.6 I want to be notified when I receive a new message.
5.7 I want to know which chat Space new messages are coming from.
5.8 I want to remove myself from a chat Space.
5.9 I want to remove people from my chat Space.
5.10 I want to suspend receiving messages from a specific chat Space.
5.11 I want to resume receiving messages and “catch up” with all of the messages I have not seen.
5.12 I want to know my messages are secure and not being used to track me for marketing purposes.
5.13 I want to copy messages from one chat Space to another.
5.14 I want to indicate to all or to a selective set of chat Spaces I am “away” and deliberately not responding to messages.
5.15 I want to know if someone is “typing” a message when I am in a chat Space.
5.16 I want to know when (date) a message was typed.
5.17 I want to turn off notifications of new messages.
5.18 I want to be able to search for words/phrases in messages.
5.19 I want to delete messages in a chat Space.
5.20 I want to edit a previous message.
5.21 I want to see a list of all of my chat Spaces.
5.22 I want to set my default chat Space so when I come into MyChat I am in that chat Space.
User Interface
U.1 Login/Sign up Screen (TO BE CREATED)
U.2 Create Chat Space (TO BE CREATED)
U.3 Notification of Messages (TO BE CREATED)
Functional Requirements
F.1 Must provide SSO from Google, Facebook and Instagram.
F.2 Must encrypt all messages inflight and at rest.
F.3 Must allow users to manage their own chat Spaces:
- Create, delete and suspend chat Spaces
- Allow certain people to invite others to a chat Space
- Remove people from chat Spaces
F.4 Must retain messages for a period of time (Freemium 6 months, Paid 2 years).
F.5. Must provide a way to retrieve all messages in a chat Space from given a date and time.
F.6 The latency for sending a message and receiving a message in a give chat space MUST be fewer than 200 ms.
Non-Functional Requirements
N.1 Must be cross-platform (Desktop - Mac/Windows/Linux, Mobile, Browser).
N.2 Must be “responsive” when hundreds of people are in a single chat Space.
N.3 Must provide a security audit of all components.
N.4 Must allow UTF8 characters in messages.
N.5 Must be cost effective.
N.6 Should scale to support billions of users.
Risks
- Not providing a better messaging service than is currently available.
- It is too difficult to learn and setup.
- Not scaling to initial demand.
Future Iterations
- Provide a “disconnected” mode that allows messages to be created and sent when reconnected.
- Support multiple languages (PFIGS).
- Allow users to send messages across chat Spaces.
Notes
- Need to setup a user experience exercise to evaluate UX.
- Do we need to allow users to “theme/skin” the chat Spaces they create?