Enqurious logo
Back to blog
Guides & Tutorials

My Journey Building the Automated Feedback Forms System

My Journey Building the Automated Feedback Forms System blog cover image
AI
Chethan

The Beginning: A Simple Request That Became an Adventure

It all started with a straightforward request: "I need to create Google feedback forms automatically when modules end in programs." Little did I know this would become one of the most interesting technical challenges I've tackled!

Phase 1: The Google API Approach (The Hard Way)

The Initial Plan

I thought this would be straightforward - just use Google's APIs to create forms programmatically. I started building a Node.js backend with Google Drive, Forms, and Sheets APIs. The architecture looked clean:

User clicks "Create Form" → Backend calls Google APIs → Form created → Link returned


The Reality Check

Oh boy, was I wrong! Google's APIs are like a maze with hidden doors. Here's what happened:

  1. First Error: "Only info. Title can be set when creating a form"

  • Me thinking: "Okay, that's weird but I can work around it"

  • Reality: Google Forms API has strict rules about what you can set during creation

  1. Second Error: "Google Forms API has not been used in project"

  • Me thinking: "The user needs to enable the API, simple fix"

  • Reality: This was just the beginning of our permission nightmare

  1. The Big One: "Request had insufficient authentication scopes"

  • Me thinking: "Let me check the service account permissions"

  • Reality: This opened a can of worms about Google Workspace permissions

The Permission Nightmare

I discovered that to create Google Forms programmatically, you need something called "Domain-Wide Delegation" - which is basically Google's way of saying "only admins can do this." The user's response was the nail in the coffin:> "i am not the admin" My internal monologue"Well, there goes that approach! Time to pivot."

Phase 2: The Google Apps Script Pivot (The Smart Way)

The Lightbulb Moment

I remembered Google Apps Script exists! It's like having a magic wand that runs in Google's cloud with the user's own permissions. No more service account headaches! The new plan: Build a web app that creates forms using Apps Script, then integrate it with the main ops app.

Building the Apps Script

This was actually fun! I built a comprehensive form creation system:


The UI Transformation

The original interface was basic HTML. I decided to make it look professional: Before: A simple form with basic styling After: A modern, responsive interface with:

  • Drag & drop CSV upload

  • Loading animations

  • Professional color scheme

  • Mobile-friendly design

The transformation was like going from a paper form to a sleek web app!

Phase 3: The Integration Challenge (The Fun Part)

The Auto-Detection Dream

I wanted the system to be as smart as possible. The user shouldn't have to manually enter program details every time. So I built multiple detection methods:

  1. URL Parameters: Pass data directly from the ops app

  1. Document Properties: Store program ID in Google Sheets/Drive

  1. User Properties: Remember the last program used

  1. MongoDB Bridge: Fetch data directly from the database

The Ops App Integration

This was the coolest part! I created a seamless flow:

text

User in Program Details → Clicks "Create Form" → 

Google Apps Script opens → Automatically detects program → 

Only asks for module name/number → Form created!

The user experience went from"Fill out 10 fields manually “To"Click button, enter 2 things, done!"




Phase 4: The Bug Hunt (The Reality Check)

The Syntax Error Saga

This was frustrating but educational. I kept getting syntax errors in the Apps Script:

text

What I learned: When building complex HTML strings in JavaScript, backslashes can be tricky. The issue was \\n vs \n in template literals. After fixing this multiple times, I now have a deep appreciation for proper string escaping!


The Duplicate Values Problem

Google Forms has a strict rule: no duplicate choices in multiple-choice questions. When learners have similar names or emails, this becomes an issue. My solution: Built deduplication logic both in the frontend and the Apps Script:

JavaScript

// Remove duplicates before creating form choices


Phase 5: The Final Polish (The Satisfaction)

The Complete System

By the end, we had built something really cool:

  1. Automated Form Creation: Forms are created with the right structure automatically

  1. Smart Data Detection: The system knows what program you're in

  1. Professional UI: Looks like a commercial product

  1. Seamless Integration: Works directly from the ops app

  1. Error Handling: Gracefully handles edge cases


The User Experience Transformation

Before: User had to manually create forms, copy-paste learner lists, set up Google Drive folders, etc. After: User clicks one button, enters module details, and gets a fully functional feedback form ready to share!

What I Learned Along the Way

Technical Insights

  1. Google APIs are powerful but complex - They have strict rules and permissions

  1. Google Apps Script is underrated - It's like having a Swiss Army knife for Google Workspace

  1. Frontend validation is crucial - Catch errors before they reach the backend

  1. User experience matters - A few extra clicks saved can make a huge difference

Problem-Solving Lessons

  1. Pivot when needed - The Google API approach was doomed from the start

  1. Think user-first - What's the easiest way for someone to accomplish their goal?

  1. Iterate and improve - Each version got better and more user-friendly

  1. Test thoroughly - Real-world usage reveals issues you never thought of

The Human Element

The most interesting part was understanding the user's workflow. They didn't want to be developers - they wanted to create feedback forms quickly and get back to their actual work. Every feature I added was about reducing friction and making their life easier.

