Cafe Haven
Abstract
Ever been out with your friends, looking for a new cafe to try out, but stuck finding one that’s just right? Introducing Cafe Haven - an application designed to help you find the perfect cafe in an instant!
With Cafe Haven, you can see nearby cafes in your vicinity using a map-based interface. And if you’re looking for a specific place - don’t worry - search through the app’s vast cafe directory to find exactly what you need. Additional features include the ability to browse a particular cafe’s menu, opening hours as well as their reviews. You can even filter cafes based on ratings or location and save your favourite ones.
This app will be available both on mobile and as a web app, allowing it to reach as many users as possible. The quality attributes are Availability, Scalability and Extensibility.
Author
Name: Nawal Ahmed Nazim
Student number: 46866772
Functionality
This will be a mobile and web app. The main features are:
- User Authentication
- Signup and Login
- Basic Account Info (Contact details, etc)
- Cafe Search
- Map View: A map interface which shows nearby cafes
- Search Directory: Search for a particular place
- Filter: Users can filter the places that appear on the map/search result by ratings/location/opening hours
- Cafe Profile: Each cafe has a basic info profile which shows when a user clicks on it
- View Menu
- View Opening Hours
- View Ratings/Reviews
- Add Ratings/Reviews
- Bookmarks
- Save: Users can save/favourite places to come back to later.
- Folders: categorise saved places into different folders for easy access
- Social
- Friend feature: Follow other users
- Send places of interest to your friends
Scope
For the MVP, the focus is only on developing a mobile application. The features to be included in the MVP are:
- User Authentication
- Cafe Search
- Map View: A map interface which shows nearby cafes
- Search Directory: Search for a particular place
- Filter: Users can filter the places that appear on the map/search result by ratings/location/opening hours
- Cafe Profile: Each cafe has a basic info profile which shows when a user clicks on it
- View Menu
- View Opening Hours
- View Ratings/Reviews
Quality Attributes
The key quality attributes I’ve chosen are:
Availability
- This refers to making sure that the app will be accessible whenever users need it. It involves minimising downtime and making sure everything works seamlessly.
- This attribute is important since users will generally use the app when they are on the go. They may also be using it at different times of day (early in the morning, late night, etc) - so the app should be up and running at all times.
- This can be achieved by having redundancies within the system. For example deploying in multiple zones, so that even if one goes down there will still be another up.
Scalability
- This ensures that the system is able to handle an increasing number of users without compromising performance.
- Important as more users start using the system or even during peak usage hours (lunch time, etc), the app should be able to accommodate hundreds of searches without slowing down.
- If users experience slow loading times, they may get frustrated and won’t be as likely to continue using the app.
- This can be achieved by deploying on cloud platforms, and using their tools to dynamically increase/decrease the number of running instances of the app. Then it can accomodate any number of users at any given time.
Extensibility
- This relates to making sure that new features can be added to app without breaking any existing functionality or completely refactoring everything.
- Important as the MVP is minimal and developers may want to add more features down the line. This would allow them to quickly code and deploy new features.
- This can be achieved by having a well-structured API and using microservices.
Evaluation
The main methods used to test that the system achieved the attributes are:
1. Functionality Testing
- Verify that users can login and logout.
- Ensure that the Search Cafe Feature works properly. The main things to test are:
- The map loads
- The users location and nearby cafes are marked on the map
- Verify that the search results are accurate
- Verify that the filter works as expected
- Ensure that cafe pins can be clicked on and they display all the basic information about that cafe
2. Availability Testing
- Simulate a server failure by shutting down an active instance and observing how the system responds.
- Success if the replica servers take over.
3. Scalability Testing
- Use a load/performance testing tool to simulate a large number of concurrent users and observe how they system responds. For now, a peak load may be 5000 users at the same time.
- A success if the app instances auto-scales accordingly and response times are acceptable, for searches <= 1s response.
4. Extensibility Testing
- Use a modular coding approach and ensure that components are generally independent of each other.
- Implement unit tests, after new features are added, run these tests to ensure that existing functionality still works as expected.