Menu

I recently was invited to be the team leader for a collaborative project that would be used in the education industry. This tool, entitled Petition-Pronto, will be used by students to submit petitions and by faculty to approve or disprove them at Allegheny College. While working on the project I created and maintained an SQLite3 database, wrote Python code, used the GitHub flow model, and led my team.

Tentatively, Petition-Pronto is expected to be used by students and faculty at Allegheny Collge during the upcoming academic year. Petition-Pronto is a website where students can fill out a form with their information to submit a petition to a specified academic department's faculty. Students could write their petitions to change, for instance, their graduation requirements or substitute one class in the place of another. Once the form is submitted, when faculty members of the specified department login to the website, they will see it appear in the unreviewed petitions section of the homepage for logged in users. They can then click on an "Inspect" button that resides next to the basic petition information, which will display more detailed petition information along with the petition text itself. On this page, they can then approve or disprove the petition. Once the petition is reviewed by all the department's faculty members, an email will be sent to the students and faculty members who reviewed the petition, letting them know the result (whether it was approved or not) of the petition voting.

This tool will greatly improve upon the current petition process, where students must email their petition to a faculty member and wait till all the faculty members meet to vote on the petition or respond to the email. The student then has to follow up with the faculty if they don't remember to let them know the result of the petition voting. Now, everything can be done online and the student will be let know of the petition voting decision as soon as possible. This will make this educational process much more efficient at Allegheny.

Petition-Pronto will be apart of a suite of tools created by the GatorEducator organization on GitHub. This suite of tools will be used for the enhancement of the education experience at Allegheny College. Within this suite of tools, there are several similarly-minded tools being developed by other groups. These tools include a Course Survey tool, which allows students to share their concerns about a course to the instructor, an Academic Advising tool, to improve the communication between student and advisor, and an Interactive Quiz tool, which will allow instructors to create more customized quizzes for their students. Additionally, an Institutional Review Board Checklist tool is being developed which will allow students to get their proposals reviewed by the College's IRB. These tools will join GatorEducator's GatorGrader tool that is in use at Allegheny College and which automatically checks the work of student programmer and writers.

While working on Petition-Pronto, I completed a variety of tasks. One of the first tasks I completed was creating an SQLite3 database and schema for tables that would be used by the tool. After this, I began to write Python code that would interact with this database. One of the first things I implemented was Python support to connect the user login page on Petition-Pronto's Flask-based website, which interested users can run locally using the command "python3 app.py", to the SQLite3 database. Afterward, I wrote code to get the petitions being stored in the database for a specified department, which was used for displaying student petitions to a faculty member. Additionally, I implemented code to create new user accounts in the database, which is used by Admin faculty on the website, and for users to change their passwords in the database.

The most important code I implemented came when I wrote code that allowed faculty users to submit their approval decision for a petition. With this, I also implemented code that stopped faculty from voting on the same petition twice and code that determined if all the faculty had voted. If all the faculty voted, my code would then determine if the petition was approved or not by seeing if the majority vote was in the form of an approval vote. Once an overall approval decision was made, my code then connected with code written by my other team members to send emails to students and faculty. Additionally, I also wrote Python code that allowed petitions to be added to the database when a student filled out a form on the website and code that deleted a petition from the database once it was completely reviewed.

Here is the schema being used in the SQLite3 database:
                  
                    CREATE TABLE User_Table (
                      id INTEGER PRIMARY KEY,
                      email TEXT NOT NULL UNIQUE,
                      password TEXT NOT NULL,
                      role TEXT NOT NULL,
                      department INTEGER REFERENCES Department(ID)
                    );
                    CREATE TABLE Department (
                      name TEXT NOT NULL UNIQUE,
                      ID INTEGER PRIMARY KEY
                    );
                    CREATE TABLE Student_Petition (
                      name TEXT NOT NULL,
                      email TEXT NOT NULL,
                      petition TEXT NOT NULL,
                      department INTEGER REFERENCES Department(ID),
                      petitionID INTEGER NOT NULL
                    );
                    CREATE TABLE Approval_Responses (
                      petitionID INTEGER REFERENCES Student_Petition(petitionID),
                      numOfResponses INTEGER,
                      numOfApprovals INTEGER
                    );
                    CREATE TABLE Petition_Voters (
                      petitionID INTEGER REFERENCES Student_Petition(petitionID),
                      ID INTEGER REFERENCES User_Table(id)
                    );
                  
                  

As a team leader for this project, I also completed a variety of managerial tasks. For instance, I organized meetings between group members, solved any small disputes that may have arisen, and assigned team members tasks that related to their skill levels so that my team could successfully create a working tool. Additionally, I also used the GitHub flow model throughout this task to create issues for bugs and new features that were needed. I also created feature branches for all the improvements I added to the tool along with detailed Pull Requests to describe the new features I was adding. I also reviewed the Pull Requests of my fellow teammates to ensure code functionality and quality. Moreover, I also wrote documentation, such as that residing in the README for the project.

There were a variety of valuable experiences for me during this project. I learned more about the software engineering process and creating new industry-use software. I also learned more about creating and maintaining databases with SQLite3, while learning more about using Python to interact with these databases. Additionally, I was able to gain experience leading a team of motivated individuals collaborating on a software project. Also, since GitHub was used for collaboration between team members and for the project itself, I learned how to better use the GitHub Flow Model. Overall, this project taught me more about databases, creating industry-use software from scratch, and managing a team to create successful outcomes.

Header Image: CC BY-SA 3.0], from Wikimedia Commons