We were inspired to create an application to monitor productivity after reading about the M&T Smart Cities Prize. We thought about what would be useful for a tech hub like Seneca One to have, and decided that a way to measure productivity and provide meaningful feedback would fit the bill perfectly.
What it does
PPM measures productivity by tracking the number of keystrokes a user has input, and comparing it to the total number of keystrokes within the company. These totals reset every hour to provide hourly feedback on how productive you're being. We save a running average of a users productivity in a database, to compare to their current productivity. If you are seen to be less productive then normal, the user is prompted to take a mental break. If your consistently less productive throughout the day, then near the end of the day you are prompted to take a mental health survey to help determine if they are okay mentally.
How I built it
It was built using Python, MongoDB, shell scripts, batch scripts, and VBS. We provided support for Linux, OS X, and Windows. We automatically run the program on startup using shell scripts on both Linux and OS X. We accomplish the same using a batch script and VBS. A VBS script that runs on startup, runs the batch script that runs the main python file. Our main python file runs 2 concurrent processes, one that measures the number of keystrokes, and another that does the data handling to determine the average productivity. We calculate this average every hour (for the sake of the demo it every 30 seconds) and log this in a database. From there we notify the user if they have had a drop of 10% productivity, and recommend they take a break. If they had a consistent drop of 25% or more, each hour for 7 hours of the workday, we send them a mental health check-in form to help determine what's going on and support services that can be provided. There is also an admin console that an executive can look at that is a bar graph of percentages by the hour to help determine optimal office layout to position people with similar productivity schedules together.
Challenges I ran into
A challenge we ran into was multi-processing on different operating systems. Going into this project we knew it needed to be cross platform as work environments have a multitude of different systems for different tasks. This became difficult as the multi-processing library built into python had specific methods that differed on operating system. This took a few hours of research to figure out and implement. We also had some issues with the DataStax database, and eventually had to move on to MongoDB, where we spent about 4 hours getting that up and running with our current implementation.
Accomplishments that I'm proud of
We are really proud of the multiprocessing and portability we were able to accomplish in a short time. We are also really proud of the modularity we were able to accomplish with our popup UI.
What I learned
Over this project, we learned a lot regarding database making, multithreading, and creating an application that can easily scale to different implementations. We also learned that operating systems do not always support the same functions in the same library.
What's next for PPM?
In the future, we wish to implement machine learning to better quantify productivity in the workplace, and to improve the feedback given in our popups. We also wish to implement active window monitoring to better determine what is productive work and what is less productive or detrimental. Using this we could effectively "weight" certain programs over others to more accurately measure productivity. We also wish to add an algorithm to "seat" employees based on this data to foster a more collaborative and creative work environment.
We really feel that this is a very strong data set for any company and work environment