|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: "Remote Usability Testing of Figma Prototypes with reVISit" |
| 4 | +authors: |
| 5 | + - harrison |
| 6 | +--- |
| 7 | + |
| 8 | +Scheduling one-on-one usability sessions is time-consuming, expensive, and hard to scale. With reVISit's **screen recording** and **think-aloud audio** features, you can run instrumented prototype studies asynchronously — participants navigate your Figma prototype while their screen and voice are captured, and you can run multiple participants at once! |
| 9 | + |
| 10 | +<!-- truncate --> |
| 11 | + |
| 12 | +## Why Test Figma Prototypes with reVISit? |
| 13 | + |
| 14 | +Usability testing can be difficult. You have to track people down, schedule a time for the session, and repeat for each user. Remote testing, e.g., via Zoom is possible, but still requires you to be online at the same time. |
| 15 | + |
| 16 | +reVISit now offers an alternative through it's new screen recording and audio think-aloud features. Because Figma provides shareable embed URLs for interactive prototypes, you can drop one directly into a reVISit `website` component using iframes — with very little coding needed. Layering on `recordScreen: true` and `recordAudio: true` gives you: |
| 17 | + |
| 18 | +- **Screen recordings** of every participant's navigation path through the prototype |
| 19 | +- **Synchronized think-aloud audio** so you can hear their reasoning alongside what they see |
| 20 | +- **Structured questionnaires** before and after the prototype task — in the same study, same dataset |
| 21 | +- **Participant Replay** to watch recordings back with audio aligned on a single timeline |
| 22 | + |
| 23 | +The entire study is defined in a single JSON config, and all data lands in your reVISit storage automatically. |
| 24 | + |
| 25 | +## Step 1: Enable Screen Recording and Think-Aloud Audio |
| 26 | + |
| 27 | +Start by turning on both capture modes in the top-level `uiConfig` block: |
| 28 | + |
| 29 | +```json |
| 30 | +"uiConfig": { |
| 31 | + "recordScreen": true, |
| 32 | + "recordAudio": true, |
| 33 | + "withProgressBar": true, |
| 34 | + "withSidebar": true, |
| 35 | + "contactEmail": "your@email.com" |
| 36 | +} |
| 37 | +``` |
| 38 | + |
| 39 | +Then import the companion library that handles participant permissions: |
| 40 | + |
| 41 | +```json |
| 42 | +"importedLibraries": ["screen-recording"] |
| 43 | +``` |
| 44 | + |
| 45 | +The **`screen-recording`** library provides a `screenRecordingPermission` component that asks participants to share their browser tab — similar to screen-sharing in a video call. When `recordAudio: true` is also set, the permissions step requests microphone access at the same time. reVISit blocks progression if either permission is denied. |
| 46 | + |
| 47 | +Insert the permission step near the start of your study sequence: |
| 48 | + |
| 49 | +```json |
| 50 | +"sequence": { |
| 51 | + "order": "fixed", |
| 52 | + "components": [ |
| 53 | + "introduction", |
| 54 | + "$screen-recording.co.screenRecordingPermission", |
| 55 | + "figmaTask", |
| 56 | + "postTaskQuestions" |
| 57 | + ] |
| 58 | +} |
| 59 | +``` |
| 60 | + |
| 61 | + |
| 62 | + |
| 63 | +## Step 2: Embed Your Figma Prototype |
| 64 | + |
| 65 | +In Figma, open your prototype, click **Share → Open embed code** or **Publish**, and copy the URL from the `src` attribute of the generated `<iframe>` tag. It will look something like: |
| 66 | + |
| 67 | +``` |
| 68 | +https://embed.figma.com/proto/<FILE_ID>/<PROTOTYPE_NAME>?node-id=...&scaling=min-zoom&embed-host=share |
| 69 | +``` |
| 70 | + |
| 71 | + |
| 72 | + |
| 73 | +Paste that URL into a `website` component in your reVISit config: |
| 74 | + |
| 75 | +```json |
| 76 | +"figmaTask": { |
| 77 | + "type": "website", |
| 78 | + "recordAudio": true, |
| 79 | + "recordScreen": true, |
| 80 | + "path": "https://embed.figma.com/proto/<YOUR_FILE_ID>/<PROTOTYPE_NAME>?...", |
| 81 | + "instruction": "Please explore the prototype below. As you navigate, speak your thoughts aloud — tell us what you notice, what you expect, and anything that feels unclear or surprising.", |
| 82 | + "response": [] |
| 83 | +} |
| 84 | +``` |
| 85 | + |
| 86 | +Setting `recordAudio` and `recordScreen` on the component itself is optional when they are already enabled globally in `uiConfig`, but it is good practice to be explicit — especially if you want different recording behavior on other components (e.g., a plain questionnaire where you turn audio off). |
| 87 | + |
| 88 | + |
| 89 | + |
| 90 | +## Step 3: Guide Participants with Sidebar Instructions |
| 91 | + |
| 92 | +Without a moderator in the room, it can be easy for participants to forget to think aloud or to drift into their working process. It can be useful to include an on screen prompt to remind them to stay on task |
| 93 | +Add a `textOnly` response at `location: "sidebar"` to keep instructions visible throughout the entire task: |
| 94 | + |
| 95 | +```json |
| 96 | +"response": [ |
| 97 | + { |
| 98 | + "id": "think-aloud-instructions", |
| 99 | + "type": "textOnly", |
| 100 | + "location": "sidebar", |
| 101 | + "prompt": "### Think-Aloud Instructions\n\nYour screen and audio are being recorded. Please say out loud everything you are thinking as you move through the prototype.\n\n**As you explore, try to describe:**\n\n- What you notice on each screen\n- What you expect to happen when you tap or click something\n- What feels clear or confusing\n- Why you choose certain actions\n\nThere are no right or wrong actions — we are evaluating the design, not you." |
| 102 | + } |
| 103 | +] |
| 104 | +``` |
| 105 | + |
| 106 | +Sidebar content remains pinned while participants scroll or interact, so the instructions stay in view even as they move through multiple prototype screens. |
| 107 | + |
| 108 | +## Step 4: Collect Structured Post-Task Feedback |
| 109 | + |
| 110 | +Follow the prototype task with a `questionnaire` component. Setting `recordAudio: true` on it means participants can continue to narrate their thoughts while they fill out rating scales and open-ended questions — a useful signal for interpreting their written responses. Alternately, you might design a series of pages with one spoken question per page, which will automatically be segmented by reVISit's trial management architecture. |
| 111 | + |
| 112 | +```json |
| 113 | +"postTaskQuestions": { |
| 114 | + "type": "questionnaire", |
| 115 | + "recordAudio": true, |
| 116 | + "response": [ |
| 117 | + { |
| 118 | + "id": "satisfaction", |
| 119 | + "prompt": "Rate your satisfaction with the following aspects of the prototype.", |
| 120 | + "location": "aboveStimulus", |
| 121 | + "type": "matrix-radio", |
| 122 | + "answerOptions": "satisfaction5", |
| 123 | + "questionOptions": [ |
| 124 | + "Overall Design", |
| 125 | + "Ease of Navigation", |
| 126 | + "Visual Clarity", |
| 127 | + "Completeness of Information" |
| 128 | + ] |
| 129 | + }, |
| 130 | + { |
| 131 | + "id": "open-feedback", |
| 132 | + "prompt": "What stood out most during your exploration — positive or negative?", |
| 133 | + "location": "aboveStimulus", |
| 134 | + "type": "longText", |
| 135 | + "placeholder": "Share your thoughts here..." |
| 136 | + } |
| 137 | + ] |
| 138 | +} |
| 139 | +``` |
| 140 | + |
| 141 | +The Likert matrix response type (`matrix-radio`) with the built-in `satisfaction5` answer options gives you a clean, pre-labeled five-point scale without any extra configuration. |
| 142 | + |
| 143 | +## Reviewing Your Results |
| 144 | + |
| 145 | +Once participants complete the study, head to the reVISit analysis interface. The **[Participant Replay](https://revisit.dev/docs/analysis/participant-replay/)** view lets you watch each participant's screen recording with their think-aloud audio synchronized on a timeline — so you can see exactly where they hesitated, backtracked, or expressed confusion. |
| 146 | + |
| 147 | +For deeper qualitative analysis, the **[Qualitative Coding](https://revisit.dev/docs/analysis/coding/)** interface displays auto-transcribed think-aloud text for each participant and task, lets you correct transcriptions, and supports creating and applying codebooks to surface recurring themes across your dataset. |
| 148 | + |
| 149 | + |
| 150 | + |
| 151 | +## Putting it All Together |
| 152 | + |
| 153 | +Here is a complete, ready-to-use config. The only change you need to make is swapping in your Figma embed URL for the `path` value in `figmaTask`: |
| 154 | + |
| 155 | +```json |
| 156 | +{ |
| 157 | + "$schema": "https://raw.githubusercontent.com/revisit-studies/study/v2.3.0/src/parser/StudyConfigSchema.json", |
| 158 | + "studyMetadata": { |
| 159 | + "title": "Prototype Usability Study", |
| 160 | + "version": "pilot", |
| 161 | + "authors": ["Your Name"], |
| 162 | + "date": "2026-02-21", |
| 163 | + "description": "A think-aloud usability study with screen and audio recording.", |
| 164 | + "organizations": ["Your Institution"] |
| 165 | + }, |
| 166 | + "uiConfig": { |
| 167 | + "contactEmail": "your@email.com", |
| 168 | + "withProgressBar": true, |
| 169 | + "withSidebar": true, |
| 170 | + "recordAudio": true, |
| 171 | + "recordScreen": true |
| 172 | + }, |
| 173 | + "importedLibraries": ["screen-recording"], |
| 174 | + "components": { |
| 175 | + "introduction": { |
| 176 | + "type": "markdown", |
| 177 | + "path": "<PATH_TO_YOUR_INTRODUCTION.md>", |
| 178 | + "response": [] |
| 179 | + }, |
| 180 | + "figmaTask": { |
| 181 | + "type": "website", |
| 182 | + "recordAudio": true, |
| 183 | + "recordScreen": true, |
| 184 | + "path": "https://embed.figma.com/proto/<YOUR_FILE_ID>/<PROTOTYPE_NAME>?node-id=...&scaling=min-zoom&embed-host=share", |
| 185 | + "instruction": "Please explore the prototype below. As you navigate, speak your thoughts aloud — tell us what you notice, what you expect, and anything that feels unclear or surprising.", |
| 186 | + "response": [ |
| 187 | + { |
| 188 | + "id": "think-aloud-instructions", |
| 189 | + "type": "textOnly", |
| 190 | + "location": "sidebar", |
| 191 | + "prompt": "### Think-Aloud Instructions\n\nYour screen and audio are being recorded. Please say out loud everything you are thinking as you move through the prototype.\n\n**As you explore, try to describe:**\n\n- What you notice on each screen\n- What you expect to happen when you tap or click something\n- What feels clear or confusing\n- Why you choose certain actions\n\nThere are no right or wrong actions — we are evaluating the design, not you." |
| 192 | + } |
| 193 | + ] |
| 194 | + }, |
| 195 | + "postTaskQuestions": { |
| 196 | + "type": "questionnaire", |
| 197 | + "recordAudio": true, |
| 198 | + "response": [ |
| 199 | + { |
| 200 | + "id": "satisfaction", |
| 201 | + "prompt": "Rate your satisfaction with the following aspects of the prototype.", |
| 202 | + "location": "aboveStimulus", |
| 203 | + "type": "matrix-radio", |
| 204 | + "answerOptions": "satisfaction5", |
| 205 | + "questionOptions": [ |
| 206 | + "Overall Design", |
| 207 | + "Ease of Navigation", |
| 208 | + "Visual Clarity", |
| 209 | + "Completeness of Information" |
| 210 | + ] |
| 211 | + }, |
| 212 | + { |
| 213 | + "id": "open-feedback", |
| 214 | + "prompt": "What stood out most during your exploration — positive or negative?", |
| 215 | + "location": "aboveStimulus", |
| 216 | + "type": "longText", |
| 217 | + "placeholder": "Share your thoughts here..." |
| 218 | + } |
| 219 | + ] |
| 220 | + } |
| 221 | + }, |
| 222 | + "sequence": { |
| 223 | + "order": "fixed", |
| 224 | + "components": [ |
| 225 | + "introduction", |
| 226 | + "$screen-recording.co.screenRecordingPermission", |
| 227 | + "figmaTask", |
| 228 | + "postTaskQuestions" |
| 229 | + ] |
| 230 | + } |
| 231 | +} |
| 232 | +``` |
| 233 | + |
| 234 | +## Next Steps |
| 235 | + |
| 236 | +To learn more, check out the [Screen Recording setup guide](https://revisit.dev/docs/designing-studies/record-screen/) and the [Think-Aloud documentation](https://revisit.dev/docs/designing-studies/think-aloud/). If you have questions or want to share what you build, come find us in the [reVISit Slack](https://revisit.dev/contact/). We'd love to see what kinds of prototypes you put to the test. |
0 commit comments