Project Plan - Phantawat/ku-polls GitHub Wiki

Author: Phantawat
Revised: 29 Aug 2024

Statement of Work

The project aims to develop a web application for conducting polls and surveys tailored to the needs of the KU community, as outlined in the Requirements. The application will be developed in Python and will be compatible with Windows, Linux, and macOS environments.

Development Process

The development will follow an iterative approach, consisting of four one-week iterations. Each iteration begins on Monday and concludes on Sunday, allowing for regular review and adjustment of the project's progress.

Project Documents

All project-related documents, including technical specifications, are stored in the project wiki on GitHub. The key documents include:

Project documents include:

Tasks and work items for each iteration are managed via a GitHub Project attached to the repository, which includes a Task Board for tracking progress. Defects and issues are recorded using the GitHub Issue Tracker.

Workflow

Each iteration follows a structured workflow:

  • Monday: Review and update the Vision, Project Plan, and Requirements. Define the iteration's goal and at least one milestone in the Iteration Plan.
  • Midweek: Review and revise the application design as needed for new features. Major work is outlined in the Iteration Plan and documented in the wiki.
  • Daily: Define tasks in the Project Backlog on GitHub and track them using the Task Board.
  • End of Week: Code is managed using GitHub Flow. A new branch is created from main at the start of the iteration, and work is committed to this branch. After testing, a Pull Request is opened for final review. Upon approval, the branch is merged into main.
  • Continuous: Defects and issues are logged in the GitHub Issue Tracker, with tasks automatically linked where applicable.

Technology and Tools

  • Python programming language to implement the application.
  • Django web framework.
  • Github for source code repository, issue tracking, and automatic testing.
  • Github Wiki for project documents.
  • Github Project for backlog, task planning, and task boards iteration work management.

Timeline

Week Major Work and Features
1 Learn fundamentals of creating a web application using Django.
App displays a list of recent poll questions.
Detail page for each poll question displays the question and a list of choices.
Visitor can choose a poll question and submit a "vote" on it. His/her selection is counted toward the total.
The poll questions, responses, and vote count are saved in a database.
A UML class diagram of the domain model is added to project wiki.
2 Add an end date for polls, allowing votes only until the end date.
Improve navigation with added links for better page transitions.
Externalize configuration data for security and portability using python-decouple.
Automate running of unit tests and ensure tests are executed on code push to GitHub.
Apply basic page styling using CSS.
3 Add authentication to require users to log in before voting.
Allow authenticated users to view and change their previous votes.
Unauthenticated visitors can view polls and results, but cannot vote.
4 Create data fixtures to initialize users and polls data.
Ensure application is runnable on different operating systems.
Create and test installation instructions.
Review, document, and clean up all code.

Milestones

Iteration Milestone
1 Application displays a list of active poll questions and detail pages with the choices available for each question.
A visitor can select and submit a choice ("vote") for a poll question.
Application correctly shows total "votes" for each choice in each poll. The results are persistent across app restarts.
Domain model established and recorded in wiki as a UML diagram.
2 End date functionality for polls is implemented and functional.
Navigation links are improved, allowing access to any page without using the browser "back" button.
Configuration parameters are externalized, and sensitive data is managed securely.
Unit tests for is_published and can_vote methods are implemented and run automatically on GitHub.
3 Revised domain class model that includes User and Votes owned by a User is recorded on the wiki.
Username-password authentication works.
Users are required to authenticate in order to vote.
4 Application runs on platforms meeting the software requirements.
Installation includes data to easily create initial user credentials and poll questions.