[major=SE | course_id=MMA301 | syllabus_id=12848 | semester=7 | combo=SE_COM4.1 | title=Multiplatform Mobile App Development]
Course ID: MMA301
Title EN: Multiplatform Mobile App Development
Title VI: Phát triển ứng dụng di động đa nền tảng
Credits: 3.0
Prerequisites: FER202
Description: This course helps learners master the knowledge of React Native. Learners can quickly develop mobile applications running on iOS and Android platforms. Contents to be implemented include:
- Overview of React Native and its benefits.
- Setting up the development environment.
- Understanding components and navigation.
- Hands-on experience with iOS simulator and Android emulators
- Techniques for styling applications.
- State management strategies using hooks and Redux.
- Managing user input and touch events.
- Using FlatList and SectionList for data presentation.
- Mobile Notifications: Learn to integrate personalized notifications to enhance user engagement.
- Databases: Explore using SQLite, Firebase for data management.
- Debugging techniques and tools.
- Publishing applications using Expo.
- Integrate mobile app with Gemini AI
Student tasks: - Students must attend at least 80% of contact slots in order to be accepted to the final examination.
- Student is responsible to do all exercises given by instructor in class or at home and submit on time
- Promptly access to the https://flm.fpt.edu.vn/ for up-to-date course information
Tools: - Visual Studio Code (https://code.visualstudio.com)
- Internet
- ChatGPT (https://chatgpt.com)
- Gemini (https://gemini.google.com/app)
- V0 by Vercel (https://v0.dev)
Course type: coursera_hybrid
Decision: 437/QĐ-ĐHFPT dated 04/25/2025
Approved date: 2025-04-25
CLO1: Understand what React Native is and how it can be used
[1] category=Assignment; type=on-going; weight=10.0; duration=Guided and reviewed in tutorial sesions;
Cont. at home; question_type=CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9,
CLO10,CLO11,CLO12,CLO13; grading_guide=Assignment 1: CLO1 - CLO7
Assignment 2: CLO1 - CLO13; completion_criteria=; clos=>0
[2] category=Practical Exam; type=on-going; weight=20.0; duration=85'; question_type=CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9,
CLO10,CLO11,CLO12,CLO13; grading_guide=problem(s) to solve by programming with AI integration covering CLO1 - CLO13; completion_criteria=; clos=>0
[3] category=Progress test; type=on-going; weight=10.0; duration=20'-40'; question_type=CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9,
CLO10,CLO11,CLO12,CLO13; grading_guide=PT 1: CLO1 - CLO7
PT 2: CLO8 - CLO13; completion_criteria=; clos=>0
[4] category=Project; type=on-going; weight=20.0; duration=Guided and reviewed in tutorial sesions;
Cont. at home; question_type=CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9,
CLO10,CLO11,CLO12,CLO13; grading_guide=problem(s) to solve by programming with AI integration, covering CLO1 - CLO13; completion_criteria=; clos=>0
[5] category=Final exam; type=Final exam; weight=40.0; duration=60'; question_type=CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9,
CLO10,CLO11,CLO12,CLO13; grading_guide=all topics;
more than 70% new questions (for the current semester);; completion_criteria=; clos=4
[1] desc=React Native: Developing Android and iOS Apps; author=; publisher=Coursera; edition=; isbn=; main=True; online=True; note=https://www.coursera.org/learn/mobile-app-notifications-databases-publishing
[2] desc=Mobile App Notifications, Databases, & Publishing; author=; publisher=Coursera; edition=; isbn=; main=True; online=True; note=https://www.coursera.org/learn/react-native-developing-android-and-ios-apps
[3] desc=https://docs.expo.dev/; author=; publisher=Expo; edition=; isbn=; main=; online=True; note=https://docs.expo.dev/
Session 1: Course Introduction
Topic: Offline; Teaching type: CLO1; LO: I
ITU: Slides
Materials: MMA301
Download: https://flm.fpt.edu.vn/gui/role/student/Listen actively, understand course structure, objectives, grading, and expectations. Ask clarifying questions.

Session 2: Introduction to React Native
- What is React Native
- Features and Use Cases of React Native
- React Native architecture
Topic: Offline; Teaching type: CLO1, CLO2; LO: I
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Understand core concepts, features, pros/cons of React Native. Take notes. Ask questions.

Session 3: Setting up the React Native Development Ecosystem
- Common Dependencies
- Node.js Installation
- Android Studio Setup
- Android SDK Configuration
- Environment Variables: Set up the ANDROID_HOME environment
Topic: Offline; Teaching type: CLO3; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Follow instructions to install Node.js, Watchman, IDE extensions, Expo CLI dependencies. Troubleshoot setup issues with guidance.

Session 4: Setting up the React Native Development Ecosystem (Cont)
- Expo and Its Features
- Install Expo Go on your device
- Expo CLI
- Setting up the Environment using Expo Snack
Topic: Offline; Teaching type: CLO3; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Complete Expo setup. Create a new project using Expo CLI. Run the basic app on a device or simulator.
CLO10: Be able to integrated Gemini AI and Apply GenAI in solving problem
Session 1: Emulator and Simulator Basics in React Native Development
- Understanding Android SDK Emulator - Android SDK Emulator
- Working with Android Emulator using Android Studio
- iOS Simulator
- Configuring iOS Simulator
Topic: Offline; Teaching type: CLO3; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Set up and configure an Android Emulator (AVD) and/or iOS Simulator. Practice running their app on these virtual devices.

Session 2: - Navigating the project structure in React Native using Expo commands
- Compare Expo CLI versus React Native CLI
Topic: Offline; Teaching type: CLO2, CLO3; LO: I
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Explore the folders and files in a standard Expo/React Native project. Understand the purpose of key files (App.js, package.json, assets, etc.).

Session 3: Introduction to Virtual DOM in React Native
Topic: Offline; Teaching type: CLO1, CLO2; LO: I
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Understand the concept of the Virtual DOM and how it contributes to React Native's performance. Compare briefly with the web DOM.

Session 4: Introduction to Basic Components
- View
- Text
- Image
- Button
- Text Input
- Scroll View
- Flat List
Topic: Offline; Teaching type: CLO4; LO: I
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Learn the syntax and basic props for View, Text, Image, Button, TextInput. Practice using these components to build a simple static screen layout.
CLO11: Be able to integrated Firebase services (FCM, Realtime database,...)
Session 1: Introduction to React Navigation Components
Implementation of Stack, Drawer, and Tab Navigation
Topic: Offline; Teaching type: CLO4; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Implement basic stack navigation between two or more screens using react-navigation. Understand navigator setup.

Session 2: Introduction to Stylesheets
Topic: Offline; Teaching type: CLO5; LO: I
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Learn how to create and apply styles using StyleSheet.createPractice styling basic components (color, font size, margins, padding)

Session 3: Styling with Layouts and Flexbox
Topic: Offline; Teaching type: CLO5; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Practice using Flexbox properties (flexDirection, justifyContent, alignItems, flex, etc.) to create responsive layouts. Complete layout exercises.

Session 4: Using Styled-Components in React Native
Topic: Offline; Teaching type: CLO5; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Understand the concept of CSS-in-JS with Styled Components. Practice defining and using styled components. (Optional: Refactor previous styles).
CLO12: Understand how to push notification in React Native apps
Session 1: Managing State with useState and useReducer
Topic: Offline; Teaching type: CLO6; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Practice using useState for simple state variables and useReducer for more complex state logic within components. Implement examples like counters or simple forms.

Session 2: Using Context API for State Management
Topic: Offline; Teaching type: CLO6; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Implement state sharing between components using the Context API. Understand createContext, Provider, and useContext.

Session 3: Redux in React Native
Topic: Offline; Teaching type: CLO6; LO: TU
ITU: Slide
Download: https://flm.fpt.edu.vn/gui/role/student/Understand the core Redux concepts (actions, reducers, store, dispatch). Practice connecting a component to the Redux store (if guided).

Session 4: Handling TextInput and Forms
Topic: Offline; Teaching type: CLO4; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Build a form with TextInput fields. Implement controlled components by managing input state using useState. Handle form submission.
CLO13: Understand how to publish an application
Session 1: Validating Forms with Formik and Yup
Topic: Offline; Teaching type: CLO4; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Integrate Formik to manage form state and Yup for validation rules in their practice form. Display validation errors.

Session 2: Using AsyncStorage for Persistent Data
Topic: Offline; Teaching type: CLO9; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Practice saving simple data (e.g., user preferences, a token) to AsyncStorage and retrieving it when the app restarts.

Session 3: Introduction to FlatList and SectionList
Topic: Offline; Teaching type: CLO7; LO: ITU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Practice rendering large lists of data efficiently using FlatList. Understand data, renderItem, keyExtractor. Implement a SectionList for grouped data.

Session 4: Implementing Pull-to-Refresh
Topic: Offline; Teaching type: CLO7; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Add pull-to-refresh functionality to a FlatList or ScrollView using RefreshControl. Trigger a data refresh action.
CLO2: Understand how React Native works
Session 1: Implement Infinite Scrolling
Topic: Offline; Teaching type: CLO7; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Implement infinite scrolling (load more data on reaching the end) on a FlatList using onEndReached prop.

Session 2: Assignment 1
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO9; LO: U
ITU: Slides, assignment's questions
Download: https://flm.fpt.edu.vn/gui/role/student/Work actively on Assignment 1, applying concepts from sessions 1-21. Ask specific questions for clarification or help.

Session 3: Assignment 1
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO9; LO: U
ITU: Slides, assignment's questions
Download: https://flm.fpt.edu.vn/gui/role/student/Continue working on Assignment 1. Focus on problem-solving and implementation. Collaborate if permitted.

Session 4: Assignment 1 Review
Project Introduction
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO9; LO: TU
ITU: Slides, assignment's questions
Download: https://flm.fpt.edu.vn/gui/role/student/Submit Assignment 1. Pay attention to the review, noting common mistakes or best practices. Understand the final project scope and start brainstorming. Ask questions about the project.
CLO3: Be able to build the React-native Application
Session 1: Progress Test 1
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO9; LO: U
ITU: 
Download: Take the test

Session 2: Working with React DevTools 
- Inspecting Components
- Using Context API
Topic: Offline; Teaching type: CLO8; LO: ITU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Practice using React DevTools to inspect component hierarchy, view/edit props and state in their own or example apps.

Session 3: Working with React DevTools  (Cont)
- Performance Profiling
Topic: Offline; Teaching type: CLO8; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Practice using the Profiler tab in React DevTools to identify rendering bottlenecks in simple scenarios.

Session 4: Handling Errors and Debugging 
- Importance of Error Handling
- Common Error Types
- Error Handling Techniques:
Topic: Offline; Teaching type: CLO8; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Learn common types of errors. Practice using console logs and the debugger (Chrome DevTools) for basic debugging. Understand Error Boundaries concept.
CLO4: Be able to understand the Components used for Mobile development
Session 1: Handling Errors and Debugging  (Cont)
- Debugging Tools
Topic: Offline; Teaching type: CLO8; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Practice setting breakpoints, inspecting variables, and stepping through code using the debugger.

Session 2: Creating Android APK Files
Handling Updates in React Native
Topic: Offline; Teaching type: CLO3, CLO13; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Understand the process for creating a release build (APK/AAB). Learn the concept of Over-the-Air (OTA) updates.

Session 3: Mobile App Notifications, Databases, & Publishing Introduction
Topic: Offline; Teaching type: CLO11, CLO12, CLO13; LO: I
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Gain a high-level understanding of push notifications, local vs. remote databases, and the app store submission process.

Session 4: Handling Notifications in Mobile Apps
Notification Delivery Systems
Topic: Offline; Teaching type: CLO11, CLO12; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Understand the flow of push notifications (client registration, server sending, client receiving). Learn about permissions.
CLO5: Understand how to style for React Native apps
Session 1: Creating Notifications in React Native
Topic: Offline; Teaching type: CLO12; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Practice setting up a library (e.g., expo-notifications) to request permissions and potentially receive local or test push notifications.

Session 2: Embedded databases introduction
- Local Storage
- SQLite
- Couchbase Lite
- LevelDB
- BerkeleyDB
Best Practices for Developers
Topic: Offline; Teaching type: CLO9, CLO11; LO: I
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Understand use cases for local databases. Learn basic SQL concepts relevant to SQLite. Practice setting up expo-sqlite.

Session 3: CRUD Operations in Embedded Databases
- Operations
Topic: Offline; Teaching type: CLO9; LO: TU
ITU: Slides
Download: Practice writing and executing SQL queries for Create, Read, Update, and Delete operations in SQLite

Session 4: CRUD Operations in Embedded Databases ( cont )
- Practical Application
Topic: Offline; Teaching type: CLO9; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Apply CRUD operations to a practical example within their app (e.g., saving notes, user data locally). Handle asynchronous database operations.
CLO6: Be able to manage state using hooks and Redux
Session 1: Overview of Remote Databases
Topic: Offline; Teaching type: CLO9, CLO11; LO: I
ITU: Slide
Download: https://flm.fpt.edu.vn/gui/role/student/Understand the difference between local and remote databases. Learn about common remote database types (SQL, NoSQL) and BaaS options.

Session 2: Connecting Mobile Apps to Remote Databases
Topic: Offline; Teaching type: CLO9, CLO11; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Practice making API calls to retrieve data from a sample public API or a simple backend provided by the lecturer. Handle responses and errors.

Session 3: Introduction to Firebase
Topic: Offline; Teaching type: CLO11; LO: I
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Create a Firebase project. Understand the key services offered (Firestore/Realtime DB, Auth, etc.). Connect their React Native app to the Firebase project.

Session 4: Explore Google Firebase
Topic: Offline; Teaching type: CLO11; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Explore the Firebase console. Practice basic data operations (adding/reading data) in Firestore or Realtime Database directly or through guided app integration.
CLO7: Be able to using list in react-native for data presentation
Session 1: Creating Notifications in React Native with Firebase
Topic: Offline; Teaching type: CLO11, CLO12; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Integrate Firebase Cloud Messaging (FCM) setup into their app. Practice receiving notifications sent via the Firebase console.

Session 2: Gemini AI integration
- Get API key
- Project configuration
Topic: Offline; Teaching type: CLO10; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Obtain a Gemini API key. Set up the necessary SDK/API call structure in their project. Configure the project securely.

Session 3: Gemini AI integration (cont)
- AI Model selection
- Make promt and processing result
Topic: Offline; Teaching type: CLO10; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Practice selecting an appropriate Gemini model. Formulate prompts and make API calls from the app. Display the AI-generated response.

Session 4: Map integration
- Request permission
- Access location API
Topic: Offline; Teaching type: CLO4; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Install react-native-maps. Request location permissions. Get the device's current location and display it on a map component with a marker.
CLO8: Be able to use Debugging and Developer's Tools
Session 1: Image picker integration
Topic: Offline; Teaching type: CLO4; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Install expo-image-picker. Implement functionality to request permissions, open the device's image gallery or camera, and handle the selected image URI.

Session 2: Assigment 2
Topic: Offline; Teaching type: CLO4, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: U
ITU: Slides, assignment's questions
Download: https://flm.fpt.edu.vn/gui/role/student/Work actively on Assignment 2, integrating concepts from sessions 26-45 (debugging, APIs, Firebase, hardware features etc.). Ask specific questions.

Session 3: Assigment 2
Topic: Offline; Teaching type: CLO4, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: U
ITU: Slides, assignment's questions
Download: https://flm.fpt.edu.vn/gui/role/student/Continue working on Assignment 2, focusing on integration and problem-solving.

Session 4: Assigment 2 review
Topic: Offline; Teaching type: CLO4, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: TU
ITU: Slides, assignment's questions
Download: https://flm.fpt.edu.vn/gui/role/student/Submit Assignment 2. Pay attention to the review feedback. Finalize project preparation based on assignment experience.
CLO9: Understand how to Modeling and Storing data
Session 1: Review
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Actively participate in the review session. Ask questions on unclear topics from the entire course. Prepare for Progress Test 2 and Final Project Defense.

Session 2: Review
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Continue active review and Q&A. Solidify understanding of core and advanced concepts.

Session 3: Review
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Final opportunity for clarification before the test/defense. Consolidate notes and understanding.

Session 4: Progress Test 2
Topic: Offline; Teaching type: CLO4, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: U
ITU: 
Download: Take the test
Session 1: Course summary
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Reflect on the key skills and knowledge gained. Ask final questions about the course material or potential next steps in learning.

Session 2: Course summary
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: TU
ITU: Slides
Download: https://flm.fpt.edu.vn/gui/role/student/Final wrap-up and Q&A session. Ensure all administrative aspects are clear.

Session 3: Final Project Defense
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: TU
ITU: 
Download: https://flm.fpt.edu.vn/gui/role/student/Present their final React Native project. Demonstrate its functionality. Explain design choices and technical implementation. Answer questions effectively.

Session 4: Final Project Defense
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: TU
ITU: 
Download: https://flm.fpt.edu.vn/gui/role/student/Present their final React Native project. Demonstrate its functionality. Explain design choices and technical implementation. Answer questions effectively.
Session 1: Final Project Defense
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: TU
ITU: 
Download: https://flm.fpt.edu.vn/gui/role/student/Present their final React Native project. Demonstrate its functionality. Explain design choices and technical implementation. Answer questions effectively.

Session 2: Final Project Defense
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: TU
ITU: 
Download: https://flm.fpt.edu.vn/gui/role/student/Present their final React Native project. Demonstrate its functionality. Explain design choices and technical implementation. Answer questions effectively.

Session 3: Final Project Defense
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: TU
ITU: 
Download: https://flm.fpt.edu.vn/gui/role/student/Present their final React Native project. Demonstrate its functionality. Explain design choices and technical implementation. Answer questions effectively.

Session 4: Final Project Defense
Topic: Offline; Teaching type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9, CLO10, CLO11, CLO12, CLO13; LO: TU
ITU: 
Download: https://flm.fpt.edu.vn/gui/role/student/Present their final React Native project. Demonstrate its functionality. Explain design choices and technical implementation. Answer questions effectively.