The End Result: A System That Actually Works

What We Built

  • Automated feedback form creation for any program

  • Smart program detection with multiple fallback methods

  • Professional web interface that looks like a commercial product

  • Seamless integration with the existing ops app

  • Comprehensive error handling and user feedback

The Impact

Instead of spending 15-20 minutes manually creating each feedback form, users can now do it in under 2 minutes. That's a 10x improvement in efficiency!

The Satisfaction

There's something deeply satisfying about building a system that:

  1. Solves a real problem (manual form creation is tedious)

  1. Works seamlessly (no context switching between apps)

  1. Looks professional (users feel confident using it)

  1. Saves significant time (from 20 minutes to 2 minutes)

Final Thoughts

This project taught me that the best solutions often come from understanding the user's actual workflow, not just their stated requirements. The user said "I need automated feedback forms," but what they really needed was "I need to create feedback forms without leaving my workflow. “The pivot from Google APIs to Google Apps Script was crucial - it turned an impossible problem into a solvable one. And the focus on user experience made the difference between a functional tool and one that people actually want to use. The journey from "this should be simple" to "this is actually working beautifully" was both challenging and incredibly rewarding.

Ready to Experience the Future of Data?

Discover how Enqurious helps deliver an end-to-end learning experience
Curious how we're reshaping the future of data? Watch our story unfold

You Might Also Like

Mastering AKS Monitoring: Practical Journey with Azure Kubernetes Service blog cover image
Guides & Tutorials
August 21, 2025
Mastering AKS Monitoring: Practical Journey with Azure Kubernetes Service

Step-by-step journey of setting up end-to-end AKS monitoring with dashboards, alerts, workbooks, and real-world validations on Azure Kubernetes Service.

Muhammed
The Schema Evolution Challenge in Modern Data Pipelines (Part 1/5) blog cover image
Guides & Tutorials
May 10, 2025
The Schema Evolution Challenge in Modern Data Pipelines (Part 1/5)

This is the first in a five-part series detailing my experience implementing advanced data engineering solutions with Databricks on Google Cloud Platform. The series covers schema evolution, incremental loading, and orchestration of a robust ELT pipeline.

Amit Enqurious
7 Major Stages of the Data Engineering Lifecycle blog cover image
Guides & Tutorials
April 8, 2025
7 Major Stages of the Data Engineering Lifecycle

Discover the 7 major stages of the data engineering lifecycle, from data collection to storage and analysis. Learn the key processes, tools, and best practices that ensure a seamless and efficient data flow, supporting scalable and reliable data systems.

Ayushi Enqurious
Troubleshooting Pip Installation Issues on Dataproc with Internal IP Only blog cover image
Guides & Tutorials
April 3, 2025
Troubleshooting Pip Installation Issues on Dataproc with Internal IP Only

This blog is troubleshooting adventure which navigates networking quirks, uncovers why cluster couldn’t reach PyPI, and find the real fix—without starting from scratch.

Ayushi Enqurious
Optimizing Query Performance in BigQuery blog cover image
Guides & Tutorials
January 24, 2025
Optimizing Query Performance in BigQuery

Explore query scanning can be optimized from 9.78 MB down to just 3.95 MB using table partitioning. And how to use partitioning, how to decide the right strategy, and the impact it can have on performance and costs.

Ayushi Enqurious
When Partitioning and Clustering Go Wrong: Lessons from Optimizing Queries blog cover image
Guides & Tutorials
January 24, 2025
When Partitioning and Clustering Go Wrong: Lessons from Optimizing Queries

Dive deeper into query design, optimization techniques, and practical takeaways for BigQuery users.

Ayushi Enqurious
Stored Procedures vs. Functions: Choosing the Right Tool for the Job blog cover image
Guides & Tutorials
January 6, 2025
Stored Procedures vs. Functions: Choosing the Right Tool for the Job

Wondering when to use a stored procedure vs. a function in SQL? This blog simplifies the differences and helps you choose the right tool for efficient database management and optimized queries.

Divyanshi Enqurious
Understanding the Power Law Distribution blog cover image
Guides & Tutorials
January 3, 2025
Understanding the Power Law Distribution

This blog talks about the Power Law statistical distribution and how it explains content virality

Amit Enqurious
Breaking Down Data Silos with BigQuery Omni and BigLake blog cover image
Guides & Tutorials
December 23, 2024
Breaking Down Data Silos with BigQuery Omni and BigLake

Discover how BigQuery Omni and BigLake break down data silos, enabling seamless multi-cloud analytics and cost-efficient insights without data movement.

Ayushi Enqurious
Solving a Computer Vision task with AI assistance blog cover image
Guides & Tutorials
December 18, 2024
Solving a Computer Vision task with AI assistance

In this article we'll build a motivation towards learning computer vision by solving a real world problem by hand along with assistance with chatGPT

