- Problem Hypothesis
- Product Value
- Personas and Stakeholders
- Value Stories
- Releases
- Roles
- Sprints & Meeting Schedule
- Technologies
- Stories and Tasks in ZenHub
University is full of hard work and tough challenges. Unfortunately, this experience is made more difficult without a centralised source for course information. The current solution that students have adopted is combining online spreadsheets, rare and vague university released evaluations and word of mouth.
'Smart Course' aims to solve the problem described above, by allowing university students to evaluate, ask questions and share general information about university courses all year long. Whether it be in the midst of subject selection time, or the week before finals, the service is always available.
- University Students - wants to learn more about courses.
- Course Administrators - wants to ensure there is no false information about courses.
- Teaching Assistants (TAs) - wants to provide answers about courses.
- Lecturers in Charge (LiCs) - wants to provide answers about courses.
- University Officials - wants to understand how students feel about courses.
In addition to the personas described above, the following people are stakeholders:
- Developers (Nuno, Alex, Travis and Luke)
- Client/Customer (Bruno)
Priority levels:
- Must have - a necessity to make the specified release.
- Should have - an expectation to make the specified release.
- Like to have - a bonus to make the specified release.
Releases (more detail in section 5):
- Minimum Viable Product (MVP)
- Final Product
Note: Although specified in the user stories below, priority levels are subject to change.
Students and teachers should be able to share specific information about a course.
As a student, I want to be able to ask a question about a course, so that I have access to information I didn't have previously.
- Priority: Must Have
- Release: MVP
As a student or lecturer, I want to be able to answer questions posted about a course to help the learning community.
- Priority: Must Have
- Release: MVP
As a student, I want to be able to view other people's questions and answers about a course, to resolve my own issues or to learn something new about a course I am interested in.
- Priority: Must Have
- Release: MVP
As a student or lecturer, I want to express the usefulness or relevance of a question/answer by upvoting it.
- Priority: Must Have
- Release: Final Product
As a student, I want to quickly see moderator (lecturers, TAs) endorsed and highly upvoted answers to a given question, so I have some level of assurance.
- Priority: Should Have
- Release: Final Product
As a question answerer, I want to quickly see the most relevant and highly upvoted unanswered questions, to be able to promptly respond.
- Priority: Should Have
- Release: Final Product
As a reliable contributor, I want my answers to be given more weight in the displayed ordering of answers, to reward quality community involvement.
- Priority: Like to Have
- Release: Final Product
Students and lecturers should be able to get a general idea about past course experiences.
As a student I want to be able to review a course that I have previously taken so that I can provide an evaluation of that course for others to view.
- Priority: Must Have
- Release: MVP
As a student I want to be able to read reviews about a course so that I can get an understanding of how others perceived the course.
- Priority: Must Have
- Release: MVP
As a student I want to comment on a review so that I can have further discussion about the course.
- Priority: Must Have
- Release: Final Product
As a student I want to up-vote a review so that I can provide feedback that it was useful and relevant.
- Priority: Must Have
- Release: Final Product
Users should be able to expect some sense of identification and authentication.
As a visitor without an account, I want to be able to view and search the site's content.
- Priority: Must Have
- Release: MVP
As a visitor without an account, I want to be able to ask questions so I don't have to create an account to do so.
- Priority: Must Have
- Release: MVP
As a student, I want to be able to create an account with a university email address, so that I can unlock more site features.
- Priority: Must Have
- Release: Final Product
As an enterprise customer, I should be able to request an enterprise account with an application form, so that I unlock unique site features.
- Priority: Like to Have
- Release: Final Product
As a user with an account, I should be able to log in and log out of my account with a username and password, to access my tailored site experience.
- Priority: Must Have
- Release: Final Product
As a student, I should be able to retrieve my account password via email, so I don't lose account access.
- Priority: Should Have
- Release: Final Product
As a user, I should be able to set up a personal profile page that contains personal information for community interaction.
- Priority: Should Have
- Release: Final Product
As a user, I should be presented with content based on my profile (including an anonymous home page), so that I find information that might be of interest to me.
- Priority: Must Have
- Release: MVP
Users expect access to the application from outside a development environment.
As a developer I need to decide on and build a technology stack that makes sense given the scope of the project, so that the application meets its requirements.
- Priority: Must Have
- Release: MVP
As a developer, I want to design a schema that best collates related data so users are provided with relevant data about courses.
- Priority: Must Have
- Release: MVP
As a user I want to be able to access the application from a persistent URL, so that it's easy to remember and access.
- Priority: Must Have
- Release: Final Product
As a user I want to be able to access the application from a remote hosting service or with dedicated server infrastructure, so that I can access the site globally.
- Priority: Must Have
- Release: MVP
As a developer I want to deploy updates to the application remotely, so user's can experience new features and improved performance.
- Priority: Should Have
- Release: Final Product
The application should make it easy for users to find what they are looking for and view it in a clear and easy fashion.
As a user, I should be able to rely on a consistent, attractive format to navigate the site, for a natural and pleasurable experience.
- Priority: Must Have
- Release: Final Product
As a user, I want to be able to search for a course by a course code/name, to quickly find information about a specific course.
- Priority: Must Have
- Release: MVP
As a user, I want to be able to search for course information via key descriptors, to get the most relevant information to me.
- Priority: Like to Have
- Release: Final Product
As a user, I should be able to access the web application from a variety of devices, to access the application at different locations and support different users.
- Priority: Should Have
- Release: Final Product
As a user, I should be able to rely on w3c standards for accessibility, to ensure I can easily navigate the application.
- Priority: Must Have
- Release: Final Product
As a user, I should be able to get help about how to use the site, to then be able to use it to its fullest potential.
- Priority: Should Have
- Release: Fina Product
The application should provide adequate documentation and compliance to make it clear both how the application is used, the terms of service and behaviour, and any licensing or attribution requirements.
As a developer I want to know the licensing so that I can take appropriate steps to comply with licensing of software and relevant attribution of assets.
- Priority: Must Have
- Release: Final Product
As a user, I want a EULA & T&C so that I know the behaviour that is expected of myself when using the software.
- Priority: Must Have
- Release: Final Product
As a user, I want a basic readme or usage documentation so that I can refer to it if I need to.
- Priority: Like to Have
- Release: Final Product
Users expect a certain degree of quality about both the responses being made and safety against, harsh, unfair, or unwarranted critique.
As a user, I want to be able to moderate content by reporting offensive, inappropriate or defamatory material.
- Priority: Should Have
- Release: Final Product
As a user, I want to have someone to report issues to regarding offensive posts, irrelevant discussion, fake news, etc.
- Priority: Must Have
- Release: Final Product
As a user, I should have the ability to display as little personal information as is required and only opt in to displaying extra information, with the option to delete my data.
- Priority: Should Have
- Release: Final Product
As a user, I want to avoid reading profanity which could offend me or others.
- Priority: Like to Have
- Release: Final Product
As a user, I want to be informed of any possible/known data breach where my personal information could have been stolen.
- Priority: Should Have
- Release: Final Product
An enterprise user should be able to get specific bespoke data from the application.
As an enterprise user, I should be able to request specific information from authenticated endpoints about feedback and questions related to courses offered at my institution.
- Priority: Like to Have
- Release: Final Product
As an enterprise user, I should be able to push updated course information/offerings to 'Smart Course', so there is no outdated information.
- Priority: Like to Have
- Release: Final Product
A release is when we merge code to master, and is a (at least partially) working product. The goal is to do the first release very early and then iterate.
We'll have several releases throughout the lifetime of the project; something along the lines of:
- Prototypes (as early as possible):
- Minimum/incomplete features.
- Testing integration of features.
- Minimum Viable Product (Week 8/9):
- Basic minimum requirements met.
- Final Product (Week 12):
- Thoroughly tested and polished.
We have defined our MVP by the following user stories (see details in section 4):
- Ask Questions
- Answer Questions
- View Questions and Answers
- Add a Review
- Read a Review
- Design an Appropriate Database Schema
- Anonymous Site Visitor
- Search by Course
- Remote Hosting
We have defined our group's agile roles as follows:
- Scrum Master - Alex
- Product Owner - Nuno
- Developers - Travis, Luke, Alex and Nuno
Each sprint is one week long (Thursday to Thursday). The goal for each sprint is to choose a subset of user stories to work on and ideally finish within that sprint. To enable this to occur in an efficient fashion, we have planeed for both standups and sprint reviews.
The goal of the standup is for each team member to answer the following 3 questions:
- What have I been working on?
- What am I working on next?
- Is anything in my way?
Due to inability for the team to meet face-to-face throughout the week, our standups will occur in our dedicated slack channel (#standups), where each person will start their own thread when answering the questions. Discussion can then occur in the corresponding threads. We'll do these 3 times a week, on these days:
- Friday (8pm)
- Sunday (8pm)
- Tuesday (8pm)
Every Thursday, after the lecture, we'll do a 'Sprint Review' and organise the next sprint. The goal of this meeting is to:
- Demo new features and make sure everyone in the team is up to speed with what's going on across the project.
- Do a release if appropriate.
- Evaluate the success of the sprint that just ended.
- e.g. looking at burndown chart, seeing how many user stories were completed, etc.
- Organise the next sprint:
- Re-estimate tasks that took longer than expected, and possibly roll them over into the new sprint.
- Determine new tasks/stories to be tackled in next sprint.
- Determine the success criteria and estimates for each task/story.
- Allocate tasks to people.
Management:
- ZenHub - Agile project mangement tool.
- GitHub - Code base hosting and organisation.
- Slack - Discussion forum and standup location.
Front End:
- Vue.js - JavaScript framework for building UI.
Back End:
- Node.js - JavaScript run-time server environment.
- Express.js - Web application framework for Node.js.
- SQLite - Database for all application data.
Testing:
- Travis CI - Continuous integration service for automated testing.
We have added all the stories from section 4 into ZenHub, as seen in the image below.

At the start of a sprint, we select what stories we are going to work on and break them down into tasks. Here is an example from the start of our current sprint (Sprint 4).

A story contains:
- A description in the form "As a ___ I want to be able to ___ to ___."
- Acceptance criteria determined at the start of a sprint.
- Tasks associated with the user story, each with corresponding estimates.

A task contains:
- A task description, which clearly states what is being addressed.
- The people assigned to the task, which is generally determined by equally splitting tasks so everyone has the same total estimate of work for the sprint.
- The sprint it is a part of.
- An estimate, which is determined at the start of each sprint, as a part of a team discussion. We consider factors like the experience of the assigned developers and overall difficulty.
- A feed of all events associated with the task. This includes things like task detail updates, pull requests and general discussion.




