A career portfolio, written by

Matthew D. Thornell

Software QA Engineer & Quality Advocate
    1

    Chapter One

    The Professional

    My professional experience, credentials, and the work I’m proudest of.

    1.1

    Chapter 1 · Page 1

    Professional Experience

    Seven-plus years building QA from the ground up: frameworks, pipelines, and the teams that use them.

    Years in QA
    7+
    Test coverage, from zero
    80%
    People mentored
    15+
    Letters of recommendation
    10
    ISTQB: Certified Tester Foundation Level
    Scrum Alliance: Professional Scrum Master
    1. Sep 2026 – Present · Eden Prairie, MN (Remote)

      Quality Engineer / SDET

      Optum / UnitedHealth Group

      Modernizing the Disability Benefits Questionnaire (DBQ) platform, and building the agentic test framework behind it: self-healing, context-aware, and test-generating agents that produce genuinely thorough coverage and the quality metrics to prove it. Those metrics sync into custom dashboards, so the business can see where a release is under strain, drill into the root cause, and extract the data into systems of their own. Architect-designed, spearheaded by my team.

    2. Nov 2025 – Jul 2026 · Columbia, MO (Remote)

      Software QA Engineer, QA Coach/Architect

      Veterans United Home Loans

      Built Playwright automation from scratch, taking coverage from 0% to 80%. Architected in-house dashboards, alerts, and quality gates; ran department-wide QA training and demos.

    3. Jul 2025 – Oct 2025 · Draper, UT (Hybrid)

      Software Quality Engineer, Quality Advocate

      Seekwell / 1-800-Contacts

      Stabilized flaky Cypress/Playwright suites, automated complex A/B experiment releases, and built observability metrics into customer-facing releases.

    4. Feb 2022 – Nov 2024 · Omaha, NE (Remote)

      Sr. Software QA Engineer, Scrum Master

      Werner Enterprises

      Designed enterprise QA reporting in Power BI, implemented BDD/TDD suites (Playwright, Selenium C#), and built compliance checklists spanning PII, SOX, ADA, and HIPAA/FERPA.

    5. Dec 2020 – Feb 2022 · Salt Lake City, UT (Hybrid)

      Lead Software QA Engineer

      ConexED

      Built QA process from scratch and migrated 400+ manual test cases into Cypress automation, cutting regression testing time by 60%.

    6. Jul 2019 – Sep 2020 · Pleasant Grove, UT (Hybrid)

      Test Automation Engineer → QA Team Lead

      Legrand

      Promoted to lead a four-person QA team; converted legacy Python automation to Robot Framework and stood up a reliable 24-hour test cycle.

    7. Apr 2019 – Jul 2019 · Lehi, UT

      Jr. Software QA Engineer, Apprenticeship

      DevMountain

      Software Quality Assurance Engineering, 3.8 GPA, with manual testing, automation fundamentals, and first exposure to API testing.

    Automation Frameworks

    Languages

    CI/CD & API

    Project & Reporting

    1.2

    Chapter 1 · Page 2

    Accomplishments

    A few entries from the work itself.

    The Optum wordmark

    An AI framework the business can read

    Optum

    Playwright · TypeScript Test Case 3101 - OPT - Accomplishment Entry Renders 4 steps
    test('Test Case 3101 - OPT - Accomplishment Entry Renders', { tag: '@smoke' }, async ({ page }) => {
      const home = new HomePage(page);
      const card = home.accomplishmentCard('optum-ai-framework');
    
      await test.step('Then the entry is headed "An AI framework the business can read"', async () => {
        await expect(card.locator('h3')).toHaveText('An AI framework the business can read');
      });
    
      await test.step('Then it names Optum, linking out to their site in a new tab', async () => {
        await expect(card.locator('.card-meta a')).toHaveAttribute('href', 'https://www.optum.com/');
        await expect(card.locator('.card-meta a')).toHaveAttribute('target', '_blank');
        await expect(card.locator('.card-meta a')).toHaveAttribute('rel', /noopener/);
      });
    
      await test.step('Then the photograph has loaded and is described for a screen reader', async () => {
        expect(await card.locator('.card-photo').evaluate((img: HTMLImageElement) => img.naturalWidth)).toBeGreaterThan(0);
        await expect(card.locator('.card-photo')).toHaveAttribute('alt', 'The Optum wordmark');
      });
    
      await test.step('Then the entry decrypts and reads in full', async () => {
        await expect(card.locator('.card-body p')).toContainText('Establishing a well-considered AI testing framework, built');
        await expect(card, 'an entry that read in full is a pass').toHaveAttribute('data-status', 'pass');
      });
    });

    Establishing a well-considered AI testing framework, built so that both my team and upper management get what they need to succeed: tests that hold up under real conditions, and quality signals that actually reach the people making the decisions.

    The Veterans United Home Loans sign outside the Columbia, Missouri office

    Zero to 80% coverage

    Veterans United Home Loans

    Playwright · TypeScript Test Case 3102 - VU - Accomplishment Entry Renders 4 steps
    test('Test Case 3102 - VU - Accomplishment Entry Renders', { tag: '@smoke' }, async ({ page }) => {
      const home = new HomePage(page);
      const card = home.accomplishmentCard('veterans-united-coverage');
    
      await test.step('Then the entry is headed "Zero to 80% coverage"', async () => {
        await expect(card.locator('h3')).toHaveText('Zero to 80% coverage');
      });
    
      await test.step('Then it names Veterans United Home Loans, linking out to their site in a new tab', async () => {
        await expect(card.locator('.card-meta a')).toHaveAttribute('href', 'https://www.veteransunited.com/');
        await expect(card.locator('.card-meta a')).toHaveAttribute('target', '_blank');
        await expect(card.locator('.card-meta a')).toHaveAttribute('rel', /noopener/);
      });
    
      await test.step('Then the photograph has loaded and is described for a screen reader', async () => {
        expect(await card.locator('.card-photo').evaluate((img: HTMLImageElement) => img.naturalWidth)).toBeGreaterThan(0);
        await expect(card.locator('.card-photo')).toHaveAttribute('alt', 'The Veterans United Home Loans sign outside the Columbia, Missouri office');
      });
    
      await test.step('Then the entry decrypts and reads in full', async () => {
        await expect(card.locator('.card-body p')).toContainText('Built a Playwright automation framework from scratch');
        await expect(card, 'an entry that read in full is a pass').toHaveAttribute('data-status', 'pass');
      });
    });

    Built a Playwright automation framework from scratch, taking quality code coverage from 0% to 80% while standing up in-house dashboards, alerts, and guards that kept the whole team honest.

    Matthew at the Werner Enterprises visitor center

    Quality by the numbers

    Werner Enterprises

    Playwright · C# Test Case 3103 - WE - Accomplishment Entry Renders 4 steps
    [TestFixture]
    public class HomeTests : PageTest
    {
        [Test, Category("smoke"), Description("Test Case 3103 - WE - Accomplishment Entry Renders")]
        public async Task TestCase3103_WE_AccomplishmentEntryRenders()
        {
            var home = new HomePage(Page);
            var card = home.AccomplishmentCard("werner-reporting");
    
            // Then the entry is headed "Quality by the numbers"
            await Expect(card.Locator("h3")).ToHaveTextAsync("Quality by the numbers");
    
            // Then it names Werner Enterprises, linking out to their site in a new tab
            await Expect(card.Locator(".card-meta a")).ToHaveAttributeAsync("href", "https://www.werner.com/");
            await Expect(card.Locator(".card-meta a")).ToHaveAttributeAsync("target", "_blank");
            await Expect(card.Locator(".card-meta a")).ToHaveAttributeAsync("rel", new Regex(@"noopener"));
    
            // Then the photograph has loaded and is described for a screen reader
            Assert.That(await card.Locator(".card-photo").EvaluateAsync<int>("img => img.naturalWidth"), Is.GreaterThan(0));
            await Expect(card.Locator(".card-photo")).ToHaveAttributeAsync("alt", "Matthew at the Werner Enterprises visitor center");
    
            // Then the entry decrypts and reads in full
            await Expect(card.Locator(".card-body p")).ToContainTextAsync("Designed enterprise-level QA reporting in Power BI");
            await Expect(card).ToHaveAttributeAsync("data-status", "pass"); // an entry that read in full is a pass
        }
    }

    Designed enterprise-level QA reporting in Power BI, including visual test breakdowns, pass/fail trends, and risk assessments, alongside compliance checklists covering PII, SOX, ADA, and HIPAA/FERPA.

    The ConexED QA and engineering team

    400+ tests, 60% faster

    ConexED

    Cypress · JavaScript Test Case 3104 - CX - Accomplishment Entry Renders 4 steps
    describe('Home', { tags: ['@smoke'] }, () => {
      it('Test Case 3104 - CX - Accomplishment Entry Renders', () => {
        cy.visit('/');
        cy.get('[data-testid="accomplishment-card-conexed-migration"]').as('card');
    
        cy.log('Then the entry is headed "400+ tests, 60% faster"');
        cy.get('@card').find('h3').should('have.text', '400+ tests, 60% faster');
    
        cy.log('Then it names ConexED, linking out to their site in a new tab');
        cy.get('@card').find('.card-meta a').should('have.attr', 'href', 'https://www.conexed.com/');
        cy.get('@card').find('.card-meta a').should('have.attr', 'target', '_blank');
        cy.get('@card').find('.card-meta a').should('have.attr', 'rel').and('match', /noopener/);
    
        cy.log('Then the photograph has loaded and is described for a screen reader');
        cy.get('@card').find('.card-photo').should(($img) => expect($img[0].naturalWidth).to.be.greaterThan(0));
        cy.get('@card').find('.card-photo').should('have.attr', 'alt', 'The ConexED QA and engineering team');
    
        cy.log('Then the entry decrypts and reads in full');
        cy.get('@card').find('.card-body p').should('contain.text', 'Migrated 400+ manual test cases into Cypress');
        cy.get('@card').should('have.attr', 'data-status', 'pass'); // an entry that read in full is a pass
      });
    });

    Migrated 400+ manual test cases into Cypress automation from the ground up, cutting regression testing time by 60% and building the QA process the team still runs on.

    The Seekwell / 1-800-Contacts team on a river tubing outing

    Stabilizing under pressure

    Seekwell / 1-800-Contacts

    Playwright · Python Test Case 3105 - SW - Accomplishment Entry Renders 4 steps
    import re
    import pytest
    from playwright.sync_api import Page, expect
    
    from pages.home_page import HomePage
    
    
    @pytest.mark.smoke
    def test_case_3105_sw_accomplishment_entry_renders(page: Page):
        """Test Case 3105 - SW - Accomplishment Entry Renders"""
        home = HomePage(page)
        card = home.accomplishment_card("seekwell-stabilizing")
    
        # Then the entry is headed "Stabilizing under pressure"
        expect(card.locator("h3")).to_have_text("Stabilizing under pressure")
    
        # Then it names Seekwell, linking out to their site in a new tab
        expect(card.locator(".card-meta a")).to_have_attribute("href", "https://www.seekwell.com/")
        expect(card.locator(".card-meta a")).to_have_attribute("target", "_blank")
        expect(card.locator(".card-meta a")).to_have_attribute("rel", re.compile(r"noopener"))
    
        # Then the photograph has loaded and is described for a screen reader
        assert card.locator(".card-photo").evaluate("img => img.naturalWidth") > 0
        expect(card.locator(".card-photo")).to_have_attribute("alt", "The Seekwell / 1-800-Contacts team on a river tubing outing")
    
        # Then the entry decrypts and reads in full
        expect(card.locator(".card-body p")).to_contain_text("Stabilized flaky automation inside live pipelines, automated")
        expect(card).to_have_attribute("data-status", "pass")  # an entry that read in full is a pass

    Stabilized flaky automation inside live pipelines, automated complex A/B experiment releases, and built observability metrics that surfaced real customer behavior.

    Matthew speaking at a CAST conference session

    Asking the Right Questions

    CAST 2025 · Association for Software Testing

    Robot Framework Test Case 3106 - AST - Accomplishment Entry Renders 4 steps
    *** Settings ***
    Library         Browser
    Resource        ../resources/home_page.resource
    Test Tags       smoke
    
    *** Test Cases ***
    Test Case 3106 - AST - Accomplishment Entry Renders
        [Documentation]    The "Asking the Right Questions" entry renders with its company link and reads in full.
        Given The Home Page Is Open
        ${card}=    Set Variable    [data-testid="accomplishment-card-cast-speaking"]
    
        # Then the entry is headed "Asking the Right Questions"
        Get Text    ${card} h3    ==    Asking the Right Questions
    
        # Then it names Association for Software Testing, linking out to their site in a new tab
        Get Attribute    ${card} .card-meta a    href    ==    https://www.associationforsoftwaretesting.org/
        Get Attribute    ${card} .card-meta a    target    ==    _blank
        Get Attribute    ${card} .card-meta a    rel    matches    noopener
    
        # Then the photograph has loaded and is described for a screen reader
        ${width}=    Evaluate JavaScript    ${card} .card-photo    (img) => img.naturalWidth
        Should Be True    ${width} > 0
        Get Attribute    ${card} .card-photo    alt    ==    Matthew speaking at a CAST conference session
    
        # Then the entry decrypts and reads in full
        Get Text    ${card} .card-body p    contains    Spoke at CAST 2025 on asking
        Get Attribute    ${card}    data-status    ==    pass    # an entry that read in full is a pass

    Spoke at CAST 2025 on asking the right questions to your team during story planning: the moment where the highest-leverage quality questions can still shape a feature before a line of code gets written.

    2

    Chapter Two

    The Person

    Who am I? My roots, where I chase quality outside of work, and why it matters so much to me.

    2.1
    MDT Quality Adventures

    Chapter 2 · Page 1

    About Me

    Matthew wearing one of his handmade hats

    Quality.

    Quality isn’t something we test in. It’s something we build in.

    To me, quality isn’t a checklist. It’s a mindset: the standards I hold myself to, the way I treat people, and the choices I make when no one’s checking my work. That mindset followed me into software testing, and eventually became a career. I don’t see QA as just finding bugs. It’s understanding how something is supposed to work, questioning what could go wrong, and helping the people building it make it better.

    Roots

    That perspective was shaped long before I got into technology. I was born and raised in Utah, carrying both Filipino and British heritage. My mother immigrated to the U.S. from the Philippines with little more than grit and gratitude. My father, a psychologist who later reinvented himself as a software developer, passed away in 2014 from multiple myeloma. Watching the people around me adapt to hard circumstances taught me something I still carry: life doesn’t always give you control over what happens, but you always have control over what you do next. That’s shaped who I am, and how I approach the work.

    Utah, and the Questions I Keep Asking

    I’ve always been curious about how things work. Whether I’m building something, fixing something, or taking something apart, I tend to ask the same question: “Why does it work this way?”

    That mindset has followed me into QA. I don’t just want to know that something works. I want to understand why it works, how it behaves when things don’t go as planned, and what we can do to make it better. I think that curiosity is one of the most important parts of quality.

    The People Who Shaped Me

    My grandmother was one of the people I admired most: sharp intelligence paired with hard-earned wisdom, the kind that comes from living through hard chapters without letting them define you.

    Matthew's grandmother

    Learn, Earn, Return

    “There are three parts to your life. One part you learn, the other part you earn, the next part you return.”

    / Denzel Washington

    I try to live in all three at once, not take them in turns. I’m still learning constantly: new tools, new AI-assisted workflows, new ways to think about quality. I earn through the work itself. And I return it by mentoring the next wave of QA engineers, many of whom I met back when I was still figuring this out myself. Doing all three at the same time, instead of waiting your turn for each one, is what actually opens doors of opportunity.

    Habits I Try to Live By

    Stephen Covey’s The 7 Habits of Highly Effective People is a framework I keep coming back to, not because I’ve mastered it, but because it’s a good measuring stick:

    The 7 Habits of Highly Effective People by Stephen R. Covey
    1. Be Proactive
    2. Begin with the End in Mind
    3. Put First Things First
    4. Think Win-Win
    5. Seek First to Understand, Then to Be Understood
    6. Synergize
    7. Sharpen the Saw

    A few of these show up directly in how I work: seeking to understand before being understood is half of what makes someone good at QA, thinking win-win is what makes cross-team collaboration actually hold up, and sharpening the saw is why I’m still learning new tools years into this career instead of coasting on what I already know.

    Other Great Reads

    A few more books that have shaped how I think, about myself and about people.

    No Bad Parts by Richard C. Schwartz, PhD

    No Bad Parts

    Richard C. Schwartz, PhD

    An introduction to Internal Family Systems: the idea that the mind is made up of many “parts,” and that even the most disruptive ones are trying to protect you, not sabotage you.

    Atomic Habits by James Clear

    Atomic Habits

    James Clear

    A practical framework for building better habits through small, compounding changes instead of sweeping overhauls.

    The Mountain Is You by Brianna Wiest

    The Mountain Is You

    Brianna Wiest

    A look at self-sabotage: why we get in our own way, and how to turn that resistance into self-mastery.

    Don't Believe Everything You Think by Joseph Nguyen

    Don’t Believe Everything You Think

    Joseph Nguyen

    A short, direct case that most of our suffering comes not from our circumstances, but from the constant narration of our own thoughts.

    Team Building

    I love the teams I get to build with, and I try to prove it outside the standup too: I’m always looking for the next reason to get a team out of the office and into something a little more adventurous together.

    Matthew and the local Legrand QA engineers suited up together before a skydive

    Skydiving with the QA Team

    Legrand

    A Legrand photo of the local QA engineers who went skydiving together with me. Quality is built on trust, and there’s no faster way to build it with a team than jumping out of a plane together.

    The ConexED team at a summit at the Grand America hotel

    ConexED Summit at Grand America

    ConexED · Grand America

    A ConexED team summit at the Grand America hotel: we ate together, ran through team-building exercises, and networked with high-end educators from around Utah to explore new ways to improve education for students across the board.

    The Seekwell team floating down the Provo River

    Floating the Provo River with Seekwell

    Seekwell

    A Seekwell team outing floating down the Provo River, taking in Utah’s natural landscape while working to stay together as one unit the whole way down: a simple team-building exercise that says a lot about how well a team communicates.

    Manners Maketh Man

    Kingsman: The Secret Service is, hands down, my favorite movie. Not for the gadgets or the tailoring, but for the story underneath it: a kid nobody expected much from, given a real shot by someone who saw more in him than he saw in himself, and held to a standard higher than the one he grew up with. That’s a story that has always felt close to home.

    The line Harry Hart lives by, “Manners maketh man,” is the one I’ve carried the longest in my own fight for quality. It’s not really about etiquette. It’s the reminder that every quality action is also a choice: I can find the bug, ship the fix, raise the standard, and still choose to be kind and mannerful to the people on the other side of that work. Quality isn’t only in what we build. It’s in how we treat the people we build it with.

    That’s the standard I hold myself to: not just capital-Q Quality in the work, but manners maketh man in how I get there.

    2.2

    Chapter 2 · Page 2

    Quality Adventures

    Quality doesn’t clock out. These are the businesses and rooms I keep coming back to — chosen for how they treat the people in front of them, and held to the same standard I hold at work.

    The Gentleman's Game neon sign

    Hosting Gentleman’s Game

    Volunteer Host · Monthly Board Game Night

    I volunteer to host monthly board game nights with QA engineers and friends: a space built for collaboration and unfiltered, authentic conversation, where anyone can show up and talk shop about anything QA.

    A Gentleman's Game board game night Poker chips, dealer button, and card guards won at a Gentleman's Game night
    The Quality Knights crest: a black knight and a white knight facing each other across a divided shield
    Ryan Ertl, software engineer and Quality Knights rival

    Quality Knights

    Optum · Lunch-hour chess club

    An Optum-run chess tournament played over the lunch hour. We play, and in playing we meet the people we work with somewhere other than a stand-up, which is where trust actually gets built. The rest of it is the plain fun of trying to outsmart the person across the board.

    Ryan Ertl, one of the software engineers who joined the club, quickly became my rival in the best sense of the word. We were evenly matched, which made every game competitive, unpredictable, and a lot of fun. More than that, playing together gave us an easy way to get to know each other. Our games were full of good-natured trash talk, laughs, and plenty of opportunities to pick his brain about the team, the work, and everything in between.

    Having someone like Ryan to play with made onboarding feel a lot less like being the new guy and a lot more like finding my place.

    Patrick's

    Test Pilot

    Patrick’s · Product Reviewer & QA Volunteer

    As a hands-on consumer-product test pilot, I evaluate hair, skin, and health products in real-world conditions, documenting performance, usability, consistency, and customer experience before they release to the public. I’ve also brought my software QA experience into helping product testing and took it upon myself to write automation using Cypress, Playwright, and modern GenAI-assisted workflows.

    Patrick's Test Pilot products: S2 conditioner, M1 shampoo, and FS1 face scrub Patrick's SH+ shampoo, CD+ conditioner, and RD1 recovery and defence treatment Two Patrick's product bottles on a bathroom counter Patrick's WE1 Deodorant, WE2 Moisturizer, and WE3 Eye Serum
    City Barbers

    City Barbers

    citybarbers.co · Downtown Salt Lake City

    A shop that treats the work as a craft and the person in the chair as a guest. Five years of walking through that door and the standard has never slipped — the room, the welcome, the finish. That is what quality looks like when it is a habit rather than a checklist.

    And the man behind the chair: The Ace of Quality

    City Barbers
    Ace outside the City Barbers storefront

    The Ace of Quality

    citybarbers.co · Master Senior Instructor · Ace

    I’ve been Ace’s client at City Barbers for over five years, and he’s become much more than my barber, he’s a friend and someone I genuinely respect.

    Ace is always learning, refining his craft, and finding ways to deliver a better experience and higher-quality results. From classic cuts and straight-razor shaves to detailed sculpting and full hair architecture, he brings patience, precision, and pride to every appointment.

    What keeps me coming back isn’t just the consistency of his excellent work. It’s his character, conversation, attention to detail, and genuine care for people. I recently asked him to officiate my wedding, which says quite a bit about the person behind the chair.

    If you’re looking for a barber who treats his work as a lifelong craft, I highly recommend experiencing Ace’s services for yourself.

    A quality cut from a quality individual.

    Follow Ace: · In Downtown SLC? Book with Ace

    Ace standing outside the City Barbers storefront in Downtown Salt Lake City Ace working on a client in the chair at City Barbers A vintage barber chair inside City Barbers

    Game Tester

    League of Legends, World of Warcraft, Halo & more

    In gaming, I’ve participated in pre-alpha, early-access, and private-server testing across titles such as League of Legends, World of Warcraft, Halo, and Stormforge’s version of Mists of Pandaria. I investigated mechanics, boundaries, exploits, map behavior, progression systems, and unexpected interactions, often treating even a familiar replay as a fresh exploratory test cycle.

    3

    Chapter Three

    The People

    The people whose quality shaped mine, the ones I’ve tried to pass it on to, and what they have to say.

    3.1

    Chapter 3 · Page 1

    Mentors

    The people whose quality I admired, and tried to carry forward.

    Alex Zhukovsky

    Alex Zhukovsky

    My first QA mentor · AI Test Automation Architect

    After I lost my dad, Alex stepped in as a close friend of his and introduced me to QA. He asked me a question I’ve never forgotten: “Now that your life is in your own hands, will you work to make it a quality one?” I’ve spent years since figuring out what that actually meant to me. I kept some of what I was taught, set the rest aside, and built a philosophy that’s genuinely mine. That’s the real answer to his question, and it’s why this site exists.

    Carlos Kidman

    Carlos Kidman

    Quality community leader · Seekwell / 1-800-Contacts

    Carlos was an influential mentor early in my career: always hosting in-person meetups, giving back to the quality community, and one of the most phenomenal speakers our field has. We worked together daily at Seekwell/1-800-Contacts, collaborating on things I’m still proud of.

    AJ Larson

    AJ Larson

    My first QA teacher · Quality Director & Instructor, DevMountain

    AJ was my very first official QA teacher, the Quality Director and Instructor at DevMountain. At 20, I felt lost in a lot of ways and didn’t know what I didn’t know, let alone how to ask for help. AJ saw that in me with real sensitivity, and helped build a safe place to try the unknown.

    Tim Velasquez

    Tim Velasquez

    Set my quality foundations, analytical and technical

    Genuinely one of my favorite people to work with and learn from, hands down. Tim helped set my quality foundations, not just analytically but technically too. We’re similar people, and working with him felt like having an older version of myself showing me the way.

    3.2

    Chapter 3 · Page 2

    The Quality Ripple

    Quality is a mindset worth passing on.

    15+ people I’ve mentored into Software QA and Development careers

    Some of my favorite work has nothing to do with a sprint. It’s helping someone find their footing, teaching what I’ve learned, challenging someone to think differently, or being there when they’re trying to figure out where they belong. The quality others invested in me became something I wanted to give back. These are a few of the people I’ve had the privilege of walking alongside:

    Where Are They Now?

    Vivian Nguyen
    Vivian Nguyen Software QA Engineer, Werner Enterprises
    Tristan Lundgreen
    Tristan Lundgreen SDET, Sunwest Bank
    Stockton Nielson
    Stockton Nielson Sr. SDET, Verisk
    Cameron Smith
    Cameron Smith Software Quality Assurance Engineer, Tyler Technologies
    Quaid
    Quaid QA Intern with 99+ years of experience.
    Tyler High
    Tyler High Business Owner, High Bjorn Detail
    Alex Fergestad
    Alex Fergestad Software QA Analyst, Old Republic Professional
    Aaron Forkel
    Aaron Forkel Software Support Engineer, MasterControl
    Callum Payne
    Callum Payne QA Engineer, Glass Atlas
    CJ Johnson
    CJ Johnson Associate Software Engineer, OEC

    … and a dozen more across the years.

    Their Own Quality Adventures

    1 / 2
    High Björn car detailing
    Tyler High in a wide-brimmed hat, sitting in a pine forest

    Ty High The Detail Guy

    highbjorn.com · Owner, High Björn Detailing · Tyler High

    Tyler and I have known each other since we were kids. We grew up in the same neighborhood, played football together, and shared countless hours of practice, competition, and two championships. After years apart, we reconnected in the summer of 2025, and I got to watch an old friend begin building something entirely his own.

    Today, he’s Ty High, the Detail Guy, and an incredible car detailer. He’s constantly learning, refining his techniques, investing in his craft, and finding ways to give his customers a finish he can genuinely be proud of. High Björn Detailing is more than a business to him. It’s a standard he’s continuing to build.

    What makes me proud, though, isn’t just the quality of his work. It’s the quality of the man doing it. Tyler has worked incredibly hard to change his life, break old cycles, take responsibility for what he can control, and build a future on his own terms.

    There’s something fitting about that. He spends his days taking something dirty, weathered, and neglected and making it clean, protected, organized, and purposeful.

    That’s Quality in action.

    I’m proud to call him my friend, proud to support what he’s building, and I’ll be rooting for him every step of the way.

    Follow High Björn: · In the SLC Valley? Detail your Car

    Tyler High standing in front of the olive-green High Björn work van Front and side profile of the olive-green Subaru Sambar that Tyler details out of Tyler High and Matthew Thornell together at a night event
    CJ Johnson

    Humbling and Enlightening

    OEC · Associate Software Engineer · CJ Johnson

    CJ reported to me on a project, which is a polite way of saying she got the unglamorous half of QA: the test cases nobody volunteers for and the bug reports that have to be right the first time. She asked the kind of questions that tell you someone is going to keep going.

    She did. CJ is now an Associate Software Engineer at OEC, the jump from testing software to building it, made by someone who learned to care about the difference.

    “His ability to remain calm and professional while maintaining an air of excitement has resonated with me during my own QA experience.”

    Her full note is further down this page, under In Their Own Words.

    Connect with CJ:

    Manual Tester Automation Engineer
    Factory Worker Software Support Engineer
    Metallurgy Mining Specialist SDET
    Warehouse Sorter Quality Assurance Analyst
    Car Detailer Business Owner
    Mannequin QA Man who Can!

    In Their Own Words

    Vivian Nguyen

    Vivian Nguyen

    Software QA Engineer at Werner Enterprises

    Playwright · TypeScript Test Case 4101 - VN - Letter of Recommendation Renders 3 steps
    test('Test Case 4101 - VN - Letter of Recommendation Renders', { tag: '@smoke' }, async ({ page }) => {
      const home = new HomePage(page);
      const card = home.recCard('vivian-nguyen');
    
      await test.step("Then Vivian Nguyen's name loads and displays, linked to their LinkedIn profile", async () => {
        await expect(card.getByRole('heading', { name: 'Vivian Nguyen' })).toBeVisible();
        await expect(home.recLinkedIn('vivian-nguyen')).toHaveAttribute('href', /linkedin\.com\/in\//);
      });
    
      await test.step('Then their title and where they are now are shown', async () => {
        await expect(card.locator('.rec-title')).toHaveText('Software QA Engineer at Werner Enterprises');
        await expect(home.recCompany('vivian-nguyen')).toHaveAttribute('title', 'Now at Werner Enterprises');
      });
    
      await test.step('Then the recommendation decrypts and reads in full', async () => {
        await expect(card.locator('blockquote p')).toContainText('Starting my internship at Werner Enterprises, Matthew');
        await expect(card, 'an entry that read in full is a pass').toHaveAttribute('data-status', 'pass');
      });
    });

    “Starting my internship at Werner Enterprises, Matthew played a key role in mentoring my growth in QA. He had a knack for explaining complex ideas clearly and was an excellent communicator. Within our team and the IT organization, he stood out as a positive force, creating an atmosphere of support. Matthew taught me the importance of encouraging others and celebrating small wins to be a good leader. As a QA, building positive relationships with developers is crucial, and Matthew showed me how! Additionally, Matthew continuously explored methods to enhance our workflow. His dedication extended to refining and standardizing processes, showcasing his commitment to efficiency and excellence. I am proud to say I got the opportunity to learn from him, and I am confident that he will thrive wherever he ends up!”

    Alex Fergestad

    Alex Fergestad

    QA Analyst @ Old Republic Professional

    Playwright · Python Test Case 4102 - AF - Letter of Recommendation Renders 3 steps
    import re
    import pytest
    from playwright.sync_api import Page, expect
    
    from pages.home_page import HomePage
    
    
    @pytest.mark.smoke
    def test_case_4102_af_letter_of_recommendation_renders(page: Page):
        """Test Case 4102 - AF - Letter of Recommendation Renders"""
        home = HomePage(page)
        card = home.rec_card("alex-fergestad")
    
        # Then Alex Fergestad's name loads and displays, linked to their LinkedIn profile
        expect(card.get_by_role("heading", name="Alex Fergestad")).to_be_visible()
        expect(home.rec_linkedin("alex-fergestad")).to_have_attribute("href", re.compile(r"linkedin\.com\/in\/"))
    
        # Then their title and where they are now are shown
        expect(card.locator(".rec-title")).to_have_text("QA Analyst @ Old Republic Professional")
        expect(home.rec_company("alex-fergestad")).to_have_attribute("title", "Now at Old Republic Professional")
    
        # Then the recommendation decrypts and reads in full
        expect(card.locator("blockquote p")).to_contain_text("While interning at Werner Enterprises, I’m excited")
        expect(card).to_have_attribute("data-status", "pass")  # an entry that read in full is a pass

    “While interning at Werner Enterprises, I’m excited to say that Matthew has had a big impact on me during my journey of going into the tech industry and being a software QA engineer! He offered advice ranging from software QA to overall life advice, in which most mentors do not offer. Matthew knows how to be personal, relatable, and trustworthy, and I couldn’t have had a more engaging mentor while interning at Werner! One thing I do have to point out is that Matthew was not assigned to mentor me, he volunteered himself to take me underneath his wing and help me with whatever questions I had with Werner, and how to live life in a quality way. Matthew helped me in ways other mentors couldn’t in the company, and I thank him so much for it! He is such a unique person, and I am so thankful to have met him in the company and hear his perspective on things! Thank you, Matthew!”

    Aaron Forkel

    Aaron Forkel

    Software Support Engineer

    Cypress · JavaScript Test Case 4103 - AF - Letter of Recommendation Renders 3 steps
    describe('Home', { tags: ['@smoke'] }, () => {
      it('Test Case 4103 - AF - Letter of Recommendation Renders', () => {
        cy.visit('/');
        cy.get('[data-testid="rec-card-aaron-forkel"]').as('card');
    
        cy.log("Then Aaron Forkel's name loads and displays, linked to their LinkedIn profile");
        cy.get('@card').contains('h3', 'Aaron Forkel').should('be.visible');
        cy.get('@card').find('.rec-link-linkedin').should('have.attr', 'href').and('match', /linkedin\.com\/in\//);
    
        cy.log('Then their title and where they are now are shown');
        cy.get('@card').find('.rec-title').should('have.text', 'Software Support Engineer');
        cy.get('@card').find('.rec-link-company').should('have.attr', 'title', 'Now at MasterControl');
    
        cy.log('Then the recommendation decrypts and reads in full');
        cy.get('@card').find('blockquote p').should('contain.text', 'Matthew has been a close friend');
        cy.get('@card').should('have.attr', 'data-status', 'pass'); // an entry that read in full is a pass
      });
    });

    “Matthew has been a close friend of mine for many years. He has shown a consistent and genuine drive to develop his skills and be an effective member of his teams, a natural, but friendly and fair leader, and a mentor to all those who seek him. He has worked with a multitude of products and services, using coding languages such as JavaScript, Python, and C++. He has honed his existing skills in APIs, Software Development + Automation, and Test Case Management. He has also built skills in framework development and management and project management (i.e Scrum Master). He has been invaluable to me in my software journey, helping me numerous times with everything from system and software initialization, to obstacles in project development. I would recommend him as an indispensable resource to anyone who needs a committed and efficient team player. You couldn’t make a better choice than going with Matthew.”

    Tristan Lundgreen

    Tristan Lundgreen

    QA Engineer, Artist, Cyberpunk

    Playwright · C# Test Case 4104 - TL - Letter of Recommendation Renders 3 steps
    [TestFixture]
    public class HomeTests : PageTest
    {
        [Test, Category("smoke"), Description("Test Case 4104 - TL - Letter of Recommendation Renders")]
        public async Task TestCase4104_TL_LetterOfRecommendationRenders()
        {
            var home = new HomePage(Page);
            var card = home.RecCard("tristan-lundgreen");
    
            // Then Tristan Lundgreen's name loads and displays, linked to their LinkedIn profile
            await Expect(card.GetByRole(AriaRole.Heading, new() { Name = "Tristan Lundgreen" })).ToBeVisibleAsync();
            await Expect(home.RecLinkedIn("tristan-lundgreen")).ToHaveAttributeAsync("href", new Regex(@"linkedin\.com/in/"));
    
            // Then their title and where they are now are shown
            await Expect(card.Locator(".rec-title")).ToHaveTextAsync("QA Engineer, Artist, Cyberpunk");
            await Expect(home.RecCompany("tristan-lundgreen")).ToHaveAttributeAsync("title", "Now at Sunwest Bank");
    
            // Then the recommendation decrypts and reads in full
            await Expect(card.Locator("blockquote p")).ToContainTextAsync("Of all the people I’ve worked");
            await Expect(card).ToHaveAttributeAsync("data-status", "pass"); // an entry that read in full is a pass
        }
    }

    “Of all the people I’ve worked with, Matthew has left one of the most meaningful, impactful marks on me. His vision for his own life—a life focused on quality from the bottom up—inspired me to start looking at the world from a perspective I’d never considered. Moreover, his genuinely exceptional work ethic and instruction helped to completely transform my own professional abilities and the abilities of many whom he’s worked with. Matthew is well positioned as an incredible engineer who, most invaluably, shares his expertise with anyone he can, bringing up not only any team he’s on, but our entire industry with him. I couldn’t recommend anyone more.”

    Callum Payne

    Callum Payne

    QA Engineer

    Robot Framework Test Case 4105 - CP - Letter of Recommendation Renders 3 steps
    *** Settings ***
    Library         Browser
    Resource        ../resources/home_page.resource
    Test Tags       smoke
    
    *** Test Cases ***
    Test Case 4105 - CP - Letter of Recommendation Renders
        [Documentation]    Callum Payne's letter renders, linked to a real profile, and reads in full.
        Given The Home Page Is Open
        ${card}=    Set Variable    [data-testid="rec-card-callum-payne"]
    
        # Then Callum Payne's name loads and displays, linked to their LinkedIn profile
        Get Element States    ${card} h3    contains    visible
        Get Text    ${card} h3    ==    Callum Payne
        Get Attribute    ${card} .rec-link-linkedin    href    matches    linkedin\.com\/in\/
    
        # Then their title and where they are now are shown
        Get Text    ${card} .rec-title    ==    QA Engineer
        Get Attribute    ${card} .rec-link-company    title    ==    Now at Glass Atlas
    
        # Then the recommendation decrypts and reads in full
        Get Text    ${card} blockquote p    contains    It was an mind-opening experience being mentored
        Get Attribute    ${card}    data-status    ==    pass    # an entry that read in full is a pass

    “It was an mind-opening experience being mentored by Matthew, not only did he teach me the technicalities of Software QA; he also taught me how to effectively improve myself and how to approach situations emotionally and professionally to get the best outcome of any situation. He took it upon himself to be my guide at a time that I felt lost with zero expectations of getting anything in return and yet i owe him the world for what he has done for me, I don’t think I could have had a better mentor and friend than him and anyone that gets his attention in the future will not only feel like they have won the lottery with who they got, but are in for the most comforting learning experience of their life.”

    Stockton Nielson

    Stockton Nielson

    Sr. SDET

    Playwright · TypeScript Test Case 4106 - SN - Letter of Recommendation Renders 3 steps
    test('Test Case 4106 - SN - Letter of Recommendation Renders', { tag: '@smoke' }, async ({ page }) => {
      const home = new HomePage(page);
      const card = home.recCard('stockton-nielson');
    
      await test.step("Then Stockton Nielson's name loads and displays, linked to their LinkedIn profile", async () => {
        await expect(card.getByRole('heading', { name: 'Stockton Nielson' })).toBeVisible();
        await expect(home.recLinkedIn('stockton-nielson')).toHaveAttribute('href', /linkedin\.com\/in\//);
      });
    
      await test.step('Then their title and where they are now are shown', async () => {
        await expect(card.locator('.rec-title')).toHaveText('Sr. SDET');
        await expect(home.recCompany('stockton-nielson')).toHaveAttribute('title', 'Now at Verisk');
      });
    
      await test.step('Then the recommendation decrypts and reads in full', async () => {
        await expect(card.locator('blockquote p')).toContainText('Matthew Thornell is one of the rare');
        await expect(card, 'an entry that read in full is a pass').toHaveAttribute('data-status', 'pass');
      });
    });

    “Matthew Thornell is one of the rare cases in which we find genuine altruism. I was able to feel kindness and integrate it into my life, He taught me the value of putting time and kindness into someone. His ability to radiate an aura of quality and knowledge will let him go far in any opportunity he chooses to pursue. Matt can easily learn and study anything he puts his mind to. If he does not know it already he soon will. In terms of technical skills Matthew taught me how to have a quality mindset as well as how agile workflows move and function, he taught me cypress automation, test pad, Jira, and Zephyr in terms of job skills he taught me how to write test cases and bug reports. Matthew is an amazing mentor and anybody would be lucky to be mentored by him.”

    CJ Johnson

    CJ Johnson

    Associate Software Engineer, OEC

    Playwright · Python Test Case 4107 - CJ - Letter of Recommendation Renders 3 steps
    import re
    import pytest
    from playwright.sync_api import Page, expect
    
    from pages.home_page import HomePage
    
    
    @pytest.mark.smoke
    def test_case_4107_cj_letter_of_recommendation_renders(page: Page):
        """Test Case 4107 - CJ - Letter of Recommendation Renders"""
        home = HomePage(page)
        card = home.rec_card("cj-johnson")
    
        # Then CJ Johnson's name loads and displays, linked to their LinkedIn profile
        expect(card.get_by_role("heading", name="CJ Johnson")).to_be_visible()
        expect(home.rec_linkedin("cj-johnson")).to_have_attribute("href", re.compile(r"linkedin\.com\/in\/"))
    
        # Then their title and where they are now are shown
        expect(card.locator(".rec-title")).to_have_text("Associate Software Engineer, OEC")
        expect(home.rec_company("cj-johnson")).to_have_attribute("title", "Now at OEC")
    
        # Then the recommendation decrypts and reads in full
        expect(card.locator("blockquote p")).to_contain_text("Matthew is an invaluable resource")
        expect(card).to_have_attribute("data-status", "pass")  # an entry that read in full is a pass

    “Matthew is an invaluable resource in the Quality Assurance field. Reporting to Matthew during my project has been both humbling and enlightening. His ability to remain calm and professional while maintaining an air of excitement has resonated with me during my own QA experience. His desire to grow his knowledge both professionally and off the clock has been such an inspiration. I guarantee anyone who walks away after engaging with Matthew will be walking away a better human being.”

    3.3

    Chapter 3 · Page 3

    Recommendations

    Words from people I’ve worked alongside.

    Nathan Gearke

    Nathan Gearke

    Group Engineering Manager, Veterans United Home Loans

    Cypress · JavaScript Test Case 4108 - NG - Letter of Recommendation Renders 4 steps
    describe('Home', { tags: ['@smoke'] }, () => {
      it('Test Case 4108 - NG - Letter of Recommendation Renders', () => {
        cy.visit('/');
        cy.get('[data-testid="rec-card-nathan-gearke"]').as('card');
    
        cy.log("Then Nathan Gearke's name loads and displays, linked to their LinkedIn profile");
        cy.get('@card').contains('h3', 'Nathan Gearke').should('be.visible');
        cy.get('@card').find('.rec-link-linkedin').should('have.attr', 'href').and('match', /linkedin\.com\/in\//);
    
        cy.log('Then their title and the company we worked at together are shown');
        cy.get('@card').find('.rec-title').should('have.text', 'Group Engineering Manager, Veterans United Home Loans');
        cy.get('@card').find('.rec-link-company').should('have.attr', 'title', 'Worked together at Veterans United Home Loans');
    
        cy.log("Then Nathan's letter of recommendation icon populates and is downloadable");
        cy.get('[data-testid="rec-letter-nathan-gearke"]').should('have.attr', 'download', '');
    
        cy.log('Then the recommendation decrypts and reads in full');
        cy.get('@card').find('blockquote p').should('contain.text', 'Matthew’s greatest strength is his holistic vision');
        cy.get('@card').should('have.attr', 'data-status', 'pass'); // an entry that read in full is a pass
      });
    });

    “Matthew’s greatest strength is his holistic vision of quality. He regularly asked thoughtful, challenging questions that helped teams identify risks, clarify expectations, and improve solutions before they reached customers. … Matthew is the type of professional who leaves an organization stronger than he found it.”

    Samantha Reynolds

    Samantha Reynolds

    Teammate

    Playwright · C# Test Case 4109 - SR - Letter of Recommendation Renders 3 steps
    [TestFixture]
    public class HomeTests : PageTest
    {
        [Test, Category("smoke"), Description("Test Case 4109 - SR - Letter of Recommendation Renders")]
        public async Task TestCase4109_SR_LetterOfRecommendationRenders()
        {
            var home = new HomePage(Page);
            var card = home.RecCard("samantha-reynolds");
    
            // Then Samantha Reynolds's name loads and displays, linked to their LinkedIn profile
            await Expect(card.GetByRole(AriaRole.Heading, new() { Name = "Samantha Reynolds" })).ToBeVisibleAsync();
            await Expect(home.RecLinkedIn("samantha-reynolds")).ToHaveAttributeAsync("href", new Regex(@"linkedin\.com/in/"));
    
            // Then their title and the company we worked at together are shown
            await Expect(card.Locator(".rec-title")).ToHaveTextAsync("Teammate");
            await Expect(home.RecCompany("samantha-reynolds")).ToHaveAttributeAsync("title", "Worked together at Werner Enterprises");
    
            // Then the recommendation decrypts and reads in full
            await Expect(card.Locator("blockquote p")).ToContainTextAsync("Matthew is an amazing and valuable component");
            await Expect(card).ToHaveAttributeAsync("data-status", "pass"); // an entry that read in full is a pass
        }
    }

    “Matthew is an amazing and valuable component to any team he is a part of. I have had the pleasure of working with Matthew on multiple teams and his knowledge and passion around QA and ability to share that with the team is truly an important piece to any delivery. He is reliable, humble, and most importantly hard working!”

    Ronald White

    Ronald White

    Principal Product Owner

    Robot Framework Test Case 4110 - RW - Letter of Recommendation Renders 3 steps
    *** Settings ***
    Library         Browser
    Resource        ../resources/home_page.resource
    Test Tags       smoke
    
    *** Test Cases ***
    Test Case 4110 - RW - Letter of Recommendation Renders
        [Documentation]    Ronald White's letter renders, linked to a real profile, and reads in full.
        Given The Home Page Is Open
        ${card}=    Set Variable    [data-testid="rec-card-ronald-white"]
    
        # Then Ronald White's name loads and displays, linked to their LinkedIn profile
        Get Element States    ${card} h3    contains    visible
        Get Text    ${card} h3    ==    Ronald White
        Get Attribute    ${card} .rec-link-linkedin    href    matches    linkedin\.com\/in\/
    
        # Then their title and the company we worked at together are shown
        Get Text    ${card} .rec-title    ==    Principal Product Owner
        Get Attribute    ${card} .rec-link-company    title    ==    Worked together at Werner Enterprises
    
        # Then the recommendation decrypts and reads in full
        Get Text    ${card} blockquote p    contains    Matthew is a very knowledgeable and skilled
        Get Attribute    ${card}    data-status    ==    pass    # an entry that read in full is a pass

    “Matthew is a very knowledgeable and skilled Quality Engineer. He was instrumental with the testing of key bugs/enhancements and always provided recommendations regarding process improvement as it pertains to agile practices. Not only did he disclose known software issues, but he also asked the right clarifying questions during all the scrum ceremonies. Moreover, his technical acumen, attention to detail, and leadership are valuable. Therefore, he would be an asset to any organization.”

    Tod McConahay

    Tod McConahay

    Scrum Master, Werner Enterprises

    Playwright · TypeScript Test Case 4111 - TM - Letter of Recommendation Renders 3 steps
    test('Test Case 4111 - TM - Letter of Recommendation Renders', { tag: '@smoke' }, async ({ page }) => {
      const home = new HomePage(page);
      const card = home.recCard('tod-mcconahay');
    
      await test.step("Then Tod McConahay's name loads and displays, linked to their LinkedIn profile", async () => {
        await expect(card.getByRole('heading', { name: 'Tod McConahay' })).toBeVisible();
        await expect(home.recLinkedIn('tod-mcconahay')).toHaveAttribute('href', /linkedin\.com\/in\//);
      });
    
      await test.step('Then their title and the company we worked at together are shown', async () => {
        await expect(card.locator('.rec-title')).toHaveText('Scrum Master, Werner Enterprises');
        await expect(home.recCompany('tod-mcconahay')).toHaveAttribute('title', 'Worked together at Werner Enterprises');
      });
    
      await test.step('Then the recommendation decrypts and reads in full', async () => {
        await expect(card.locator('blockquote p')).toContainText('It is easy for me to write');
        await expect(card, 'an entry that read in full is a pass').toHaveAttribute('data-status', 'pass');
      });
    });

    “It is easy for me to write that it is my pleasure to work with Matthew Daily. Matthew brings energy, insight, and skills to the team every day. Matthew has filled in for me as Scrum Master and does a great job. He also brings his QA acumen to the team and really moved the needle in advancing our testing methodology. Any team or organization would benefit from including Matthew.”

    Andrew Sylvester

    Andrew Sylvester

    Software Engineer, ConexED

    Playwright · Python Test Case 4112 - AS - Letter of Recommendation Renders 3 steps
    import re
    import pytest
    from playwright.sync_api import Page, expect
    
    from pages.home_page import HomePage
    
    
    @pytest.mark.smoke
    def test_case_4112_as_letter_of_recommendation_renders(page: Page):
        """Test Case 4112 - AS - Letter of Recommendation Renders"""
        home = HomePage(page)
        card = home.rec_card("andrew-sylvester")
    
        # Then Andrew Sylvester's name loads and displays, linked to their LinkedIn profile
        expect(card.get_by_role("heading", name="Andrew Sylvester")).to_be_visible()
        expect(home.rec_linkedin("andrew-sylvester")).to_have_attribute("href", re.compile(r"linkedin\.com\/in\/"))
    
        # Then their title and the company we worked at together are shown
        expect(card.locator(".rec-title")).to_have_text("Software Engineer, ConexED")
        expect(home.rec_company("andrew-sylvester")).to_have_attribute("title", "Worked together at ConexED")
    
        # Then the recommendation decrypts and reads in full
        expect(card.locator("blockquote p")).to_contain_text("It was an absolute pleasure working")
        expect(card).to_have_attribute("data-status", "pass")  # an entry that read in full is a pass

    “It was an absolute pleasure working with Matthew. As a software engineer, he made my job so much easier, by creating detailed processes for reporting bugs and handing assignments back to me when they needed attention. The amount of responsibility he is able to manage on his own is very impressive, all while he is creating better strategies and implementing methodologies to improve the quality of the product without being asked. If you know Matthew, you know he will take pride in his work, and will give it his all 100% of the time. Any organization would be lucky to have him.”

    Stephanie Brunsvik

    Stephanie Brunsvik

    Full Stack Web Developer, Problem Solver

    Cypress · JavaScript Test Case 4113 - SB - Letter of Recommendation Renders 3 steps
    describe('Home', { tags: ['@smoke'] }, () => {
      it('Test Case 4113 - SB - Letter of Recommendation Renders', () => {
        cy.visit('/');
        cy.get('[data-testid="rec-card-stephanie-brunsvik"]').as('card');
    
        cy.log("Then Stephanie Brunsvik's name loads and displays, linked to their LinkedIn profile");
        cy.get('@card').contains('h3', 'Stephanie Brunsvik').should('be.visible');
        cy.get('@card').find('.rec-link-linkedin').should('have.attr', 'href').and('match', /linkedin\.com\/in\//);
    
        cy.log('Then their title and the company we worked at together are shown');
        cy.get('@card').find('.rec-title').should('have.text', 'Full Stack Web Developer, Problem Solver');
        cy.get('@card').find('.rec-link-company').should('have.attr', 'title', 'Worked together at ConexED');
    
        cy.log('Then the recommendation decrypts and reads in full');
        cy.get('@card').find('blockquote p').should('contain.text', 'Im always impressed by Matthew’s tenacity');
        cy.get('@card').should('have.attr', 'data-status', 'pass'); // an entry that read in full is a pass
      });
    });

    “Im always impressed by Matthew’s tenacity and strong work ethic, He is quick to volunteer to help and goes the extra mile to ensure his work is done on time. His tests are very thorough and well executed and is always eager to learn more about the technology he is testing. Finally his entertaining presence in meetings is also a continuous delight, In short he’s a great guy!”

    Blake Johnson

    Blake Johnson, CSPO

    AI First Leader | Team Builder | Product Owner

    Playwright · C# Test Case 4114 - BJ - Letter of Recommendation Renders 3 steps
    [TestFixture]
    public class HomeTests : PageTest
    {
        [Test, Category("smoke"), Description("Test Case 4114 - BJ - Letter of Recommendation Renders")]
        public async Task TestCase4114_BJ_LetterOfRecommendationRenders()
        {
            var home = new HomePage(Page);
            var card = home.RecCard("blake-johnson");
    
            // Then Blake Johnson, CSPO's name loads and displays, linked to their LinkedIn profile
            await Expect(card.GetByRole(AriaRole.Heading, new() { Name = "Blake Johnson, CSPO" })).ToBeVisibleAsync();
            await Expect(home.RecLinkedIn("blake-johnson")).ToHaveAttributeAsync("href", new Regex(@"linkedin\.com/in/"));
    
            // Then their title and the company we worked at together are shown
            await Expect(card.Locator(".rec-title")).ToHaveTextAsync("AI First Leader | Team Builder | Product Owner");
            await Expect(home.RecCompany("blake-johnson")).ToHaveAttributeAsync("title", "Worked together at ConexED");
    
            // Then the recommendation decrypts and reads in full
            await Expect(card.Locator("blockquote p")).ToContainTextAsync("I have had the pleasure to be");
            await Expect(card).ToHaveAttributeAsync("data-status", "pass"); // an entry that read in full is a pass
        }
    }

    “I have had the pleasure to be up late with Matthew, patching code, testing, fixing and patching again. Matthew is always ready to help, jump in, and get his hands dirty so we can deliver quality to our customers. Matthew always has a fun story to tell and is ready with a kind word to help a colleague when their feeling low. QA is a thankless job but without Matthew we could not do what we do as developers. Thank you Matthew.”

    Rafael Juarez

    Rafael Juarez

    Tech-minded | Blue Ribbon Winner | Build and Fixing

    Robot Framework Test Case 4115 - RJ - Letter of Recommendation Renders 3 steps
    *** Settings ***
    Library         Browser
    Resource        ../resources/home_page.resource
    Test Tags       smoke
    
    *** Test Cases ***
    Test Case 4115 - RJ - Letter of Recommendation Renders
        [Documentation]    Rafael Juarez's letter renders, linked to a real profile, and reads in full.
        Given The Home Page Is Open
        ${card}=    Set Variable    [data-testid="rec-card-rafael-juarez"]
    
        # Then Rafael Juarez's name loads and displays, linked to their LinkedIn profile
        Get Element States    ${card} h3    contains    visible
        Get Text    ${card} h3    ==    Rafael Juarez
        Get Attribute    ${card} .rec-link-linkedin    href    matches    linkedin\.com\/in\/
    
        # Then their title and the company we worked at together are shown
        Get Text    ${card} .rec-title    ==    Tech-minded | Blue Ribbon Winner | Build and Fixing
        Get Attribute    ${card} .rec-link-company    title    ==    Worked together at ConexED
    
        # Then the recommendation decrypts and reads in full
        Get Text    ${card} blockquote p    contains    Many of the people that you work
        Get Attribute    ${card}    data-status    ==    pass    # an entry that read in full is a pass

    “Many of the people that you work with through out your life, are seen as an ‘average employee’. I would categorize Matt as level apart. I have worked with Matt closely in a few capacities, and was able to see his effortless ability to learn the intricacies of his new role. He constantly demonstrates an adaptive and ingenious approach to his position and has become an integral member of our team. I would highly recommend Matt for a QA, but he is capable of being exceptional at any position.”

    Michael Gorham

    Michael Gorham

    CTO at ConexED

    Playwright · TypeScript Test Case 4116 - MG - Letter of Recommendation Renders 3 steps
    test('Test Case 4116 - MG - Letter of Recommendation Renders', { tag: '@smoke' }, async ({ page }) => {
      const home = new HomePage(page);
      const card = home.recCard('michael-gorham');
    
      await test.step("Then Michael Gorham's name loads and displays, linked to their LinkedIn profile", async () => {
        await expect(card.getByRole('heading', { name: 'Michael Gorham' })).toBeVisible();
        await expect(home.recLinkedIn('michael-gorham')).toHaveAttribute('href', /linkedin\.com\/in\//);
      });
    
      await test.step('Then their title and the company we worked at together are shown', async () => {
        await expect(card.locator('.rec-title')).toHaveText('CTO at ConexED');
        await expect(home.recCompany('michael-gorham')).toHaveAttribute('title', 'Worked together at ConexED');
      });
    
      await test.step('Then the recommendation decrypts and reads in full', async () => {
        await expect(card.locator('blockquote p')).toContainText('Matt is hands down the most positive');
        await expect(card, 'an entry that read in full is a pass').toHaveAttribute('data-status', 'pass');
      });
    });

    “Matt is hands down the most positive and energetic person on our team. Matt is also very detail oriented. He is always ready, willing and able to help and is very generous with his time. Matt stays up late during our release nights to perform hands on validation tests — this speaks volumes to his dedication, enthusiasm and loyalty. From setting up external automation tools to writing Selenium scripts, Matt is ConexED’s Quality Assurance expert. When demand for ConexED skyrocketed 2,000% due to the need to virtualize student support to combat the spread of COVID, Matt was instrumental in documenting bugs, testing fixes and ensuring issues found by QA flowed quickly through our Agile development process.”

    Jeordin Callister

    Jeordin Callister

    Software Engineer

    Playwright · Python Test Case 4117 - JC - Letter of Recommendation Renders 3 steps
    import re
    import pytest
    from playwright.sync_api import Page, expect
    
    from pages.home_page import HomePage
    
    
    @pytest.mark.smoke
    def test_case_4117_jc_letter_of_recommendation_renders(page: Page):
        """Test Case 4117 - JC - Letter of Recommendation Renders"""
        home = HomePage(page)
        card = home.rec_card("jeordin-callister")
    
        # Then Jeordin Callister's name loads and displays, linked to their LinkedIn profile
        expect(card.get_by_role("heading", name="Jeordin Callister")).to_be_visible()
        expect(home.rec_linkedin("jeordin-callister")).to_have_attribute("href", re.compile(r"linkedin\.com\/in\/"))
    
        # Then their title and the company we worked at together are shown
        expect(card.locator(".rec-title")).to_have_text("Software Engineer")
        expect(home.rec_company("jeordin-callister")).to_have_attribute("title", "Worked together at ConexED")
    
        # Then the recommendation decrypts and reads in full
        expect(card.locator("blockquote p")).to_contain_text("Matthew is a dedicated and efficient QA")
        expect(card).to_have_attribute("data-status", "pass")  # an entry that read in full is a pass

    “Matthew is a dedicated and efficient QA engineer. Having him join our organization has drastically improved the testing and implementation of code. Quick to jump into leadership roles, and assertive when it comes to improving the product.”

    Quaid

    Quaid

    QA Intern with 99+ years of experience.

    Expected a recommendation from Quaid. Received: undefined.

    1. ✗ FAIL  recommendation from Quaid
    2. › Investigating root cause
    3. ✓ Root cause found
    4. Quaid is not a real human. Mannequin. 99+ years of experience, zero pulse.
    5. › Filing bug report…
    BUG-4004 · A mannequin holds a recommendation card P1 · High
    Summary
    A recommendation card in Chapter 3 is attributed to Quaid. Quaid is a mannequin.
    Environment
    mdtqualityadventures.com · Recommendations, Chapter 3 · Page 3 · Chromium
    Steps to reproduce
    1. Open the Recommendations chapter.
    2. Scroll to the last card in the grid.
    3. Read the name on it.
    Expected
    Only a real person holds a recommendation card.
    Actual
    A QA intern with 99+ years of experience and no pulse holds one.
    Root cause
    Quaid is not a real human.
    Severity
    High · data integrity · every letter on the page is worth less while he has one
    Attachment
    mentee-quaid.jpg · Chapter 3, Page 2, mentee roster
    Status
    Open → Test case requested
    1. › Does this scenario have a test case?
    2. No.
    3. › Generating test case…
    Test Case 4004 - QD - Mannequin Does Not Hold a Recommendation 3 steps
    // What It Tests: A recommendation card only ever belongs to a real person.
    // Why It Matters: Quaid is a mannequin with 99+ years of experience — if he
    // can get a card, so can any bug that dresses the part.
    test(
      'Test Case 4004 - QD - Mannequin Does Not Hold a Recommendation',
      { tag: ['@smoke', '@data-integrity'] },
      async ({ page, request }) => {
        const home = new HomePage(page);
        const quaid = home.recCard('quaid');
    
        await test.step('Given the Recommendations chapter has loaded', async () => {
          await home.goto();
          await expect(home.recommendationLetters.first()).toBeVisible();
        });
    
        await test.step('Then Quaid carries the failed verdict, and is not counted as a letter', async () => {
          await expect(quaid, 'a card with no human behind it must fail').toHaveClass(/rec-card-failed/);
          await expect(quaid, 'his outcome is declared in the markup, not inferred').toHaveAttribute('data-outcome', 'fail');
          await expect(home.recommendationLetters, 'only the people who wrote one are letters').toHaveCount(LETTER_AUTHORS.length);
        });
    
        await test.step('And the API has no record of him', async () => {
          const response = await request.get('/api/humans/quaid');
          expect(response.status(), 'a human record for a mannequin is a data-integrity bug').toBe(404);
        });
      },
    );
    1. ✓ 1 test written · tests/specs/4000-recommendations.spec.ts

    Anonymous User

    Unknown · unverified

    Unauthorized: this recommendation could not be attributed to an authorized user.

    1. ⊘ BLOCKED  recommendation from Anonymous User
    2. › Unauthorized user detected
    3. › Initiating security protocol
    4. ✓ User IP recorded · 203.0.113.42
    5. ✓ User IP blocked
    6. Reason for block: user was not recognized as an authorized user.
    7. › Does this scenario have a test case?
    8. No.
    9. › Creating cyber security test case…
    Test Case 4006 - AU - Unauthorized Author Is Blocked 3 steps
    // What It Tests: An unidentified author can never hold a recommendation, and
    // the site takes no recommendation from one.
    // Why It Matters: A recommendation is worth exactly what its author's name is
    // worth. An anonymous one is an open door for anyone to write their own.
    test(
      'Test Case 4006 - AU - Unauthorized Author Is Blocked',
      { tag: ['@smoke', '@security'] },
      async ({ page, request }) => {
        const home = new HomePage(page);
        const anonymous = home.recCard('anonymous-user');
    
        await test.step('Given the Recommendations chapter has loaded', async () => {
          await home.goto();
          await expect(home.recommendationLetters.first()).toBeVisible();
        });
    
        await test.step('Then the unidentified author is blocked, with no identity to link', async () => {
          await expect(anonymous, 'an author with no identity is blocked, not merely failed').toHaveClass(/rec-card-blocked/);
          await expect(anonymous.locator('.rec-link-linkedin'), 'no identity, no profile to link').toHaveCount(0);
          await expect(home.recommendationLetters, 'only named authors are counted as letters').toHaveCount(LETTER_AUTHORS.length);
        });
    
        await test.step('And an anonymous submission is refused at the door', async () => {
          const response = await request.post('/api/recommendations', {
            data: { author: 'Anonymous User', text: 'Trust me.' },
          });
          expect(response.status(), 'nothing on this site accepts an unauthorized author').toBeGreaterThanOrEqual(400);
        });
      },
    );
    1. ✓ 1 test written · tests/specs/4000-recommendations.spec.ts