Amit Enqurious
How Apache Airflow Helps Manage Tasks, Just Like an Orchestra blog cover image
Guides & Tutorials
September 16, 2024
How Apache Airflow Helps Manage Tasks, Just Like an Orchestra

This blog explains how Apache Airflow orchestrates tasks like a conductor leading an orchestra, ensuring smooth and efficient workflow management. Using a fun Romeo and Juliet analogy, it shows how Airflow handles timing, dependencies, and errors.

Burhanuddin Enqurious
Snapshots and Point-in-Time Restore: The E-Commerce Lifesaver blog cover image
Guides & Tutorials
January 13, 2024
Snapshots and Point-in-Time Restore: The E-Commerce Lifesaver

The blog underscores how snapshots and Point-in-Time Restore (PITR) are essential for data protection, offering a universal, cost-effective solution with applications in disaster recovery, testing, and compliance.

Ayushi Enqurious
Basics of Langchain blog cover image
Guides & Tutorials
December 16, 2023
Basics of Langchain

The blog contains the journey of ChatGPT, and what are the limitations of ChatGPT, due to which Langchain came into the picture to overcome the limitations and help us to create applications that can solve our real-time queries

Burhanuddin Enqurious
Understanding Data Lakes and Data Warehouses: A Simple Guide blog cover image
Guides & Tutorials
December 8, 2023
Understanding Data Lakes and Data Warehouses: A Simple Guide

This blog simplifies the complex world of data management by exploring two pivotal concepts: Data Lakes and Data Warehouses.

Ayushi Enqurious
An L&D Strategy to achieve 100% Certification clearance blog cover image
Guides & Tutorials
December 6, 2023
An L&D Strategy to achieve 100% Certification clearance

An account of experience gained by Enqurious team as a result of guiding our key clients in achieving a 100% success rate at certifications

Amit Enqurious
Serving Up Cloud Concepts: A Pizza Lover's Guide to Understanding Tech blog cover image
Guides & Tutorials
November 2, 2023
Serving Up Cloud Concepts: A Pizza Lover's Guide to Understanding Tech

demystifying the concepts of IaaS, PaaS, and SaaS with Microsoft Azure examples

Ayushi Enqurious
Azure Data Factory: The Ultimate Prep Cook for Your Data Kitchen blog cover image
Guides & Tutorials
October 31, 2023
Azure Data Factory: The Ultimate Prep Cook for Your Data Kitchen

Discover how Azure Data Factory serves as the ultimate tool for data professionals, simplifying and automating data processes

Ayushi Enqurious
Harnessing Azure Cosmos DB APIs: Transforming E-Commerce blog cover image
Guides & Tutorials
October 26, 2023
Harnessing Azure Cosmos DB APIs: Transforming E-Commerce

Revolutionizing e-commerce with Azure Cosmos DB, enhancing data management, personalizing recommendations, real-time responsiveness, and gaining valuable insights.

Ayushi Enqurious
Unleashing the Power of NoSQL: Beyond Traditional Databases blog cover image
Guides & Tutorials
October 26, 2023
Unleashing the Power of NoSQL: Beyond Traditional Databases

Highlights the benefits and applications of various NoSQL database types, illustrating how they have revolutionized data management for modern businesses.

Ayushi Enqurious
Calendar Events Automation: Streamline Your Life with App Script Automation blog cover image
Guides & Tutorials
October 10, 2023
Calendar Events Automation: Streamline Your Life with App Script Automation

This blog delves into the capabilities of Calendar Events Automation using App Script.

Burhanuddin Enqurious
A Journey Through Extraction, Transformation, and Loading blog cover image
Guides & Tutorials
September 7, 2023
A Journey Through Extraction, Transformation, and Loading

Dive into the fundamental concepts and phases of ETL, learning how to extract valuable data, transform it into actionable insights, and load it seamlessly into your systems.

Burhanuddin Enqurious
A Simple Guide to Data Literacy blog cover image
Guides & Tutorials
June 23, 2023
A Simple Guide to Data Literacy

An easy to follow guide prepared based on our experience with upskilling thousands of learners in Data Literacy

Amit Enqurious
The Bakery Brain: Simplifying neural networks blog cover image
Guides & Tutorials
June 23, 2023
The Bakery Brain: Simplifying neural networks

Teaching a Robot to Recognize Pastries with Neural Networks and artificial intelligence (AI)

Shuchismita Enqurious
Demystifying Namespace Structures blog cover image
Guides & Tutorials
June 23, 2023
Demystifying Namespace Structures

Streamlining Storage Management for E-commerce Business by exploring Flat vs. Hierarchical Systems

Ayushi Enqurious
The Ownership Dilemma blog cover image
Guides & Tutorials
January 26, 2023
The Ownership Dilemma

Figuring out how Cloud help reduce the Total Cost of Ownership of the IT infrastructure

Amit Enqurious
Making sense of Cloud as an IT Professional blog cover image
Guides & Tutorials
January 26, 2023
Making sense of Cloud as an IT Professional

Understand the circumstances which force organizations to start thinking about migration their business to cloud

Amit Enqurious