As college students, time management has always been one of our greatest drawbacks. Adjusting to a totally new environment while still maintaining a healthy balance between studying and relaxation can be difficult. Moreover, creating a schedule one can adhere to is tough. Often times, we find ourselves adding too many events and not finding times for breaks (leading to burn out) or not adding enough events and giving ourselves too much free time. With the help of Pyde, anyone who struggles with time management can better create schedules that are optimal in terms of their balance between work and play. Additionally, Pyde considers which tasks are more important and how much time (approximately) should be spent completing each one. These optimal schedules offer more clarity to the user, allowing them to focus more on what they are doing at the moment rather than what they will be doing next.
What it does
Pyde is a new way to create schedules that can automatically generate your optimal schedule and sync to your Google Calendar. Pyde takes into account fixed or flexible events, an event’s priority level, an event’s expected duration, and more to maximize your productivity.
How we built it
The front end was created with React.js, Bootstrap, and Material UI while the backend was created using Python, Flask, and CockroachDB. Specifically, to generate an optimal schedule, we employed a genetic algorithm approach that initially started with a large population of random schedules and gradually began to learn how certain schedules performed better than others. Schedules were judged on four factors:
- The ability to complete high priority tasks first
- Allotting small breaks between different events/tasks
- Having a decent amount of consistency in tasks (i.e. you should complete one task at a given stretch as much as possible)
- Allotting an appropriate amount of time for each event based on how long the user intends on doing it.
The benefit of a genetic algorithm is the ability to create optimal schedules for newly seen data (i.e. new tasks) in very short periods of time as opposed to reinforcement learning (the other tactic we had considered) that requires large amounts to train the model. Additionally, we used Cockroach DB hosted on Google Cloud to store each user’s schedule and rating after each day to later on, learn and adapt to the user’s preferences. We also hosted our web app on Google Cloud
Challenges we ran into
In terms of the backend, one issue we faced was designating events to time slots in the schedule. Because we pass in a time as a string, converting it to a "time slot" in our backend proved to be somewhat difficult. Additionally, coming up with the features to build the schedule was also tricky. There are multiple ways to create a schedule, but we had to choose only a few to judge and create our schedule.
Accomplishments that we're proud of
One accomplishment we are particularly proud of is getting a fully functional UI that has the capability with automatically syncing your schedule with Google Calendar. Rather than have to code a schedule UI ourselves, we were able to take advantage of the fact that Google Calendar notifies people when their next event/task is approaching. Thus, connecting our web app to Google Calendar makes it easier to keep track of events.
What we learned
One thing we learned from coding the backend portion of the project was how to create a stronger scoring function to rate each schedule. Initially, our scoring function was somewhat suboptimal, placing tasks at either random times or alternating between tasks arbitrarily. After adding more features for scoring each schedule, our schedules began to develop and produce more optimal results. We also learned more about UI/UX design, connecting the front and back end seamlessly, and working with new technologies/APIs such as Cockroach DB, Google Cloud, etc.
What's next for Pyde
Currently, Pyde is designed to create a schedule for a single day. However, in the future, we hope to extend this by having Pyde generate events/tasks for an entire week. Additionally, we hope to incorporate more NLP into the backend algorithm such that it can differentiate between tasks that are physically based (such as working out or playing a sport) or mentally based (like studying) and place them accordingly. Also, we plan to improve on learning from a user’s previous schedules by utilizing a more robust machine learning algorithm.