<?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: Rhazeb Brown</title>
    <description>The latest articles on DEV Community by Rhazeb Brown (@rhazbrown).</description>
    <link>https://dev.to/rhazbrown</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%2F4025898%2F306f48cc-dfd3-4804-a70b-4d499999951e.jpg</url>
      <title>DEV Community: Rhazeb Brown</title>
      <link>https://dev.to/rhazbrown</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rhazbrown"/>
    <language>en</language>
    <item>
      <title>What Frontend Development Taught Me About Breaking Software</title>
      <dc:creator>Rhazeb Brown</dc:creator>
      <pubDate>Sun, 12 Jul 2026 10:42:00 +0000</pubDate>
      <link>https://dev.to/rhazbrown/what-frontend-development-taught-me-about-breaking-software-1lip</link>
      <guid>https://dev.to/rhazbrown/what-frontend-development-taught-me-about-breaking-software-1lip</guid>
      <description>&lt;p&gt;I used to write React components for a living. Now I lead a QA team. The thing that made me switch wasn’t burnout or a better salary. It was realizing that the part of me that used to annoy my dev team was actually the most useful part of me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The habit that used to get side-eyed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I was building features, I had this habit of not letting a ticket go once it was “done.” I’d poke at it. What happens if you tap the button twice fast? What if you’re mid-action and your wifi drops? What if you rotate the screen right when a modal pops up?&lt;/p&gt;

&lt;p&gt;Some teammates found that mildly annoying, honestly. We were trying to ship. Nobody wants the guy asking “but what if” on a Friday afternoon standup.&lt;/p&gt;

&lt;p&gt;Turns out that guy just hadn’t found the right job title yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A real example: the shuffle bug&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Right now I QA a devotional app: audio player, playlists, the whole thing. We had a bug where hitting shuffle on a playlist would restart the currently playing track instead of just reshuffling the queue. Small thing on paper. Annoying in practice. You’re mid-devotion, you tap shuffle, and it yanks you back to 0:00 on the same track.&lt;/p&gt;

&lt;p&gt;Because I’d built UIs before, I wasn’t just clicking around going “yep, broken.” I actually had a hunch about where it was coming from. Shuffle was probably re-triggering the player’s mount/load logic instead of just reordering an array in state. That’s a very “I’ve written this exact bug myself as a dev” kind of guess. I logged it with that context instead of just “shuffle restarts track,” and it got fixed and confirmed within the sprint.&lt;/p&gt;

&lt;p&gt;That’s the part nobody tells you about coming from frontend into QA, you’re not just testing the outcome, you’re testing with a working theory of what the code is probably doing underneath. That’s a huge shortcut.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Passing doesn’t mean protecting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s the lesson that actually changed how I write test cases: a test can pass and still be worthless.&lt;/p&gt;

&lt;p&gt;I used to write things like “user enters correct email and password → logs in successfully” and call it covered. That test passes every time. It also tells you almost nothing, because that’s the one path that was never going to fail. The real bugs live at the edges — expired sessions, a role that shouldn’t see a screen but somehow can, a network call that dies halfway through.&lt;/p&gt;

&lt;p&gt;Once I actually internalized that, my test cases got a lot less tidy and a lot more useful. Less “does it work,” more “what would this miss if something was quietly wrong.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where I’m at now&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Day to day I’m running manual and automated testing across mobile — Appium and Maestro — plus API testing in Postman, and I’m actively building up JS/TypeScript automation with Jest, Playwright, and WebDriverIO. But the actual skill underneath all of it is still the same one that used to get me side-eyed in dev standups: not trusting that something works just because it looks fine on the surface.&lt;/p&gt;

&lt;p&gt;If you’re a developer who can’t stop picking at your own team’s “done” tickets — that’s not a personality flaw. That’s a career waiting to happen.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>react</category>
      <category>webdev</category>
      <category>qa</category>
    </item>
  </channel>
</rss>
