<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Anh Vu</title>
    <description>The latest articles on DEV Community by Anh Vu (@anh_vu).</description>
    <link>https://dev.to/anh_vu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3989489%2Fb3249a11-086b-4ab4-9661-ccff0f036103.jpeg</url>
      <title>DEV Community: Anh Vu</title>
      <link>https://dev.to/anh_vu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anh_vu"/>
    <language>en</language>
    <item>
      <title>Why Mobile Bugs Take Days to Reproduce (And How We Fixed It)</title>
      <dc:creator>Anh Vu</dc:creator>
      <pubDate>Thu, 18 Jun 2026 14:43:06 +0000</pubDate>
      <link>https://dev.to/anh_vu/why-mobile-bugs-take-days-to-reproduce-and-how-we-fixed-it-20bk</link>
      <guid>https://dev.to/anh_vu/why-mobile-bugs-take-days-to-reproduce-and-how-we-fixed-it-20bk</guid>
      <description>&lt;p&gt;
One thing surprised me after years of building mobile apps.
&lt;/p&gt;

&lt;p&gt;
The bugs that consumed the most engineering time were rarely the most difficult bugs.
&lt;/p&gt;

&lt;p&gt;
The fixes were often simple.
&lt;br&gt;
The investigation was the expensive part.
&lt;/p&gt;





&lt;h2&gt;A Typical Conversation&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;QA:&lt;/strong&gt;&lt;br&gt;
"Login is failing for some users."
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt;&lt;br&gt;
"I can't reproduce it."
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt;&lt;br&gt;
"I don't see anything unusual in the logs."
&lt;/p&gt;

&lt;p&gt;
QA sends screenshots.
&lt;br&gt;
Frontend asks for more details.
&lt;br&gt;
Backend asks for request payloads.
&lt;br&gt;
Someone records a video.
&lt;br&gt;
Someone else tries to reproduce the issue.
&lt;/p&gt;

&lt;p&gt;
Hours pass.
&lt;br&gt;
Sometimes days.
&lt;/p&gt;

&lt;p&gt;
Eventually, the root cause turns out to be something trivial:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An expired token&lt;/li&gt;
&lt;li&gt;A missing header&lt;/li&gt;
&lt;li&gt;A malformed request body&lt;/li&gt;
&lt;li&gt;A backend validation rule&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The fix takes &lt;strong&gt;five minutes&lt;/strong&gt;.
&lt;br&gt;
The investigation took &lt;strong&gt;two days&lt;/strong&gt;.
&lt;/p&gt;





&lt;h2&gt;The Real Problem Isn't The Bug&lt;/h2&gt;

&lt;p&gt;
The real problem is &lt;strong&gt;visibility&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
When an issue happens on a mobile device, every team sees only part of the picture.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;QA sees the error&lt;/li&gt;
&lt;li&gt;Frontend sees the code&lt;/li&gt;
&lt;li&gt;Backend sees server logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Nobody sees the complete request and response that caused the problem.
&lt;/p&gt;

&lt;p&gt;
As a result, teams spend most of their time collecting evidence instead of fixing the issue.
&lt;/p&gt;





&lt;h2&gt;Screenshots Aren't Enough&lt;/h2&gt;

&lt;p&gt;
For years our workflow looked like this:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Screenshot from QA&lt;/li&gt;
&lt;li&gt;Screen recording&lt;/li&gt;
&lt;li&gt;Console logs&lt;/li&gt;
&lt;li&gt;Slack messages&lt;/li&gt;
&lt;li&gt;Guessing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The problem is that screenshots don't contain enough information.
&lt;/p&gt;

&lt;p&gt;
A screenshot cannot tell you:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which headers were sent&lt;/li&gt;
&lt;li&gt;Which payload was submitted&lt;/li&gt;
&lt;li&gt;Which response was returned&lt;/li&gt;
&lt;li&gt;Whether authentication failed&lt;/li&gt;
&lt;li&gt;Whether the request even reached the server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Yet these are exactly the details engineers need.
&lt;/p&gt;





&lt;h2&gt;What Changed Everything&lt;/h2&gt;

&lt;p&gt;
The biggest improvement came when we started sharing traffic logs instead of screenshots.
&lt;/p&gt;

&lt;p&gt;
Instead of saying:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Login failed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
QA could share:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request URL&lt;/li&gt;
&lt;li&gt;Headers&lt;/li&gt;
&lt;li&gt;Request Body&lt;/li&gt;
&lt;li&gt;Response Body&lt;/li&gt;
&lt;li&gt;HTTP Status Code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Now frontend and backend engineers were looking at the same evidence.
&lt;/p&gt;

