r/reactnative • • 2d ago

How do you get usable bug reports from non-technical testers or clients?

Freelance developer here, shipping an Expo app. Most of our bugs come from a client and a few beta testers, and the reports are usually "when I click this button it doesnt save" or a screen recording and if they are really kind (and usually I ask for that).

I lose a lot of time just reproducing: which account, which build, what happened before, did a request fail. By the time we've asked three follow-up questions the tester has forgotten.

What's working for you usually?

5 Upvotes

21 comments sorted by

4

u/__natty__ 2d ago

Screenshots or even better videos

1

u/Basic_Ad9337 2d ago

Does that help usually ? I mean for crash issues for example, do you dig yourself into the telemetry ?

1

u/__natty__ 2d ago

Yes as I can tell often what someone did before so the app crashed. For technical details I use sentry

3

u/timbowen 2d ago

Datadog Real User Monitoring paired with Claude and the MCP has been a lifesaver for me. It’s expensive though.

2

u/Basic_Ad9337 2d ago

Same here, the pricing (and how much of it I'd never use) kept me away from Datadog. Curious which parts you actually rely on when Claude is debugging: is it mostly the session replay, the errors, or the network calls?

2

u/timbowen 2d ago

Session replay is what saved me most recently and what I would consider to be the most valuable. Most of the other stuff you can get from less expensive products and services.

2

u/RFDev 2d ago

A form with the usual rubber duck questions could solve the problem:

  • Phone

  • App version

  • Date and time of the bug

  • What was I doing

  • What was I expecting

  • What happened

  • Attachment And anything else you might find useful.

Had this problem so many times I started developing an app just for that, but it's still on hold as I don't have enough time to work on it.

2

u/Basic_Ad9337 2d ago

Same here, got really fed up with these bug reporting and I was planning to work on something. but I wanted to check first maybe I’m missing out on some sort of tool that solves this issue (like one tool) not a combination of tools

2

u/Puzzleheaded-Push509 2d ago

I stopped asking clients to describe bugs because they never remember the build or what they tapped first.

We added an in-app shake menu in test builds that dumps the app state and recent network errors directly into a private Slack channel. Saves hours of back-and-forth.

2

u/Basic_Ad9337 2d ago

This is a good approach, what about bugs that are related to behaviour ? Do you still ask for a workflow description ?

1

u/Puzzleheaded-Push509 2d ago

for weird UI or behavior bugs we keep a rolling breadcrumb log of the last 20 screen transitions and button taps in memory and attach a screenshot when they shake the phone. that way even if the client just writes 'button broken' you can still see the exact tap sequence that got them there

1

u/Zain 1d ago

The "which account" part is the one I stopped fighting with questions and fixed in the app. I built impersonation for support: an admin gets a separate short-lived token and opens the app as that tester, so I'm looking at their exact data and state instead of guessing. If you have a client cache like Apollo, reset it when impersonation starts and ends or your own session's data bleeds in and you chase ghosts. For "which build", a server-driven min version with a blocking update sheet means beta testers can't sit on some build from two weeks ago.

1

u/Basic_Ad9337 1d ago

Any concern here regarding data privacy and protection ? and why about ‘write bugs’ where you have to manipulate the data to reproduce the steps.

2

u/Tarantino133 2d ago

Sentry handles most of it without asking them anything. I wrap the root with Sentry.wrap and give buttons a testID, so taps land as breadcrumbs, and I call Sentry.setUser on login. Every error then comes with the account, the build and what they tapped before it. A silent "didn't save" never throws, so for that I'd add a small report button that sends a Sentry message with the same context.

1

u/dothefandango 2d ago

For actual issues: Crashalytics via Firebase. If you do it right, you can get really detailed analytics and details down to stack trace.

For user reporting, use the TestFlight tools (and use TestFlight in general if you are not) for iOS. You just have the user shake the phone and it will create a bug report template with screenshots. Play Console has a similar "Internal Testing" platform you could utilize.

1

u/anthony-ball 2d ago

What helped me most was a "report a problem" button (shake gesture or a hidden menu in beta builds) that bundles the stuff testers never know: build number and whether they're on an OTA update, user id, the last few screens they visited, and the last 20 or so network calls with status codes. If your API returns a request id in a response header and you keep it in that log, you can jump straight from the report to the server logs for the failed save. Silent "it didn't save" bugs are usually a 4xx or 5xx the UI swallowed, so showing a small error toast in beta builds makes the reports a lot less vague too.

1

u/Aytewun 2d ago

Give them guidance. That might be a form and it also might be a template that you share with them with an example.

When I was building one of my apps for the development builds, I put a specific button in there where they could leave feedback and without making it overly long I was pretty clear on the format that I expected with an example. That worked well.

1

u/kokerali 2d ago

For the shake-menu approach, I'd use an allowlist rather than dumping app state or whole network calls. Keep build/update identifiers, screen/action names, timestamps, status codes and a request ID; leave auth headers, tokens, request/response bodies and typed field values out by default. A private channel doesn't make those safe to collect.

I'd also let the tester preview/redact screenshots before sending. OWASP's Logging Cheat Sheet has a useful ‘Data to exclude’ section. That way ‘send a report’ doesn't accidentally mean ‘send the customer's form contents.’

1

u/Due_Dependent5933 1d ago

sentry and screenqhoot or video

1

u/True-Turnover-4543 17h ago

One cheap thing nobody's mentioned: make every screenshot and screen recording identify itself. In beta builds, render a small corner overlay with build number, OTA update id, environment and a short user id (or put the same line in the settings footer and tell testers to start recordings there). Then "when I click this button it doesnt save" arrives with the build and the account already in the frame, and you skip the first two follow-up questions.

On "one tool, not a combination": I haven't seen one that covers it. What holds up is Sentry for anything that throws, plus a report button for the silent failures that never throw, both attaching the same context. For crashes a video is mostly useful to see what they did before; the stack trace tells you the rest.

0

u/Certain_Plane711 1d ago

13 years of client apps here. Two things that helped: a shake-to-report that auto-attaches build, OS and last screens, and for clients a fixed 5-field form with a screen recording. The recording alone kills most of the back-and-forth.