Impactree Case Study
Generating Positive Actions Through Technology
Transform a simple voter database into a positive impact-generating engine for individuals and organizations.
The initial application was designed to collect voter information using Google Firestore as the database and using other Google Cloud services. Izundo took over the project to convert the application into a social-media-type platform where users could discover and take social actions meaningful to them.
We decided to continue to build the app on GC services and use Next.js/React.js on the frontend and Node.js on the backend. We have run into various challenges and problems, however.
The load time for personalized list of actions was 30 seconds or over using the Firestore database to save and serve the actions data.
We identified two main areas to redesign to improve the performance of the app: 1. the database that served the actions list was not suitable for our purpose 2. we were attempting to aggregate data and save it all within the web API backend process
Google Firestore database turned out to be a major bottleneck in our case. We originally used it as our primary database that drove the entire application but we quickly realized that its querying capabilities were limited and forced us to perform data filtering in code, which slowed the load time. A document database like Firestore was not a good fit for dynamic querying.
To reduce the load time from 30+ seconds to sub-1 second, had to use a database that provided robust querying capabilities and superior filtering performance. We found it in the Algolia Search Engine. We indexed our actions list data and used Algolia to dynamically filter actions list based on the user's preferences and actions history.
Processing and displaying aggregated data and statistics was inefficient and using Firestore. We needed to find a better way to calculate stats near realtime and display them fast.
Our original attempt to store the data needed for user activity reporting in Firestore didn't work out because of its lack of robust querying capabilities. To offload the ETL process to Cloud Functions, to save the kinds of data used for calculations in Google bigQuery database and used bigQuery to perform any querying and aggregations needed for statistics reporting.
An online platform that serves personalized actions based on the user’s preferences and action completion history under 1 second and reports near realtime statistics for management and customers.
Improved Performance & Scalability
The revised application performs 30x faster than before and is designed to automatically scale up or down based on the load on the backend using Amazon ECS.
Impact Data Reporting
The system keeps track of all user interactions with the actions to report on the impact metrics at the user, group, or organization level.
Embedded Action Widgets
To increase the usage of the actions, we created an iframe-based embeddable widgets that other sites can easily put on their web pages. We developed custom API to generate custom list of actions list for specific campaigns and track the impact metrics at the campaign level.