<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Quality Assurance Archives - ShiftMag</title>
	<atom:link href="https://shiftmag.dev/category/quality-assurance/feed/" rel="self" type="application/rss+xml" />
	<link>https://shiftmag.dev/category/quality-assurance/</link>
	<description>Insightful engineering content &#38; community</description>
	<lastBuildDate>Tue, 06 Oct 2026 10:25:47 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://shiftmag.dev/wp-content/uploads/2026/09/cropped-Shift-32x32.webp</url>
	<title>Quality Assurance Archives - ShiftMag</title>
	<link>https://shiftmag.dev/category/quality-assurance/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>QA Is What Happens When Software Meets Reality</title>
		<link>https://shiftmag.dev/qa-is-what-happens-when-software-meets-reality-11744/</link>
		
		<dc:creator><![CDATA[Aldijana Culezovic]]></dc:creator>
		<pubDate>Tue, 06 Oct 2026 10:25:12 +0000</pubDate>
				<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[software testing]]></category>
		<category><![CDATA[UX]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=11744</guid>

					<description><![CDATA[<p>Developers can prove the code works in a controlled environment. QA checks whether it survives the messy, unpredictable world customers actually live in.</p>
<p>The post <a href="https://shiftmag.dev/qa-is-what-happens-when-software-meets-reality-11744/">QA Is What Happens When Software Meets Reality</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-post-featured-image"><img fetchpriority="high" decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2026/09/developer-vs.-QA.png?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/09/developer-vs.-QA.png 1200w, https://shiftmag.dev/wp-content/uploads/2026/09/developer-vs.-QA-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2026/09/developer-vs.-QA-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/09/developer-vs.-QA-768x403.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></figure>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The developer already tested it, so why do you need to test it too?</p>
</blockquote>



<p class="wp-block-paragraph">If you work in tech, <strong>you’ve probably heard this sentence a thousand times</strong>.</p>



<p class="wp-block-paragraph">A developer writes the code, runs the checks, all the tests pass, and the feature works.</p>



<p class="wp-block-paragraph">So why do companies still hire Quality Assurance (QA) engineers? Are we just here to double-check developers’ work, or is there a deeper purpose?</p>



<p class="wp-block-paragraph">The short answer is: no.</p>



<p class="wp-block-paragraph">The longer answer is that <strong>there’s a fundamental difference between writing code and creating a great customer experience</strong>. The value of QA lies in perspective, risk awareness, and understanding how people actually use a product.</p>



<h2 class="wp-block-heading" id="the-builder">The builder</h2>



<p class="wp-block-paragraph">To build a truly great product, you need <strong>two very different mindsets</strong>: the builder and the chaos maker.</p>



<p class="wp-block-paragraph">A developer’s brain is wired for creation, logic, and structure. While QA starts the day with a finished product, a developer starts with a blank screen. Their job is to create something out of nothing and assemble the many moving parts of a complex system into something that works exactly as intended.</p>



<p class="wp-block-paragraph"><strong>Developers are responsible for creating the magic</strong>. To build even a single feature, they have to master a labyrinth of tools, frameworks, databases, and configurations. They carry the responsibility of making sure the architecture is secure, the system can handle heavy load, and the new code integrates cleanly with millions of lines of existing logic. Their work is highly complex and demands deep understanding, precision, and sustained focus. They are the architects of the digital world.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Because their primary mission is building and stabilizing the system, their testing mindset naturally reflects that. When developers test their code, they are checking whether their blueprint holds up. They focus on the happy path, along with a few common scenarios, in a controlled environment, using standard data to confirm that the core functionality works as intended. Their attention is on making sure the foundation is solid.</p>
</blockquote>



<p class="wp-block-paragraph">Think of a developer as an architect and engineer combined. They design a beautiful, highly complex door, check that the handle turns smoothly, inspect the hinges, and confirm that it opens perfectly.</p>



<p class="wp-block-paragraph"><strong>Now what? Aren’t developers already responsible for the whole thing?</strong></p>



<h2 class="wp-block-heading" id="the-chaos-maker">The chaos maker</h2>



<p class="wp-block-paragraph">While developers are incredibly skilled at what they do, they cannot be expected to carry the entire burden of the user experience alone. That is where QA steps in &#8211; to relieve some of that pressure and help refine the product for the real world.</p>



<p class="wp-block-paragraph">If a developer’s brain is wired for creation, a <strong>QA’s brain is wired for exploration and chaos</strong>. The goal is not to prove that the software works, but to discover what happens when the scenario is not perfect. We test unusual cases, unpredictable behavior, and the edge cases that real users may actually trigger. We test for the messy real world.</p>



<p class="wp-block-paragraph">Because of this, QA goes far beyond engineering. The work calls for empathy, human psychology, and an eye for the emotional, reliability, and invisible factors that make customers want to use a product.</p>



<p class="wp-block-paragraph">As a QA, <strong>I’m constantly stepping into the user’s shoes</strong> and asking myself a very different set of questions:</p>



<ul class="wp-block-list">
<li>Is this accessible and intuitive to use?</li>



<li>What emotion does this product create for me &#8211; frustration or delight?</li>



<li>Would I still enjoy using it tomorrow, or would it already be starting to annoy me?</li>
</ul>



<h2 class="wp-block-heading" id="what-happens-in-the-real-world">What happens in the real world</h2>



<p class="wp-block-paragraph">To make this point come to life, let me share a personal experience. </p>



<p class="wp-block-paragraph">I’ve seen that <strong>even a large team of skilled developers means every single scenario is not automatically covered</strong>. Tight deadlines, heavy workloads, and the sheer mental focus required to build complex architecture make it nearly impossible for any single perspective to catch everything. Once a feature is done with implementation, it’s QA’s turn to step in, look beyond the happy path, and hunt down every possible edge case.</p>



<h3 class="wp-block-heading" id="the-blank-space-api-trap">The &#8220;blank space&#8221; API trap</h3>



<p class="wp-block-paragraph">For instance, when new feature was implemented, it was time to test it. My team and I ran automated tests for our Voice APIs.</p>



<p class="wp-block-paragraph">During testing, <strong>I decided to try something slightly unusual</strong>: I sent a call using a sender name that contained a space. Immediately, the calls started failing. This turned out to be a critical issue. If a real client wanted to do something as simple and common as putting a space in their sender name (e.g., &#8220;Global Bank&#8221; instead of &#8220;GlobalBank&#8221;), their entire voice campaign would fail. We only discovered this flaw because we had an automated QA project specifically designed to stress-test the exact parameters our clients use daily, which even shows the importance of regression tests and their benefits before the release.</p>



<h3 class="wp-block-heading" id="the-edge-case-that-shouldn%e2%80%99t-break-the-system">The edge case that shouldn’t break the system</h3>



<p class="wp-block-paragraph">Another instance happened while I was testing the delivery reports for our system. The documentation stated that the record limit field was limited to 1 to 1000. My QA brain asked, &#8220;What happens if a user accidentally types 0?&#8221; <strong>When I entered 0, the system crashed and returned a 500 Internal Server Error</strong>. </p>



<p class="wp-block-paragraph">Technically, it was just a wrong number. But from a customer experience standpoint, this is a big deal. A 500 error tells the client, &#8220;Your servers are broken,&#8221; which causes panic, especially during real-time actions. It should have gracefully returned a 400 Bad Request, which politely tells the user, &#8220;Oops, your input was invalid, please try again.&#8221; </p>



<p class="wp-block-paragraph">Logically, it makes no sense for a user to request 0 records. But it is our duty as QA to make sure that even when a user does something illogical, the system handles it elegantly instead of catching on fire.</p>



<h3 class="wp-block-heading" id="the-trapped-user">The trapped user</h3>



<p class="wp-block-paragraph">The chaos isn’t always in the backend, either. Recently, while performing manual UI testing, I found a scenario where a user could fill out an entire complex form, only to find that the <strong>&#8220;Save&#8221; button remained permanently disable</strong>d because of a tiny edge-case conflict in the UI logic. Imagine the frustration of spending ten minutes typing out intricate details, only to be trapped at the finish line and unable to save the work. </p>



<p class="wp-block-paragraph">All of these instances prove why additional testing is necessary. It is incredibly easy for crucial edge cases to slip through when a team’s primary focus is building complex core functionality. No one should set a limit to 0. A sender name shouldn’t break an API. But humans aren’t strictly logical, and neither is the real world. That is why QA exists.</p>



<h2 class="wp-block-heading" id="qa-and-devs-are-two-halves-of-the-same-brain">QA and devs are two halves of the same brain</h2>



<p class="wp-block-paragraph">Ultimately, this story comes back to the same point: success. Despite our different approaches, <strong>both teams are chasing the same finish line</strong>. We come together, we collaborate, and we bring an idea to life in the best possible way.</p>



<p class="wp-block-paragraph">Both developers and QA want the same thing: to deliver a product that is simple, easy to use, unique, and highly functional. We want to build something so reliable and intuitive that the end user does not even have to think about how it works under the hood &#8211; it just does.</p>



<p class="wp-block-paragraph">Because my job involves finding edge cases, logging bugs, and occasionally breaking a developer’s hard work, it is easy for outsiders to assume that developers and QA are at war. But that is far from the truth. <strong>We are not enemies; we are an essential partnership</strong>. We are a continuous feedback loop where logic meets empathy.</p>



<p class="wp-block-paragraph">Just like a human being cannot function with only half a brain, a truly great product cannot survive in the wild with only one mindset. It needs the builder’s solid foundation, and it needs the chaos maker’s reality check.</p>



<p class="wp-block-paragraph"><strong>The developer brain ensures the software is built right. The QA brain ensures we’re building the right software for the customer.</strong> Together we create the product that customers love.</p>



<h2 class="wp-block-heading" id="before-you-go">Before you go&#8230;</h2>



<p class="wp-block-paragraph">Next time someone asks, &#8220;The developer already tested it, why do you need to test it too?&#8221; you’ll know exactly what to say: </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Code lives on servers, but customer experience lives in the real world, and QA is the bridge between the two.</p>
</blockquote>
<p>The post <a href="https://shiftmag.dev/qa-is-what-happens-when-software-meets-reality-11744/">QA Is What Happens When Software Meets Reality</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Build your software like a motorcycle</title>
		<link>https://shiftmag.dev/build-your-software-like-a-motorcycle-3868/</link>
		
		<dc:creator><![CDATA[Anastasija Uspenski]]></dc:creator>
		<pubDate>Tue, 06 Aug 2024 13:50:40 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[blueprints]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[quality assurance]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=3868</guid>

					<description><![CDATA[<p>Discover how Jose Javier Moya's motorcycle analogy reveals the secrets of building a successful software deployment process through blueprints, automation, and quality assurance.</p>
<p>The post <a href="https://shiftmag.dev/build-your-software-like-a-motorcycle-3868/">Build your software like a motorcycle</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-post-featured-image"><img decoding="async" width="1200" height="720" src="https://shiftmag.dev/wp-content/uploads/2024/07/Jose-Javier-Moya.png?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2024/07/Jose-Javier-Moya.png 1200w, https://shiftmag.dev/wp-content/uploads/2024/07/Jose-Javier-Moya-300x180.png 300w, https://shiftmag.dev/wp-content/uploads/2024/07/Jose-Javier-Moya-1024x614.png 1024w, https://shiftmag.dev/wp-content/uploads/2024/07/Jose-Javier-Moya-768x461.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">&#8220;Building a successful software deployment process is akin to manufacturing a high-quality motorcycle,&#8221; explains <a href="https://www.linkedin.com/in/jjavieralonso/">Jose Javier Moya</a>, a DevOps Ambassador at Amadeus IT Group, who spoke at the WeAreDevelopers World Congress.</p>



<p class="wp-block-paragraph">Moya also highlighted how Git repositories act as blueprints, Jenkins automates consistency, and reconciliation agents ensure deployment integrity, drawing parallels between manufacturing and software processes.</p>



<p class="wp-block-paragraph">This analogy not only underscores the complexity of modern software development but also <strong>provides a clear framework</strong> for understanding how these elements work together to ensure successful implementations.</p>



<h2 class="wp-block-heading" id="building-the-perfect-motorcycle">Building the perfect motorcycle</h2>



<p class="wp-block-paragraph">Moya used a motorcycle analogy to highlight the need for detailed planning in software development. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Imagine your company as a motorcycle manufacturer. To build a motorcycle, you need more than just a basic idea. You need a detailed blueprint.</p>
</blockquote>



<p class="wp-block-paragraph">Moya explained that this blueprint includes specifics, such as the size of the tank and the type of tires. Similarly, deploying <strong>software requires more than a simple configuration file</strong>. It demands a comprehensive description of how the software should be built and operated.</p>



<h2 class="wp-block-heading" id="the-role-of-git">The role of Git</h2>



<p class="wp-block-paragraph">Moya compared motorcycle blueprints to Git repositories. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">In our motorcycle factory, the blueprint acts as a contract between the manufacturer and the buyer.</p>
</blockquote>



<p class="wp-block-paragraph">Similarly, a Git repository serves as the blueprint for software. <strong>It stores all necessary configuration files and documentation</strong>, ensuring that every aspect of the software deployment is well-documented and controlled. Just as a motorcycle blueprint covers every detail, Git repositories provide comprehensive details for software projects.</p>



<h2 class="wp-block-heading" id="use-automation-as-your-secret-weapon">Use automation as your secret weapon</h2>



<p class="wp-block-paragraph">Then, he highlighted the crucial role of automation in software deployment. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Imagine if your motorcycle factory were fully automated. Once you receive a blueprint, the factory will automatically build the motorcycle according to the specified details.</p>
</blockquote>



<p class="wp-block-paragraph">Similarly, automation tools play a crucial role in software development. <strong>For instance, Jenkins and other tools act as gatekeepers</strong>. They check to ensure that all requirements are met before deployment. Using automation, developers can build and deploy software consistently and accurately.</p>



<h2 class="wp-block-heading" id="quality-assurance-is-automations-secret-superpower">Quality assurance is automation&#8217;s secret superpower</h2>



<p class="wp-block-paragraph">According to Moya, automation extends beyond just building and involves quality assurance. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Jenkins performs various checks, including static analysis, security scans, and operational checks.</p>
</blockquote>



<p class="wp-block-paragraph">These checks <strong>ensure the software is free from vulnerabilities</strong>, does not break existing functionality, and meets operational requirements. This rigorous scrutiny helps prevent issues in production, much like how rigorous testing ensures a motorcycle is safe and reliable before it hits the road.</p>



<h2 class="wp-block-heading" id="what-is-the-role-of-reconciliation-agents">What is the role of reconciliation agents?</h2>



<p class="wp-block-paragraph">Moya described how reconciliation agents like ArgoCD manage the deployment process. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">After passing all the checks, the actual deployment is handled by reconciliation agents.</p>
</blockquote>



<p class="wp-block-paragraph"><strong>These tools continuously compare the desired state</strong>, as described in the Git repository, with the actual state of the deployment. They correct deviations, ensuring consistency between the intended and actual configurations, much like ensuring every motorcycle built matches the blueprint.</p>



<h2 class="wp-block-heading" id="let-automation-and-reconciliation-take-the-lead">Let automation and reconciliation take the lead</h2>



<p class="wp-block-paragraph">Jose Javier Moya also discussed expanding these principles to cloud environments. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">As software and infrastructure grow more complex, the principles of automation and reconciliation extend beyond traditional applications.</p>
</blockquote>



<p class="wp-block-paragraph">In cloud environments, tools like Terraform manage cloud resources using the same configuration principles, adapting these concepts <strong>to manage increasingly complex infrastructure and services</strong>.</p>



<h2 class="wp-block-heading" id="welcome-to-the-new-layers-of-complexity">Welcome to the new layers of complexity</h2>



<p class="wp-block-paragraph">Reflecting on the evolution of operations, Moya pointed out that managing systems used to be more straightforward with mainframes and a few servers. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Over time, as systems grew and became more complex, managing them manually became impractical.</p>
</blockquote>



<p class="wp-block-paragraph"><strong>Virtualization and cloud computing introduced new layers of complexity</strong>, which tools like Git, Jenkins, and ArgoCD now help manage effectively.</p>
<p>The post <a href="https://shiftmag.dev/build-your-software-like-a-motorcycle-3868/">Build your software like a motorcycle</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>&#8220;Developers should own security. And test in production.&#8221;</title>
		<link>https://shiftmag.dev/larry-maccherone-testing-in-production-3210/</link>
		
		<dc:creator><![CDATA[Milena Radivojević]]></dc:creator>
		<pubDate>Wed, 15 May 2024 11:21:20 +0000</pubDate>
				<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Larry Maccherone]]></category>
		<category><![CDATA[quality assurance]]></category>
		<category><![CDATA[software testing]]></category>
		<category><![CDATA[testing in production]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=3210</guid>

					<description><![CDATA[<p>DevSecOps expert explains why testing in production is cheaper, faster, and safer.</p>
<p>The post <a href="https://shiftmag.dev/larry-maccherone-testing-in-production-3210/">&#8220;Developers should own security. And test in production.&#8221;</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-post-featured-image"><img decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2024/04/Larry-Maccherone.png?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2024/04/Larry-Maccherone.png 1200w, https://shiftmag.dev/wp-content/uploads/2024/04/Larry-Maccherone-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2024/04/Larry-Maccherone-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2024/04/Larry-Maccherone-768x403.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">Not long ago application and API security relied solely on manual methods like knights guarding a castle.</p>



<p class="wp-block-paragraph">Now, with Agile and DevOps leading the charge and orchestrated ephemeral infrastructure as our new arsenal, <strong>we&#8217;ve upgraded to a tech-savvy defense</strong>, ensuring efficiency and effectiveness like never before.</p>



<p class="wp-block-paragraph">In this interview, we talk about it with <a href="https://www.linkedin.com/in/larrymaccherone/" target="_blank" rel="noreferrer noopener">Larry Maccherone</a>, Dev[Sec]Ops Transformation Architect at Contrast Security.</p>



<h2 class="wp-block-heading" id="there-are-almost-no-dedicated-qa-departments-anymore">There are almost no dedicated QA departments anymore</h2>



<p class="wp-block-paragraph">&#8220;Back in the early days of Agile, I used to advocate for cross-functional teams owning software products, including quality. After these talks, QA professionals would often express concern about their siloed roles, fearing changes if development teams took over quality responsibility, often commenting, &#8220;What you said sounds idealistic. It&#8217;ll never work at my organization. The developers will just put out crap.&#8221; </p>



<p class="wp-block-paragraph">A decade later, there are almost no dedicated QA departments, and the ones that are left are more of a body shop with all of their people on semi-permanent &#8216;loan&#8217; to specific dev teams.</p>



<p class="wp-block-paragraph">Also, we have to remember that back then, developers didn&#8217;t do QA the way QA people did QA. &#8220;They tried to eliminate all manual testing and replace it with automated testing.&#8221;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The DevOps and cloud-native movements were similarly disruptive to traditional IT Ops and were also dominated by automation. Security is now well into a similar tradition which is also marked by more tools deeply integrated into the process.<br></p>
</blockquote>



<h2 class="wp-block-heading" id="shifting-the-responsibility-for-security-to-dev-teams">Shifting the responsibility for security to dev teams</h2>



<p class="wp-block-paragraph">We also asked Larry about the challenges that the industry faces when <strong>considering application and API security as a siloed function</strong>.</p>



<p class="wp-block-paragraph">&#8220;Siloed functions tend to result in local optimization rather than holistic systems thinking. In systems thinking (referred to as &#8220;flow&#8221; as the first of three &#8220;ways&#8221; of DevOps), you try to optimize for value delivery of the entire software development system&#8221;, Larry claims.</p>



<p class="wp-block-paragraph">To get more concrete, Larry says that in a silo, security folks find the vulnerabilities, but they can&#8217;t fix them themselves. That leaves them in the position of essentially begging the developers to fix them. </p>



<p class="wp-block-paragraph">&#8220;In this same siloed example, the development teams are measured on how many features they ship. Security is responsible for security. So, the local optimization is to ignore the requests from security to fix the vulnerabilities they found.&#8221;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">On the other hand,<strong> if you shift responsibility for security to the development team, they can optimize for the best overall outcome</strong>. Sometimes that means, they can make tradeoffs. At times they might legitimately decide that the risk of not fixing a vulnerability is outweighed by the risk of missing a market opportunity. At other times, they will decide that the security vulnerability fix is the most valuable way to spend their limited resources.</p>
</blockquote>



<p class="wp-block-paragraph">Also, according to Maccherone, developers are prone to automate things, which makes them more efficient overall.</p>



<h2 class="wp-block-heading" id="developers-just-want-their-code-to-be-merged">Developers just want their code to be merged</h2>



<p class="wp-block-paragraph">A particular practice that is now universally used by development teams is <strong>the pull/merge request</strong>. It is the very center of how development teams coordinate their work. </p>



<p class="wp-block-paragraph">It&#8217;s the process of a developer&#8217;s morning work reaching the shared codebase by afternoon and ultimately going into production. Almost all automated quality and security checks can (and should) be run prior to the decision to merge that code. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The person clicking on the &#8220;merge&#8221; button is generally a teammate of the developer for that pull/merge request. </p>



<p class="wp-block-paragraph">This pull/merge request reviewer, will look at the changes but will also be informed by the automated quality and security checks that were run prior to their review. <br>Developers are passionate about the code they wrote and want nothing more than for it to be merged. They will see any negative feedback from a security check and respond to it immediately.</p>
</blockquote>



<p class="wp-block-paragraph">Done this way, the vulnerability is often resolved on the same day that it was injected. At this point, the code is very familiar to the developer, so the cost of fixing is an order of magnitude lower, especially when you consider that there was no vulnerability inventory carrying costs.</p>



<p class="wp-block-paragraph">The situation Larry described above is <strong>only possible if each pull/merge request has its own isolated infrastructure</strong> for the automated quality and security checks to run.</p>



<p class="wp-block-paragraph">With traditional methods, having five developers on one team would require maintaining five separate test environments, costly and often idle. Yet, with container-based ephemeral infrastructure, a single developer&#8217;s request can spawn multiple workers to conduct quality and security checks simultaneously, completing tasks rapidly and freeing up resources for others.</p>



<h2 class="wp-block-heading" id="technology-practices-and-culture"><strong>Technology, practices, and culture</strong></h2>



<p class="wp-block-paragraph">And what about a future Larry sees emerging for application and API security testing?</p>



<p class="wp-block-paragraph">He emphasized that significant industry transformations, such as the DevOps movement, hinge on three key components: <strong>technology, practices, and culture</strong>.</p>



<p class="wp-block-paragraph">In DevOps, ephemeral build and test infrastructure alongside cloud-native technologies represent the technological shifts, while adopting the pull/merge request signifies a change in practices. Culturally, the pivotal shift involves transferring operational responsibilities to the development team.</p>



<p class="wp-block-paragraph">So, what is the coming revolutionary change for Application and API Security? </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">It follows the revolution pattern for DevOps, namely those three things &#8211; technology, practices, and culture, but it also builds upon the changes that DevOps has brought.</p>
</blockquote>



<p class="wp-block-paragraph">However, before we jump into it, we are going to take a little detour to one discipline that fundamentally changed along with the DevOps movement: <strong>performance testing</strong>.</p>



<h2 class="wp-block-heading" id="performance-testing-in-production-cheaper-faster-and-safer"><strong>Performance testing in production: cheaper, faster, and safer</strong></h2>



<p class="wp-block-paragraph">&#8220;Performance testing <strong>was long considered a necessary evil</strong>. It was expensive and inaccurate, but without it, you ran the risk of having an outage or at least annoyed customers when your application appeared non-responsive.&#8221;</p>



<p class="wp-block-paragraph">Creating a test environment similar to production was necessary, but the closer it mirrored reality, <a href="https://shiftmag.dev/staging-environments-2367/">the higher the costs</a>, potentially doubling production expenses.</p>



<p class="wp-block-paragraph">Then, running extensive automated test scripts in the performance environment incurred high costs, but the real issue was their reliance on artificial traffic, which would <strong>lead to inaccurate predictions of real user performance</strong>.</p>



<p class="wp-block-paragraph">&#8220;Because of these difficulties, many didn’t even bother with performance testing and took the risk of releasing without it,&#8221; Larry says.</p>



<p class="wp-block-paragraph">Then came technology, practice, and cultural transformations that disrupted the performance testing landscape and avoided all the previous problems. Developers started doing performance testing in production.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The enabling technological change came in the form of application performance monitoring agents that were efficient enough to run in production. The practice change was canary deployments. The cultural shift was realizing that <strong>doing performance testing in production was cheaper, faster, and safer</strong> than doing it in pre-production when we previously believed you must trade these factors off against each other.</p>
</blockquote>



<h2 class="wp-block-heading" id="test-your-api-security-in-production-too"><strong>Test your API security in production too</strong></h2>



<p class="wp-block-paragraph">At this point, you might be thinking, “What does this performance testing diversion have to do with the future of application and API security testing?” </p>



<p class="wp-block-paragraph">Well, <strong>what if we can safely accomplish app and API security testing in production?</strong></p>



<p class="wp-block-paragraph">Doing so avoids the downsides of the current methods:</p>



<ul class="wp-block-list">
<li>SAST’s inaccuracy and long scan times</li>



<li>DAST and IAST’s poor coverage</li>



<li>SCA’s lack of context</li>



<li>WAF’s ineffectiveness</li>
</ul>



<p class="wp-block-paragraph">&#8220;Like the performance testing of yesteryear, these downsides, along with the cost of licensing, rolling out, and maintaining all of these disparate tools, cause many to skip some or all of them and risk getting hacked. However, <strong>to achieve a revolution like this, we’ll need all three elements of the other revolutions</strong>: technology, practices, and culture,&#8221; Larry emphasizes.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The technological innovation we need is the same as the one we need for the performance testing revolution &#8211; agents that are safe and efficient enough to run in production. We’ve been making steady improvements to our IAST agent for years such that it’s an order of magnitude more efficient than it was a few years ago, but <strong>we recently beta-released new agents that take a fundamentally different approach when running in production environments</strong>, which have improved the efficiency by another order of magnitude.</p>
</blockquote>



<p class="wp-block-paragraph">The practice change is that we need those agents installed by engineering teams in production environments. The cultural transformation is similar to the performance testing one—the conviction that doing application and API security testing in production is cheaper, faster, and more secure than doing it in pre-production.</p>



<p class="wp-block-paragraph">So, Larry believes <strong>we are on the cusp of a revolution in app and API security testing</strong> like the one that occurred for performance testing. </p>
<p>The post <a href="https://shiftmag.dev/larry-maccherone-testing-in-production-3210/">&#8220;Developers should own security. And test in production.&#8221;</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Engineer Explains: Software testing explained in 3 minutes at 3 levels of expertise</title>
		<link>https://shiftmag.dev/software-testing-engineer-explains-3063/</link>
		
		<dc:creator><![CDATA[Antonija Bilic Arar]]></dc:creator>
		<pubDate>Wed, 27 Mar 2024 15:47:40 +0000</pubDate>
				<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Engineer Explains]]></category>
		<category><![CDATA[Filip Hric]]></category>
		<category><![CDATA[quality assurance]]></category>
		<category><![CDATA[software testing]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=3063</guid>

					<description><![CDATA[<p>We've asked experienced engineers to share how they would explain some tech terminology at three levels of experience - from junior developer to CTO.</p>
<p>The post <a href="https://shiftmag.dev/software-testing-engineer-explains-3063/">Engineer Explains: Software testing explained in 3 minutes at 3 levels of expertise</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-post-featured-image"><img loading="lazy" decoding="async" width="1280" height="720" src="https://shiftmag.dev/wp-content/uploads/2024/05/Filip.png?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2024/05/Filip.png 1280w, https://shiftmag.dev/wp-content/uploads/2024/05/Filip-300x169.png 300w, https://shiftmag.dev/wp-content/uploads/2024/05/Filip-1024x576.png 1024w, https://shiftmag.dev/wp-content/uploads/2024/05/Filip-768x432.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></figure>


<p class="wp-block-paragraph">Maybe you&#8217;ve heard that you should automate everything in software testing. Well, it&#8217;s not true! <br><br>At least, according to <strong>Filip Hric</strong>, who teaches developers about testing and testers about web developers. In this video, he explains why checking the quality, functionality, and performance of a software product or a feature is crucial and how to approach it.<br><br>Filip shares how he would <strong>explain testing to a non-engineering colleague</strong>, to a product owner or manager, and to a <strong>person deciding on a strategy.</strong>  He also shares some tips on what to automate, what to do manually, and how to <strong>balance risks and quality in software development.</strong></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="QA Testing Explained In 3 Minutes – From Zero To Hero" width="500" height="281" src="https://www.youtube.com/embed/5aRuyTIoMys?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph">This video is a part of ShiftMag’s new <strong>video series, <a href="https://www.youtube.com/@ShiftMag/videos" target="_blank" rel="noreferrer noopener">Engineer Explains</a>.</strong></p>



<p class="wp-block-paragraph">We’ve asked experienced engineers to share how they would explain some basic and some less basic tech terminology to different job tech job titles or at three levels of experience – <strong>from junior developer to CTO.</strong><br><br><em>This Engineer Explains video was created in partnership with <strong>WeAreDevelopers World Congress</strong>. Find the tickets here for the next one taking place in <a href="https://www.wearedevelopers.com/world-congress" target="_blank" rel="noreferrer noopener">Berlin, 17th-19th July</a>.</em><br><br><strong>More:</strong><br>How would you explain <a href="https://www.youtube.com/watch?v=qtxHm09FH_M" target="_blank" rel="noreferrer noopener">APIs</a>, <a href="https://www.youtube.com/watch?v=Rxi3fHEY48c" target="_blank" rel="noreferrer noopener">internal developer platforms</a>, or <a href="https://www.youtube.com/watch?v=BqsTQWhyngg&amp;t=9s" target="_blank" rel="noreferrer noopener">software architecture</a> at three levels of experience?</p>



<p class="wp-block-paragraph"><br></p>
<p>The post <a href="https://shiftmag.dev/software-testing-engineer-explains-3063/">Engineer Explains: Software testing explained in 3 minutes at 3 levels of expertise</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Staging environments are costly. Bugs in production are costlier.</title>
		<link>https://shiftmag.dev/staging-environments-2367/</link>
		
		<dc:creator><![CDATA[Dino Poljak]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 16:10:20 +0000</pubDate>
				<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[quality assurance]]></category>
		<category><![CDATA[staging environment]]></category>
		<category><![CDATA[testing in production]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=2367</guid>

					<description><![CDATA[<p>If you think that staging environments don't bring value for their cost, you might have just worked with bad staging environments.</p>
<p>The post <a href="https://shiftmag.dev/staging-environments-2367/">Staging environments are costly. Bugs in production are costlier.</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-post-featured-image"><img loading="lazy" decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2023/12/Staging-environment.png?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2023/12/Staging-environment.png 1200w, https://shiftmag.dev/wp-content/uploads/2023/12/Staging-environment-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2023/12/Staging-environment-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2023/12/Staging-environment-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">The idea of avoiding <a href="https://shiftmag.dev/paige-cruz-testing-in-production-143/" target="_blank" rel="noreferrer noopener">testing in production</a> is being challenged lately, and one of the key arguments for it is that <strong>staging environments might not be worth it</strong>. We pay a lot to set up and maintain an as-close-to-production-as-possible environment, but it might not bring enough value for the cost.&nbsp;</p>



<p class="wp-block-paragraph">Using automated local tests to detect issues, delivering features cautiously through feature flags and a/b testing, and even simply having a few bugs slip through to production are mentioned as good enough alternatives not to have to invest in a staging environment.</p>



<p class="wp-block-paragraph">However, thinking that a staging environment is unnecessary might stem from working on smaller-scale systems that can tolerate outages and issues or from <strong>working with a bad staging environment</strong>.</p>



<h2 class="wp-block-heading" id="working-without-staging-environments">Working without staging environments&nbsp;</h2>



<p class="wp-block-paragraph">Localized testing can only get us far when working on a complex system. We need to know that all the pieces fall into place to ensure that things keep working as expected. We don&#8217;t truly validate our code without booting up the many other (micro)services and doing proper end-to-end system testing.</p>



<p class="wp-block-paragraph">Feature flags are a great solution, but they introduce some complexity, especially if they pile up and get left in the code for too long. Plus, they might get misconfigured if our feature touches on many parts of the system.</p>



<p class="wp-block-paragraph">If we interact with plenty of third-party services, setting it all up from a local testing setup is difficult. Then, you have to consider the <strong>security concerns</strong> some clients might have. Ensuring secure access from one point is much easier than a whole network.</p>



<h2 class="wp-block-heading" id="bad-staging-environments">Bad staging environments&nbsp;</h2>



<p class="wp-block-paragraph">A poorly designed staging environment doesn&#8217;t test our product in its real ecosystem, where it interacts with both our own services and any third-party systems it relies on. If the staging environment is designed that way, we might as well rely only on local testing.</p>



<p class="wp-block-paragraph">It&#8217;s not much better when a staging environment only has simple emulations of other systems. If we simplify the results we expect to receive whenever we call another service, we lose a valuable chance to test compatibility and real-world interactions before we hit production.</p>



<p class="wp-block-paragraph">Suppose we don&#8217;t automate testing of key business processes and only rely on developers to check the areas they impacted manually. In that case, we <strong>risk introducing breaking changes into our critical and high-traffic systems.</strong></p>



<p class="wp-block-paragraph">A bad staging environment only has bits of testing data present in it. If we don&#8217;t work with real production amounts of data, we can end up not realizing how our changes impact usability. If we only test loading a few entries, we can <strong>miss issues introduced when millions of entries need to be loaded.</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="538" src="https://shiftmag.dev/wp-content/uploads/2023/12/Staging-1024x538.png?x32039" alt="" class="wp-image-2372" srcset="https://shiftmag.dev/wp-content/uploads/2023/12/Staging-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2023/12/Staging-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2023/12/Staging-768x403.png 768w, https://shiftmag.dev/wp-content/uploads/2023/12/Staging.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading" id="potential-staging-environment-problems">Potential staging environment problems</h2>



<p class="wp-block-paragraph">Developers should not become more lenient and trust that their testing environment (and their testers, of course) would catch all errors. It would be truly impressive if we could create a staging environment so good that developers would trust it to that extent. <strong>A good staging environment shouldn&#8217;t mean developers can be less vigilant.&nbsp;</strong></p>



<p class="wp-block-paragraph">Another issue could be developers queuing up for their turn to test things. Good use of separate instances and load balancers can ensure people don&#8217;t queue for too long and that other people can continue to use stable releases while someone tests their new changes.</p>



<p class="wp-block-paragraph">Even with all this, <strong>a bug will make it to production one day.</strong> But, striving for perfection is not a good enough excuse to reject staging environments. We can&#8217;t create a perfect staging environment, but we should still aim for one as good as possible. </p>



<h2 class="wp-block-heading" id="staging-environments-benefits">Staging environments benefits</h2>



<p class="wp-block-paragraph">A good and appropriately used staging environment can <strong>save much more time and money than it takes to create and maintain.</strong></p>



<p class="wp-block-paragraph">The value of a good staging environment comes from:</p>



<ul class="wp-block-list">
<li>Being able to test any use case at any time without touching production</li>



<li>Demonstrating functionality at any time, which can also serve product managers, designers, and clients alike.</li>



<li>Having a playground that everyone can learn with. Developers can take in information much better if they can see existing code in reality.</li>
</ul>



<p class="wp-block-paragraph">What works for some doesn&#8217;t work for all, and products have different requirements and levels of responsibility.&nbsp;</p>



<p class="wp-block-paragraph">Sometimes, it&#8217;s better to keep it simple. Other times, keeping it simple could result in costly outages. And a good staging environment can prevent them.</p>
<p>The post <a href="https://shiftmag.dev/staging-environments-2367/">Staging environments are costly. Bugs in production are costlier.</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 

Served from: shiftmag.dev @ 2026-11-07 02:27:33 by W3 Total Cache
-->