[{"data":1,"prerenderedAt":389},["ShallowReactive",2],{"nav":3,"page-\u002Fcodestock2026\u002Froi-of-automated-testing":155},[4,30,91,151],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Codestock2026","\u002Fcodestock2026","CodeStock2026",[9,13,17,21,25],{"title":10,"path":11,"stem":12},"AI Reviewers By Avindra Fernando","\u002Fcodestock2026\u002Fai-reviewers-by-avindra-fernando","CodeStock2026\u002FAI Reviewers by Avindra Fernando",{"title":14,"path":15,"stem":16},"Containers","\u002Fcodestock2026\u002Fcontainers","CodeStock2026\u002FContainers",{"title":18,"path":19,"stem":20},"DX","\u002Fcodestock2026\u002Fdx","CodeStock2026\u002FDX",{"title":22,"path":23,"stem":24},"Github Actions","\u002Fcodestock2026\u002Fgithub-actions","CodeStock2026\u002FGithub Actions",{"title":26,"path":27,"stem":28},"ROI Of Automated Testing","\u002Fcodestock2026\u002Froi-of-automated-testing","CodeStock2026\u002FROI of Automated Testing",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Vueconf2025","\u002Fvueconf2025","VueConf2025",[35,39,43,47,51,55,59,63,67,71,75,79,83,87],{"title":36,"path":37,"stem":38},"20 Ways To Define Props In Vue 3 By Alex Riviere","\u002Fvueconf2025\u002F20-ways-to-define-props-in-vue-3-by-alex-riviere","VueConf2025\u002F20 Ways to Define Props in Vue 3 by Alex Riviere",{"title":40,"path":41,"stem":42},"Accessible Frontend Testing For Beginners By Henry Lie","\u002Fvueconf2025\u002Faccessible-frontend-testing-for-beginners-by-henry-lie","VueConf2025\u002FAccessible Frontend Testing for Beginners by Henry Lie",{"title":44,"path":45,"stem":46},"Constructing Clear, Comprehensible Components By David Nahodyl","\u002Fvueconf2025\u002Fconstructing-clear-comprehensible-components-by-david-nahodyl","VueConf2025\u002FConstructing Clear, Comprehensible Components by David Nahodyl",{"title":48,"path":49,"stem":50},"Dependency Injection By Robbie","\u002Fvueconf2025\u002Fdependency-injection-by-robbie","VueConf2025\u002FDependency Injection by Robbie",{"title":52,"path":53,"stem":54},"Fuzz To Function   Building AI First Vue Apps By Justin Schroeder","\u002Fvueconf2025\u002Ffuzz-to-function-building-ai-first-vue-apps-by-justin-schroeder","VueConf2025\u002FFuzz to Function - Building AI-first Vue Apps by Justin Schroeder",{"title":56,"path":57,"stem":58},"Grounding Gen AI By Daniel Madalitso Phiri","\u002Fvueconf2025\u002Fgrounding-gen-ai-by-daniel-madalitso-phiri","VueConf2025\u002FGrounding Gen AI by Daniel Madalitso Phiri",{"title":60,"path":61,"stem":62},"How To Ruin A User Interface By Kathryn Grayson Nanz","\u002Fvueconf2025\u002Fhow-to-ruin-a-user-interface-by-kathryn-grayson-nanz","VueConf2025\u002FHow to Ruin a User Interface by Kathryn Grayson Nanz",{"title":64,"path":65,"stem":66},"Lessons Learned From A Vue SaaS App By Abdelrahman Awad","\u002Fvueconf2025\u002Flessons-learned-from-a-vue-saas-app-by-abdelrahman-awad","VueConf2025\u002FLessons Learned from a Vue SaaS App by Abdelrahman Awad",{"title":68,"path":69,"stem":70},"Lightning Talks","\u002Fvueconf2025\u002Flightning-talks","VueConf2025\u002FLightning Talks",{"title":72,"path":73,"stem":74},"Nuxt Hidden Treasures By Alexander Lichter","\u002Fvueconf2025\u002Fnuxt-hidden-treasures-by-alexander-lichter","VueConf2025\u002FNuxt Hidden Treasures by Alexander Lichter",{"title":76,"path":77,"stem":78},"Nuxt Layers For Starter Projects By Dino Mastrianni","\u002Fvueconf2025\u002Fnuxt-layers-for-starter-projects-by-dino-mastrianni","VueConf2025\u002FNuxt Layers for Starter Projects by Dino Mastrianni",{"title":80,"path":81,"stem":82},"Soft Skills For Software Developers By Katherine Herbert","\u002Fvueconf2025\u002Fsoft-skills-for-software-developers-by-katherine-herbert","VueConf2025\u002FSoft Skills for Software Developers by Katherine Herbert",{"title":84,"path":85,"stem":86},"State Of Nuxt 2025 By Daniel Rowe","\u002Fvueconf2025\u002Fstate-of-nuxt-2025-by-daniel-rowe","VueConf2025\u002FState of Nuxt 2025 by Daniel Rowe",{"title":88,"path":89,"stem":90},"Vue Doo Magic AI Development Tricks By Daniel Kelly","\u002Fvueconf2025\u002Fvue-doo-magic-ai-development-tricks-by-daniel-kelly","VueConf2025\u002FVue-doo Magic AI Development Tricks by Daniel Kelly",{"title":92,"path":93,"stem":94,"children":95,"page":29},"Vueconf2026","\u002Fvueconf2026","VueConf2026",[96,100,104,108,112,116,120,123,127,131,135,139,143,147],{"title":97,"path":98,"stem":99},"Being A Vue Developer In The Age Of AI Coding Assistants By Erik Hanchett","\u002Fvueconf2026\u002Fbeing-a-vue-developer-in-the-age-of-ai-coding-assistants-by-erik-hanchett","VueConf2026\u002FBeing a Vue Developer in the Age of AI Coding Assistants by Erik Hanchett",{"title":101,"path":102,"stem":103},"Building Accessible Vue Enterprise Apps By Jeremy Rivera","\u002Fvueconf2026\u002Fbuilding-accessible-vue-enterprise-apps-by-jeremy-rivera","VueConf2026\u002FBuilding Accessible Vue Enterprise Apps by Jeremy Rivera",{"title":105,"path":106,"stem":107},"Escaping Pilot Purgatory By Martin Rojas","\u002Fvueconf2026\u002Fescaping-pilot-purgatory-by-martin-rojas","VueConf2026\u002FEscaping Pilot Purgatory by Martin Rojas",{"title":109,"path":110,"stem":111},"Guiding Agentic AI With Vue And Pinia By Rijk Van Zanten","\u002Fvueconf2026\u002Fguiding-agentic-ai-with-vue-and-pinia-by-rijk-van-zanten","VueConf2026\u002FGuiding Agentic AI with Vue and Pinia by Rijk van Zanten",{"title":113,"path":114,"stem":115},"How I AI From The Other Side Of The Org Chart By Daneez Zamangil","\u002Fvueconf2026\u002Fhow-i-ai-from-the-other-side-of-the-org-chart-by-daneez-zamangil","VueConf2026\u002FHow I AI from the Other Side of the Org Chart by Daneez Zamangil",{"title":117,"path":118,"stem":119},"Keynote By Evan You","\u002Fvueconf2026\u002Fkeynote-by-evan-you","VueConf2026\u002FKeynote by Evan You",{"title":68,"path":121,"stem":122},"\u002Fvueconf2026\u002Flightning-talks","VueConf2026\u002FLightning Talks",{"title":124,"path":125,"stem":126},"Maintainable Vue   Future Proof Patterns For Spaghetti Free Code By Chris Morrow","\u002Fvueconf2026\u002Fmaintainable-vue-future-proof-patterns-for-spaghetti-free-code-by-chris-morrow","VueConf2026\u002FMaintainable Vue - Future-proof patterns for spaghetti-free code by Chris Morrow",{"title":128,"path":129,"stem":130},"Possessed By Packages   Is Your JavaScript Haunted By Chris DeMars","\u002Fvueconf2026\u002Fpossessed-by-packages-is-your-javascript-haunted-by-chris-demars","VueConf2026\u002FPossessed by Packages - Is Your JavaScript Haunted by Chris DeMars",{"title":132,"path":133,"stem":134},"Stop Using One AI Tool For Everything   A Multitool Approach To Frontend Development By Will Marple","\u002Fvueconf2026\u002Fstop-using-one-ai-tool-for-everything-a-multitool-approach-to-frontend-development-by-will-marple","VueConf2026\u002FStop Using One AI Tool For Everything - A multitool approach to frontend development by Will Marple",{"title":136,"path":137,"stem":138},"The Future Of Web Development By Julian Burr","\u002Fvueconf2026\u002Fthe-future-of-web-development-by-julian-burr","VueConf2026\u002FThe Future of Web Development by Julian Burr",{"title":140,"path":141,"stem":142},"The Life Changing Art Of Being Wrong By Kathryn Grayson Nanz","\u002Fvueconf2026\u002Fthe-life-changing-art-of-being-wrong-by-kathryn-grayson-nanz","VueConf2026\u002FThe Life Changing Art of Being Wrong by Kathryn Grayson Nanz",{"title":144,"path":145,"stem":146},"Universal Lessons Learned From Legacy Codebases By Abbey Perini","\u002Fvueconf2026\u002Funiversal-lessons-learned-from-legacy-codebases-by-abbey-perini","VueConf2026\u002FUniversal Lessons Learned from Legacy Codebases by Abbey Perini",{"title":148,"path":149,"stem":150},"Vue Performance By Daniel Kelly","\u002Fvueconf2026\u002Fvue-performance-by-daniel-kelly","VueConf2026\u002FVue Performance by Daniel Kelly",{"title":152,"path":153,"stem":154},"Conference Notes","\u002F","index",{"id":156,"title":26,"body":157,"description":381,"extension":384,"meta":385,"navigation":386,"path":27,"seo":387,"stem":28,"__hash__":388},"content\u002FCodeStock2026\u002FROI of Automated Testing.md",{"type":158,"value":159,"toc":380},"minimark",[160],[161,162,163,167,170,173,196,215,218,221,224,241,244,247,250,253,270,296,310,321,329,343,357,360],"ul",{},[164,165,166],"li",{},"ROI - a popular profitability metric used to determine how well something has performed",[164,168,169],{},"Want the tests to work for you, not you working for your tests",[164,171,172],{},"Want an investment strategy, which is a set of guiding principles to help an investor achieve their financial goals. Usually using money as our metric, but when we are talking about tests, it is usually talked about in 'time' (which indirectly maps to money)",[164,174,175,176],{},"Value of tests\n",[161,177,178,181,184,187,190,193],{},[164,179,180],{},"reduce cost of manual testing",[164,182,183],{},"make codebase healthier over time",[164,185,186],{},"reduce debugging",[164,188,189],{},"provide confidence in code",[164,191,192],{},"leads to faster development",[164,194,195],{},"guard against introducing defects",[164,197,198,199],{},"Some tests are liabilities (cheap up front, costs over long time)\n",[161,200,201,204],{},[164,202,203],{},"time spent writing, running, maintaining, figuring out what went wrong when they fail",[164,205,206,207],{},"more dependencies = more costs\n",[161,208,209,212],{},[164,210,211],{},"database or API calls",[164,213,214],{},"items in the browser or the browser itself",[164,216,217],{},"Rate of return - net gain or loss over a period of time, expressed as a percentage",[164,219,220],{},"Useful life - number of years that an asset remains generating",[164,222,223],{},"Keep costs low, increase useful life",[164,225,226,227],{},"What's the rate of return on tests?\n",[161,228,229,232,235,238],{},[164,230,231],{},"Are they catching defects?",[164,233,234],{},"Do they give you confidence when you introduce changes?",[164,236,237],{},"If they fail, is it for a reason?",[164,239,240],{},"Do they save you time? Or do you have to spend more time maintaining them?",[164,242,243],{},"Over time, tests can help your codebase be more maintainable over time",[164,245,246],{},"Can also break down and become liabilities over time",[164,248,249],{},"Total cost of ownership - boats are a great example of the total cost of owning something",[164,251,252],{},"Asset allocation - investment strategy that aims to balance risk and reward by apportioning a portfolio's assets over time using diversification",[164,254,255,256],{},"Create a diverse portfolio of tests\n",[161,257,258,261,264,267],{},[164,259,260],{},"Testing pyramid",[164,262,263],{},"Trophy model",[164,265,266],{},"Focus on tests that establish clear boundaries and fail for reasons",[164,268,269],{},"Need to run quickly and run reliably",[164,271,272,273],{},"Different characteristics of tests\n",[161,274,275,278,281,284,287,290,293],{},[164,276,277],{},"Fast vs. Slow",[164,279,280],{},"Real vs Fake",[164,282,283],{},"solitary vs Sociable (unit vs e2e)",[164,285,286],{},"High maintenance vs low",[164,288,289],{},"How many changes would make this test fail?",[164,291,292],{},"When they fail, how much info do they provide?",[164,294,295],{},"Reliable vs not reliable (flaky)",[164,297,298,299],{},"Law of Diminishing Marginal Returns\n",[161,300,301,304,307],{},[164,302,303],{},"In the context of the portfolio, what is the value of the next test, as you are writing the current test",[164,305,306],{},"With e2e tests, they quickly add value as you add them, and as quickly stop returning value at a certain point because you have already tested items together",[164,308,309],{},"Whereas unit tests decrease gradually over time",[164,311,312,313],{},"Rebalancing - realigning the weightings of a portfolio to its original asset allocation by periodically buying or selling assets\n",[161,314,315,318],{},[164,316,317],{},"Over time, should evaluate tests and rebalance if tests are not serving you",[164,319,320],{},"Idea of shoving behavior down the pyramid. Is something that is being tested in an e2e be more valuable as an integration or unit test?",[164,322,323,324],{},"Divestiture - partial or full disposal of a company's operations or assets through sale, exchange, closure, or bankruptcy\n",[161,325,326],{},[164,327,328],{},"Don't be afraid of deleting tests that are not helping or can be covered elsewhere",[164,330,331,332],{},"How do you know you are getting a return on your investment?\n",[161,333,334,337,340],{},[164,335,336],{},"Code coverage? It is a great tool, also a trap. Which lines of code did my tests execute. Use it carefully.",[164,338,339],{},"Defects discovered in production - we want our tests to discover them in development, not production",[164,341,342],{},"Will my tests catch defects? Mutation testing - slow to run, but great tool. Runs the entire test suite, then goes to the code and changes items and then reruns tests to see if they catch the failure",[164,344,345,346],{},"Downstream impact of defects\n",[161,347,348,351,354],{},[164,349,350],{},"Reputation",[164,352,353],{},"Confidence",[164,355,356],{},"Monetary loss",[164,358,359],{},"Better faster pipelines, release more frequently with more confidence, reputation and confidence",[164,361,362,363],{},"AI - Is testing relevant??\n",[161,364,365,368,371,374,377],{},[164,366,367],{},"These things are even more valuable",[164,369,370],{},"Human writes the test first, agent writes the code is a good workflow",[164,372,373],{},"Use tests to keep AI on the rails",[164,375,376],{},"Confidence in the code your agent is writing",[164,378,379],{},"AI just amplifies everything we are already doing or not doing",{"title":381,"searchDepth":382,"depth":382,"links":383},"",2,[],"md",{},true,{"description":381},"-R1ivku-zKKjtUXJ2wLl1fzNdS9lBpF16hXPuCxz_eY",1780096770569]