&lt;p&gt;
✅ No guessing
&lt;br&gt;
✅ No interpretation
&lt;br&gt;
✅ Just facts
&lt;/p&gt;

&lt;p&gt;
Suddenly issues became much easier to reproduce.
&lt;/p&gt;





&lt;h2&gt;The Impact&lt;/h2&gt;

&lt;p&gt;
The result wasn't fewer bugs.
&lt;/p&gt;

&lt;p&gt;
The result was &lt;strong&gt;faster investigations&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
Instead of spending hours asking questions, teams could immediately focus on solving the actual problem.
&lt;/p&gt;

&lt;p&gt;
What surprised me most was how often communication, not code, was the bottleneck.
&lt;/p&gt;

&lt;p&gt;
The technical fix was usually straightforward.
&lt;br&gt;
Getting everyone aligned on what actually happened was the difficult part.
&lt;/p&gt;





&lt;h2&gt;What We Changed&lt;/h2&gt;

&lt;p&gt;
After running into this workflow repeatedly, our team started capturing and sharing traffic logs directly from mobile devices.
&lt;/p&gt;

&lt;p&gt;
The goal wasn't better debugging tools.
&lt;/p&gt;

&lt;p&gt;
The goal was reducing the time it took QA, frontend engineers and backend engineers to understand the same issue.
&lt;/p&gt;

&lt;p&gt;
Once everyone could see the exact request and response, investigations became dramatically faster.
&lt;/p&gt;

&lt;p&gt;
The feature was traffic inspection.
&lt;br&gt;
The outcome was better collaboration.
&lt;/p&gt;





&lt;h2&gt;Final Thoughts&lt;/h2&gt;

&lt;p&gt;
Many engineering teams spend far more time investigating bugs than fixing them.
&lt;/p&gt;

&lt;p&gt;
If your bug reports still rely on screenshots, screen recordings and Slack threads, there may be an easier way.
&lt;/p&gt;

&lt;p&gt;
The most valuable debugging information is often the request and response that triggered the issue.
&lt;/p&gt;

&lt;p&gt;
Everything else is just context.
&lt;/p&gt;





&lt;h3&gt;How does your team currently handle API-related bug investigations?&lt;/h3&gt;

&lt;p&gt;
Do you rely on screenshots, logs, traffic captures, or something else?
&lt;/p&gt;

&lt;p&gt;canonical_url: &lt;a href="https://moniproxy.com/blog/why-mobile-bugs-take-days-to-reproduce" rel="noopener noreferrer"&gt;https://moniproxy.com/blog/why-mobile-bugs-take-days-to-reproduce&lt;/a&gt;&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>mobiledev</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Capture HTTPS Traffic on iPhone Without a Mac</title>
      <dc:creator>Anh Vu</dc:creator>
      <pubDate>Wed, 17 Jun 2026 16:59:19 +0000</pubDate>
      <link>https://dev.to/anh_vu/how-to-capture-https-traffic-on-iphone-without-a-mac-45o8</link>
      <guid>https://dev.to/anh_vu/how-to-capture-https-traffic-on-iphone-without-a-mac-45o8</guid>
      <description>&lt;p&gt;As a mobile developer, I spend a lot of time debugging API requests.&lt;/p&gt;

&lt;p&gt;Most of the time, the workflow looks something like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open Charles Proxy or Proxyman on a Mac&lt;/li&gt;
&lt;li&gt;Configure proxy settings&lt;/li&gt;
&lt;li&gt;Install certificates&lt;/li&gt;
&lt;li&gt;Connect devices to the same network&lt;/li&gt;
&lt;li&gt;Start inspecting traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools are excellent and have become essential parts of many developers’ workflows.&lt;/p&gt;

&lt;p&gt;But recently I found myself in a situation where I only had my iPhone with me.&lt;/p&gt;

&lt;p&gt;No MacBook.&lt;/p&gt;

&lt;p&gt;No desktop setup.&lt;/p&gt;

&lt;p&gt;I simply wanted to inspect HTTPS traffic from a mobile app.&lt;/p&gt;

&lt;p&gt;That raised a simple question:&lt;/p&gt;

&lt;p&gt;Why is mobile network debugging still so dependent on desktop tools?&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The Problem&lt;/p&gt;

