Alex - ISIS3510-grupo/Proyecto GitHub Wiki
Identifying Problems - Activity Description
Assigned Problems
Problem 1: The students at Los Andes University face barriers to solving academic questions outside the class. On one hand, the office hours scheduled are at the same time as other classes, so it is logistically complicated that all the students can attend office hours. Before an exam or an important deadline, the session is full so there is no time to solve all the questions. On the other hand, it is difficult to find a study group with complementary abilities to have a balanced collaborative group with a similar level.
Problem 3: People often have difficulties finding plans or activities in a specific area. The information about places, such as reviews, prices, schedules, and location, is usually spread across different platforms. Also, the options they find do not always match what they want or where they are.
Structure of the Interview:
Structure of the Interview
Interview Structure 1
Interviewee Profile: 7th-semester Systems Engineering student at Uniandes
Date: August 11, 2026
Interviewer: Alex Pérez
Objective: Understand the process students go through when attending tutoring sessions, resolving academic questions, or finding study groups.
1. Do you study at Uniandes?
Purpose: Confirm that the interviewee is a member of the university.
2. What semester are you currently in?
Purpose: Understand the interviewee's level of experience within the university.
3. Do you attend tutoring sessions?
Purpose: Determine whether the problem applies to the interviewee.
4. How often do you attend tutoring sessions or need a study group?
Purpose: Determine how frequently this need arises.
5. Would you prefer to be assigned to a study group randomly or choose your own group?
Purpose: Understand which factors the interviewee considers important when forming a study group.
6. Have you ever had complications with this?
Purpose: Identify negative experiences related to tutoring sessions or study groups.
7. What happened from the moment you decided to go until you finished?
Purpose: Understand the step-by-step process of a real tutoring experience.
8. Was there any difficulty?
Purpose: Identify specific obstacles encountered during the process.
9. How did you solve it?
Purpose: Understand how the interviewee dealt with the problem.
10. Did you still have unanswered questions?
Purpose: Determine whether the student still had doubts after the issue was addressed.
11. How did you feel?
Purpose: Identify how the student felt when the problem occurred.
12. Has this happened to you more than once?
Purpose: Determine how frequently the problem occurs.
13. What was the most difficult part of the process?
Purpose: Identify the main difficulty experienced during the process.
14. Is there anything else you think I should know or consider important?
Purpose: Identify relevant aspects that were not covered by the previous questions.
Interview Structure 2
Interviewee Profile: Person with a partner and a family
Date: August 11, 2026
Interviewer: Alex Pérez
Objective: Understand the process a person goes through when deciding what to do with their partner or family when they want to go out but do not know what plan to choose.
1. How old are you?
Purpose: Understand the interviewee's age and identify their profile.
2. Do you have a partner?
Purpose: Determine whether the problem may apply to the interviewee when spending time with their partner or family.
3. Do you find it difficult to decide what to do when you go out?
Purpose: Determine whether the problem occurs in the interviewee's everyday life.
4. What do you do when you want to go out with your family or partner but do not know what to do?
Purpose: Understand the process the interviewee follows when looking for plans.
5. Was there any difficulty?
Purpose: Identify whether anything made it difficult to find a plan.
6. What happened while you were deciding what to do?
Purpose: Understand the process the interviewee experienced while making the decision.
7. How did you solve it?
Purpose: Understand how the interviewee dealt with the problem.
8. How did you feel?
Purpose: Identify how the interviewee felt during the process and after reaching a result.
9. Has this happened to you more than once?
Purpose: Determine how frequently the problem occurs.
10. What was the most difficult part of the process?
Purpose: Identify the main difficulty when searching for or choosing a plan.
11. Is there anything else you think I should know or consider important?
Purpose: Identify relevant aspects that were not covered by the previous questions.
Evidence of the interview:
Audio Interview P1 Audio Interview P3
Summary of the interview:
Interview Summary 1
In summary, the interview showed that the student tries to attend tutoring sessions to better understand the topics covered in his courses during the semester. He attends approximately 60% of the available tutoring sessions. He also explained that study groups are used throughout almost the entire degree and that, in many cases, these groups are randomly assigned.
Regarding study groups, he would prefer to choose the people he works with because working with friends or people he already knows is much easier. This is mainly because he already knows how they work, how they organize themselves, and how they communicate. On the other hand, when the group is randomly assigned, he does not know how the other members work, whether they will actually contribute, or how well they will communicate and organize themselves. He also mentioned that it can sometimes be difficult to address problems with another person because they might get upset, which can create conflicts within the group. In contrast, when he can choose his group, he can rely on his friends and already has an idea of how responsible they are.
Regarding tutoring sessions, one of the main problems he mentioned is the large number of students. As a result, waiting times can be very long, and while a student is waiting, the tutor's available time may run out. Consequently, some questions are left unanswered.
Another important point is that the usefulness of tutoring sessions can depend on the type of course and the student's level of understanding. For example, when a course is more mechanical and the student has specific questions, the tutor can usually provide clear explanations and answers. However, when a student attends class but does not understand the topic at all, the tutor may sometimes be less helpful because they expect the student to already have some basic knowledge from attending class. He believes that if a student attended class and recognizes that they did not understand the topic, the tutor should still be willing to explain it from the beginning. When this does not happen and he cannot get the help he needs, he feels disappointed and frustrated.
When he is unable to resolve his questions during tutoring sessions, he looks for other alternatives, such as course bibliography or artificial intelligence tools. However, he believes that books and AI are not always enough. In his opinion, receiving help from a person or tutor makes it easier to understand difficult topics, meaning these alternatives cannot completely replace a tutoring session.
The situation becomes even more difficult when exams are approaching. During normal weeks, there may be available tutoring spots because fewer students attend. However, before exams, demand increases significantly, making it difficult to find available appointments. Even when students try to schedule sessions in advance, they may not get a spot, or the support they receive may not meet their expectations.
Because of this, he explained that assignments are generally easier to manage because students can find alternative ways to complete them. Exams, however, are more difficult because students need to fully understand the topics before taking them. He mentioned that these difficulties have affected his grades in some cases.
Regarding group work, he also believes that professors should take action when some students fail to complete their assigned tasks. Otherwise, students who are actually working end up being affected by the lack of responsibility of other group members.
Finally, another option he uses when he needs additional support is external tutoring with people outside the university. However, this option also has disadvantages. External tutoring can be expensive for a student's budget, and it can be difficult to find someone with enough knowledge or experience in the specific course he is taking.
Overall, the interview showed that the main difficulties are related to the availability and quality of tutoring sessions, the organization of study groups, and the lack of reliable academic support when students need it the most, especially before exams. Although students can use alternatives such as books, AI tools, or external tutoring, these options do not always provide the same level of support as direct help from a tutor or another person.
Interview Summary 2
In summary, the interview showed that Julián frequently faces situations where he is with his family or partner and they are unsure about what they want to do. Because they do not have a clear idea or solution, they usually turn to TikTok to look for plans or places to visit.
However, the main problem is that TikTok does not always provide recommendations that match what they are actually looking for. The platform tends to show popular places, such as restaurants, parks, and other common options, but these are not necessarily the places they would like to visit. In many cases, the results do not show the best food, the most entertaining option, or something that truly matches their preferences.
Because of this, the decision-making process can become stressful. Sometimes they end up choosing a plan they did not really want to do, or they spend a significant amount of time discussing different options. As a result, they often end up doing something different from what they originally had in mind.
Another situation he mentioned occurs when they are at home and want to go out to eat. If they cannot find a place that seems interesting or suitable, they sometimes decide to stay home and order food from a familiar restaurant instead. This shows that the search process does not always provide results that match what they actually want.
In addition, one of the most difficult parts of the process is finding a place that is close to their current location. For example, he explained that they might be in Hayuelos and want to find somewhere nearby to eat, but when they search on platforms such as TikTok, they may receive recommendations for places in the north of Bogotá, around Calle 92. Therefore, even when they find an interesting option, the distance can make it inconvenient or unrealistic.
Finally, he mentioned that reviews do not always make the decision easier. Even after reading other people's opinions, they may still be uncertain about whether a place is actually a good option for them.
Overall, the interview showed that the main problem is the difficulty of finding plans or places that truly match what people want, especially when considering their preferences and current location. Although platforms such as TikTok provide many recommendations, the results are often based on popularity rather than on what is actually most relevant or convenient for the user.
What-How-Why
Situations P1
1. “Al azar si era bien complicado el tema de que tu no sabes cómo trabajan las personas y ahí vienen los rollos”
What: The student has to work with people they do not know.
How: The process becomes complicated because the student does not know whether the other people will actually contribute, how they work, or whether they work in the same way as the student.
Why: Because when study or work groups are formed randomly, differences may arise in organization, communication, and the way people study or work on a project.
2. “Siempre trato de buscar los espacios con los monitores para que me expliquen, pero hay mucha gente por lo que hay que esperar mucho tiempo, son turnos de espera muy largos y se pasa el tiempo disponible del monitor, por esto no se responde tu duda y además queda un poco de gente esperando para hablar con el monitor”
What: The student looks for tutors during their available hours to resolve academic questions.
How: The student has to wait for long periods or wait behind many other students to ask their questions, and sometimes there is not enough time to resolve them.
Why: Because the number of students exceeds the tutor's capacity to assist everyone within their available hours.
3. “Hay materias que no entiendo absolutamente nada y tomo la decisión de ir a monitoria y a veces no te ayudan porque dicen que debería tener bases”
What: The student does not understand a topic and decides to attend a tutoring session to understand it.
How: The student does not receive the help they are looking for because the tutor expects them to already have some knowledge of the topic.
Why: Because the tutor expects the student to have a basic level of knowledge, or in many cases, simply does not have enough time to explain the entire topic.
4. “Cuando quedo con vacíos voy a buscar un libro o en la IA, pero estas opciones realmente no reemplazan a una persona que te ayuda”
What: The student is left with unanswered questions and turns to external resources for help.
How: The student tries to clarify their questions through books or AI but remains unsatisfied with the answers they can obtain.
Why: Because the student needs answers to specific questions and values interaction with a person who can respond directly and clarify their doubts.
Situations P3
1. “Me pasa frecuentemente que no sabemos a dónde o que hacer”
What: The person tries to decide what plan to do.
How: They cannot find a clear option to choose where to go or what to do.
Why: Because there is no specific solution that helps them choose a plan based on their preferences and context.
2. “En muchas ocasiones cuando uso Tik Tok no satisface la que queremos hacer ya que muchas veces no es el mas rico o el más divertido”
What: The person turns to an alternative platform to look for a plan.
How: They find different plans, but the options do not ultimately satisfy what they are looking for.
Why: Because the platform is not specifically designed to solve this problem and does not take the person's context into account.
3. “Nos estresamos un poco y terminamos haciendo un plan que no queríamos hacer, pero hay otras ocasiones en las que nos ponemos a decidir entre nosotros, pero en realidad muchas veces no es lo que buscamos”
What: They try to decide what plan to do.
How: The process creates stress, and they sometimes end up choosing something that was not what they originally wanted.
Why: Because they have difficulty finding a plan that fits the needs and preferences of everyone involved.
4. “Lo más difícil es buscar el lugar a donde queremos ir a donde nos encontramos, algo que quede relativamente cerca, nosotros buscamos y no manda a lugares lejanos, y muchas veces las reseñas tampoco ayudan”
What: The person looks for a plan near their preferred location.
How: The available options often suggest places that are far away, and reviews do not always provide useful or accurate information for evaluating the place.
Why: Because the available information is not adapted to the person's location and does not provide enough useful references to make a decision.
Emphaty Map
Design Pattern - Observer
The Observer Pattern was implemented in the Kotlin application to keep the UI synchronized with asynchronous changes in Firestore without requiring manual refreshes.
It is mainly used in the possible matches functionality. PossibleMatchesDataSource registers a Firestore snapshot listener for the matches associated with a specific reportId. This listener remains active and reacts whenever a match is created, updated, or removed.
When Firestore detects a change, the updated matches are propagated to PossibleMatchesViewModel, which updates its state, including the list of matches and the corresponding match count. Jetpack Compose observes this state and automatically recomposes the affected UI, displaying the latest information to the user.
Rationale
The Observer Pattern was selected because possible matches are dynamic and asynchronous. A lost report can receive new matches after it has already been created, so using a one-time query would not be enough to keep the information updated.
Firestore snapshot listeners allow the application to react automatically to these changes, avoiding repeated polling and keeping the ViewModel and UI synchronized with the backend. This provides a more reactive and efficient experience for the user.
Student authentication with Uniandes email validation
The Kotlin application authenticates users through Firebase Authentication and validates that the account belongs to the Uniandes domain. After authentication, the application retrieves the current user UID and uses it to load the corresponding user document from Firestore. The user role is then used to determine the appropriate navigation flow. This allows the application to separate student and administrator functionality.
GPS-based location acquisition for lost-item reporting
The lost-item report flow integrates the device GPS to obtain the user’s current latitude and longitude. The application requests runtime location permissions and uses the Android location services to retrieve the device position. These coordinates are incorporated into the lost report flow and can later be associated with a campus location. This avoids requiring the user to manually enter raw coordinates.
Context-aware campus location suggestion
The application uses the current GPS coordinates as contextual information to suggest a relevant campus location during lost-item reporting. The location obtained from the device is processed by the corresponding ViewModel and compared with known campus locations. Based on this context, the UI can provide a more appropriate location suggestion. This reduces manual input and makes the report creation process more efficient.
Possible match count per lost report – Type 2 BQ
This functionality answers the Type 2 Business Question by calculating the number of possible matches associated with each lost report. PossibleMatchesDataSource observes the corresponding Firestore match data, while PossibleMatchesViewModel maintains the current list and exposes the match count to the UI. Jetpack Compose observes this state and updates the displayed count automatically when the backend data changes.
Android notification when a new possible match is detected
The Kotlin application provides native Android notifications when a new possible match is detected for a student’s lost report. The notification flow is connected to the match/notification data stored in Firestore and is handled by the Android application. When a relevant notification is detected, the system displays a native notification to the user. This allows new matches to be surfaced without requiring the student to manually open the application.
Email notification infrastructure using Firebase Functions and Resend
The backend includes an external email notification flow implemented with Firebase Cloud Functions and Resend. A Cloud Function reacts to the creation of a possible-match notification in Firestore, retrieves the recipient information from users/{recipientUid}, and sends the corresponding email through Resend. The Resend API key is stored securely using Firebase Secret Manager, keeping credentials outside the source code.
How My Business Question Was Answered Through the Analytics Pipeline
Business Question Type 4:
What types of unclaimed items at the end of the semester have the potential for donation to external organizations?
Data Sources
The analysis uses operational data generated by the application from found-item records. The relevant attributes for this BQ are the item category, current status, semester association, and donationEligible flag.
Ingestion & Integration
The Kotlin application communicates with Firebase through the Firebase SDK. Found-item information is written to and retrieved from Cloud Firestore through Firestore read/write operations.
Storage
The information required by the BQ is stored in Cloud Firestore. Found-item records provide the item attributes used in the analysis, while the application configuration identifies the current semester to be analyzed.
Computation
This BQ is processed in the Usage and Outcome Analytics stage of the pipeline.
The application first identifies the current semester and retrieves the corresponding found items. It then filters the records to include only items that are still available and have donationEligible set to true.
The resulting items are grouped by category and counted to calculate the donation potential of each category for the current semester.
Current semester → Found items → Filter status = available → Filter donationEligible = true → Group by category → Count
Presentation
The computed results are presented through the Outcome Visualization stage of the pipeline.
The Donation Potential view displays the aggregated results by category, corresponding to the Ranked Bar Chart – Donation Potential by Category defined in the analytics pipeline. This allows administrators to identify which categories contain the greatest number of unclaimed items with potential for donation to external organizations.