Skip to content

Latest commit

 

History

History
107 lines (66 loc) · 6.38 KB

instructions.md

File metadata and controls

107 lines (66 loc) · 6.38 KB

Web Application Exercise

A little exercise to build a web application following an agile process.

Technology stack

We will use a Python-centric web application technology stack, consisting of:

  • HTML & CSS for the front-end
  • A Python back-end using flask
  • A MongoDB database connected to the Python back-end using pymongo

Credentials for connecting to the database must be stored in a .env file.

  • This file must not be included in version control, since it contains sensitive private data.
  • Share this file among teammates (and admins/managers) using the team's messenger system.
  • Use the dotenv or similar module to retrieve values from this file within code.
  • Include an env.example file in the repository that shows the format of the .env file that should be created, but includes only dummy data instead of the real values for each environmental variable.

If your application requires user authentication, use the flask-login module, which makes it relatively simple to implement user accounts.

Design

The design of this web application must be suitable for use on a mobile phone. The design need not be responsive and the design need not look great on a tablet or desktop/laptop computer.

You are not required to produce wireframes, design mockups, or a clickable prototype for this application. However, you are encouraged to do so if you wish.

The application must consist of at least 6 different screens.

  • at least 2 of these must display data retrieved from the database.
  • at least 1 of these must allow the user to add data to the database.
  • at least 1 of these must allow the user to edit data in the database.
  • at least 1 of these must allow the user to delete data from the database.
  • at least 1 of these must allow the user to search for data in the database.

Agile development

Teams must work following an "agile" methodology. While there are exist variety of ways teams often implement so-called agile development, in our case, this means specifically the following:

Discord channel

Teams must create a public channel in the course Discord server to use for team communication

  • teams are expected to self-organize and create and join the channel themselves
  • name the Discord channel after your team, e.g. team-7.

Product vision statement

Teams must write a product vision statement for their web application and place it in the README.md file. This should be one-sentence description of the project.

User stories

To begin, teams must develop a set of user stories that define the product they are building.

  • user stories should be written in the form "As a [user type], I want [some goal] so that [some reason]."
  • user stories should be created as Issues in the team's GitHub repository.

A link to the Issues page should be included in the README.md file.

Document the steps necessary to run the software

The README.md file must include any steps that are necessary to clone, configure, and run the software. These steps must be exhaustive so that anyone who views the project on GitHub has all the information they might need to get the software running on their own local machine.

Incremental work

The project will consist of two sprints, i.e. increments of work, each of which will last for one week.

  • towards the end of the first sprint (but no later than 2 days after the completion of the first sprint), teams must have scheduled a meeting with a stakeholder (i.e. professor, tutor, or grader) to demo and solicit feedback on the work done so far.
  • at the end of the second sprint, teams should be prepared to demo the project to a wider audience if requested.

Task boards

  • for each sprint, teams must maintain a "task board" where they track the progress of their user stories - see example screenshot below.
  • task boards should be created as Projects in the team's GitHub repository - one for each sprint.
  • prefix the name of each project with the team name or number, followed by the sprint number, e.g. "Team 7 - Sprint 1", "Team 7 - Sprint 2", etc.

A link to the Projects page should be included in the README.md file.

simple task board

Daily standups

Teams must hold 3 or more "daily" standup meetings per week.

  • these meetings must last no longer than 10 minutes
  • during these meetings, each team member must answer three questions:
    • what have I done since last meeting?
    • what am I working on now?
    • what problems are blocking me for continuing?
  • at the conclusion of each daily standup, one team member must create a single post in the team's Discord channel that documents each member's answers to each of these questions.
  • any blocking problems must be immediately addressed by the team; if the team cannot solve it internally, it must be brought to the attention of the manager (i.e. the professor).

GitHub repository

Team members are required to work from a single GitHub shared repository.

  • all team members are expected to contribute to the main code of the project.
  • each team member must be able to push and pull to and from the shared repository.
  • each member's code and workflow contributions will be tracked, so team members must use their own accounts when making code changes.
  • code changes must be done in branches in the same repository, not in the main branch and not in forked repositories.
  • when a code change is complete, the branch should be pushed to GitHub and a pull request should be created using GitHub's interface. Another team member must approve the pull request and merge it into the main branch if it is good code. All team members are expected to share the burden of reviewing and merging pull requests opened by teammates.

Submitting

The project must be submitted by pushing to the GitHub repository. The main branch will be considered the final code. Any .env files must be submitted to admins/managers via the team's messenger channel.

Teams do not need to deploy the application to a server. It must simply work when run locally. However, if an online deployment is desired, we recommend hosting it with Digital Ocean (referral link with discount code).