&lt;p&gt;Modern mobile applications communicate with dozens of APIs.&lt;/p&gt;

&lt;p&gt;When something goes wrong, developers often need to inspect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request headers&lt;/li&gt;
&lt;li&gt;Authentication tokens&lt;/li&gt;
&lt;li&gt;Request payloads&lt;/li&gt;
&lt;li&gt;Response bodies&lt;/li&gt;
&lt;li&gt;HTTP status codes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For years, desktop proxy tools have been the standard solution.&lt;/p&gt;

&lt;p&gt;The problem is that they assume you always have access to a computer.&lt;/p&gt;

&lt;p&gt;For quick testing, QA validation, or debugging on the go, that assumption doesn’t always hold true.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Existing Solutions&lt;/p&gt;

&lt;p&gt;Today, many developers rely on tools such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Charles Proxy&lt;/li&gt;
&lt;li&gt;Proxyman&lt;/li&gt;
&lt;li&gt;HTTP Toolkit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They’re powerful and battle-tested.&lt;/p&gt;

&lt;p&gt;However, they are primarily designed around a desktop-first workflow.&lt;/p&gt;

&lt;p&gt;I started wondering what a mobile-first debugging experience would look like.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Building a Mobile-First Workflow&lt;/p&gt;

&lt;p&gt;That curiosity eventually led me to build Moni Proxy.&lt;/p&gt;

&lt;p&gt;The goal wasn’t to replace existing tools.&lt;/p&gt;

&lt;p&gt;The goal was simply to make network debugging easier when working directly from mobile devices.&lt;/p&gt;

&lt;p&gt;The core requirements were straightforward:&lt;/p&gt;

&lt;p&gt;✅ Capture HTTPS traffic&lt;/p&gt;

&lt;p&gt;✅ Inspect requests and responses&lt;/p&gt;

&lt;p&gt;✅ Remote debugging support&lt;/p&gt;

&lt;p&gt;✅ Minimal setup&lt;/p&gt;

&lt;p&gt;✅ Native mobile experience&lt;/p&gt;

&lt;p&gt;The ideal workflow became:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Moni Proxy&lt;/li&gt;
&lt;li&gt;Start a session&lt;/li&gt;
&lt;li&gt;Connect a device&lt;/li&gt;
&lt;li&gt;Inspect traffic in real time&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No desktop required.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;A Typical Debugging Scenario&lt;/p&gt;

&lt;p&gt;Imagine you’re testing a mobile application and an API call suddenly fails.&lt;/p&gt;

&lt;p&gt;Without traffic inspection, you’re often guessing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Was the request sent?&lt;/li&gt;
&lt;li&gt;Did the token expire?&lt;/li&gt;
&lt;li&gt;Did the backend return an error?&lt;/li&gt;
&lt;li&gt;Was the payload malformed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Being able to inspect raw requests and responses immediately answers those questions.&lt;/p&gt;

&lt;p&gt;For mobile developers and QA engineers, this can save a surprising amount of time.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Lessons Learned&lt;/p&gt;

&lt;p&gt;Building developer tools is interesting because developers already have good solutions.&lt;/p&gt;

&lt;p&gt;The challenge isn’t creating another tool.&lt;/p&gt;

&lt;p&gt;The challenge is improving a specific workflow.&lt;/p&gt;

&lt;p&gt;In my case, I focused on one question:&lt;/p&gt;

&lt;p&gt;How can network debugging feel native on mobile devices instead of being an extension of desktop software?&lt;/p&gt;

&lt;p&gt;The answer is still evolving, but the journey has been incredibly rewarding.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Looking for Feedback&lt;/p&gt;

&lt;p&gt;Moni Proxy is now available on iOS and macOS.&lt;/p&gt;

&lt;p&gt;I’m actively looking for feedback from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iOS Developers&lt;/li&gt;
&lt;li&gt;Android Developers&lt;/li&gt;
&lt;li&gt;Flutter Developers&lt;/li&gt;
&lt;li&gt;React Native Developers&lt;/li&gt;
&lt;li&gt;QA Engineers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What does your current network debugging workflow look like?&lt;/p&gt;

&lt;p&gt;If you regularly inspect HTTPS traffic, what is the biggest pain point in your setup today?&lt;/p&gt;

&lt;p&gt;Website:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://moniproxy.com" rel="noopener noreferrer"&gt;https://moniproxy.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ios</category>
      <category>flutter</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
