Examples
Some contrived (but reasonable) examples. Written by the instructor, over coffee, too early in the morning.
Recipe tracker
Image courtesy of Recipe Keeper
Users
A group of friends that want to cook together e.g., roommates.
Problem
How do you keep track of what recipes you have tried, and which ones each person liked?
Proposal
A recipe planning and tracking application that allows users to:
- Enter recipes (imported from a recipe site or manually entered).
- Browse a collection of recipes, with pictures. Search your recipes and friends recipes.
- Rate recipes, and view what other users have rated.
- Generate a list of “most wanted” recipes, or “most popular” after the group has tried them.
- Extra: track food allergies and support automatic filtering of recipes.
Design
Technical aspects to consider.
- Android application, with screens for all of this functionality
- Multi-user, so each person has a profile (login/logout/edit).
- Local database for caching details (SQLite & file storage)
- Remote database for storing user data and recipes (Firebase)
- OAuth authentication using Google accounts (also Firebase)
Software design tool
Image courtesy of Visual Paradigm
Users
Software developers that are interested in collaborative design.
Problem
Collaborative tools aren’t tailored towards software design, so we end up trying to create UML documents in Google Docs (awkward). UML tools often don’t support collaborative, which would be incredibly valuable!
Our goal is collaborative UML drawings.
Proposal
An online tool that lets multiple people work together to draw UML diagrams in real-time.
- Can have multiple drawing canvases; on launch choose which one to open and work on.
- Canvases should have a name, date-created, date-edited. Anyone can edit anything.
- Drawing tools: draw shapes; draw lines to connect them; move shapes; change properties.
- Export canvas to JPG (PNG, other formats) for use in other applications.
- Extra: Templates so that you can draw a plain box-arrows diagram, or a specific UML diagram e.g., class diagram, component diagram. (Do not support all UML, but a small subset; focus on infrastructure to add more later).
- Extra: Support more diagrams by expanding the templates!
Design
- Desktop tool, since it’s more precise for drawing.
- Multi-user, so each person has a profile (login/logout/edit).
- Investigate
canvas
classes in Compose for drawing arbitrary shapes. - SQL database, since we expect a large collection of templates (predefined shapes) and think that’s a better approach.
- Will likely need a way to handle real-time updates for multiple users working on a document e.g., WebSockets.