COLAB29 - Web App

Trip Planner

Plan your Dream Trip with Trip Planner

Problem Space

The travel industry has seen tremendous growth in new products over the past decade but it is not until recently that attention has been directed towards helping travellers explore activities in their destination of choice.  Because of its annual projected growth rate of 15.2% from 2022-2030, most leading organisations in the space have incorporated a feature to help travellers but people still struggle to find things to do based on their interests and lifestyle. 

Problem Background  

The lack of personalised experience coupled with the time it takes to navigate travel content online makes it challenging for a lot of travellers when deciding on where and where to travel. 

For groups of two or more travellers, varied interests and differences in lifestyle makes it extremely difficult to plan travel. To alleviate this problem, most group travellers often turn to companies curating travel to specific destinations which are very expensive, offer little to no flexibility and uncertain group dynamics during their travels. However, we will not be able to address this during our session at Colab because of our timelines. 

User Pain Points & Research Insights

In digging deeper to validate our problem statement we gathered primary data from users and also conducted secondary research online and found the following: 

  • Most users express that they are overwhelmed by the amount of information out there. Path to Purchase research uncovered a similar challenge finding that most users view 185 pages of travel content before booking their travel. 
  • Users also expressed that they do not have the spare time to dedicate towards Planning. This is further solidified by Expedia’s Group research that most people spend over 5hrs consuming online travel content to seek inspiration and plan their trip.
  • Additionally, none of the over 50 online travel planforms serve as a repository for travel itinerary so most people save their itineraries on their phones in pictures, google docs, notes etc. as well as papers. 
  • Our research also found that most people prefer to travel with their friends/significant other/family but it is very challenging to create a travel plan that accommodates other people considering their lifestyle and interests


Problem Statement 

How might we personalise and simplify finding activities and creating itinerary for travellers so that the experience is less stressful, faster and easier. 

Solution Explanation

Based on our target users’ pain points, we knew we wanted to create a way for people to find things to do while travelling based on their interests and preferences. Users will be able to go to one spot to plan their trip, saving time and effort. In addition to users finding activities to do on their trips they will also be able to create itineraries for the trip.

Lofi & Hifi Mockups

https://www.figma.com/design/m8pTjLE4yejOFt78GtMs5A/Design-Devs-Handoff-File?node-id=0-1&t=l8DD2CoowOTe2UfX-1

Iterative Design Learnings

After we tested our prototypes through user testing we were able to get important feedback on our flows and product. It was most important for us to be able to test the filters that users would be able to use to find activities and things to do on their trips. This would be the main feature of the product and if anything was unclear or confusing while trying to accomplish this goal, it was important to know and understand early on. 

The feedback we got from user testing was really valuable and helped us tweak the way we were showing our filters, specifically the city option. Users were confused and overwhelmed by the amount of cities displayed and expressed being able to just search for the location they were travelling to would be a lot easier. We also needed to iterate on the hierarchy of the filters as it was causing confusion for the users. 

Aside from the feedback we received from user testing, as our developers worked to build out the designs, we got amazing feedback regarding some crucial flows and screens that were missing. Jen and Lilly, our developers, were able to bring up important gaps in our design. 

Implementation Details 

Chosen tools
  • Render.com: For its ease of use, scalability, and seamless deployment of web applications.
  • ElephantSQL: A managed PostgreSQL service that simplifies database management and ensures reliability.
  • Flask: A lightweight and flexible Python web framework that is easy to set up and extend.
  • Tailwind CSS: For utility-first CSS framework, allowing rapid styling without writing custom CSS.
  • React: A popular JavaScript library for building dynamic and responsive user interfaces.
  • Google Places API: For accessing rich location data, enhancing the application's functionality.

Journey of a Request

1.    Frontend Request Initiation:

  • A user interacts with the frontend, clicking a button to fetch a list of destinations.
  • This triggers an HTTP request to the backend via Axios in React.

2.    Backend Request Handling:

  • The Flask backend receives the request at a specific endpoint.
  • Flask processes the request, interacting with the database (ElephantSQL) to retrieve or manipulate data.

3.    Database Interaction:

  • The Flask server queries ElephantSQL (PostgreSQL database) using SQLAlchemy.
  • The database executes the query and returns the results to the Flask server.

4.    Response Construction:

  • Flask constructs a JSON response containing the requested data or a success/error message.
  • This JSON response is sent back to the frontend.

5.    Frontend Response Handling:

  • The frontend receives the JSON response and updates the UI accordingly.
  • For example, it renders a list of destinations, user itineraries, and user-chosen places.

Improvements
  • Scalability: Introduce load balancing and to handle increased traffic.
  • Performance: Implement caching mechanisms to reduce database load, API requests and improve response times.
  • Security: Enhance security with OAuth for authentication, encrypted database connections, and secure API endpoints.
  • User Experience: Improve the frontend with more interactive elements, better error handling, and performance optimization (e.g., lazy loading, code splitting).

Technical challenges

The hardest part of development was debugging, as we encountered numerous errors and conflicts, particularly during github merges, which required more time than actual coding. Additionally, following a design created by another person was challenging.
Our app has potential scaling issues, including single server bottlenecks, database load, and API rate limits. To address these, we can implement load balancing, database indexing, caching, and optimize both backend and frontend performance. Key takeaways include the importance of effective debugging strategies, scalable session management, optimized deployment processes, and continuous monitoring to ensure the application can handle increased traffic and usage efficiently.

Future Steps

We may continue working on this application so that it becomes a feature that can be easily integrated into other platforms.

Learnings

Product Manager Learnings:

Danny Oja

Co.Lab was a very interesting experience as it provided me with the platform to understand the roles and responsibilities of a product manager better. Among many of the things I learned during this program are validating ideas through research, the agile product management techniques, translating requirements into user stories, and the power of collaboration with other team members.

Designer Learnings:

Daniella Bock

Communication: I learned how important is it to be in constant communication with your team members to accomplish your goal Testing: this experience has taught me how important it is to test your product often and early Collaboration: As a designer I can only do so much without a PM and developers. Working together has taught me how to be a better designer

Developer Learnings:

Lilibeth Ocando

During the execution of this project, I once again confirmed that adopting best practices while working in a cross-functional team is crucial. Creating separate branches for different parts of the code and committing each change with specific names for future reference significantly enhances team collaboration and project organization. I also realized the value of encouraging team members to sync up their code as soon as possible to detect and fix conflicts early. Additionally, I gained new insights into best practices for React components and hooks, which helped speed up our development processes. I will definitely adopt these practices in future projects to facilitate smoother and more efficient teamwork.

Developers Learnings:

Jennifer Monteiro Costa

&

This is the first project I've participated in that involved full team collaboration and cross-functional teams. Although I had previously worked on projects where we had to split tasks, this experience was different because it involved building a full working product from scratch. This included considering research, design constraints, and available tools, making it a comprehensive learning experience. Our code dependencies led to numerous conflicts, but this ultimately provided valuable insights and improved my skills. Overall, this project has been a significant and enriching experience for my career development.

Full Team Learning

Cross functional coordination: For the first time, the entire team had practical experience working within a cross-functional team to develop a product from conception to deployment.Siloed ways of working and the lack of understanding of how product development roles interact slowed the team down. We soon realise by the 3rd week, the importance of frequent communication, collaboration and a shared purpose. Project Management: The use of trello to plan features and development tasks also help to put the team on track. The team was able to make a realistic assessment of our progress based on our timelines so we decided to reprioritize some features as nice to have and remove them from the MVP. We were also constantly negotiating with developers in order to create alignment between users needs and what is feasible from a technology perspective.