[{"data":1,"prerenderedAt":916},["ShallowReactive",2],{"/blog/test-automation-devops":3,"navigation-en-us":131,"banner-en-us":559,"footer-en-us":569,"blog-post-authors-en-us-Steve Ropa":812,"blog-related-posts-en-us-test-automation-devops":827,"blog-promotions-en-us":852,"next-steps-en-us":906},{"id":4,"title":5,"authors":6,"body":8,"category":110,"date":111,"description":112,"extension":113,"externalUrl":114,"faq":114,"featured":115,"heroImage":116,"meta":117,"navigation":118,"path":119,"seo":120,"slug":124,"stem":125,"tags":126,"template":129,"updatedDate":114,"__hash__":130},"blogPosts/en-us/blog/test-automation-devops.md","Trust, but verify: The importance of software test automation",[7],"Steve Ropa",{"type":9,"value":10,"toc":100},"minimark",[11,21,26,34,38,47,51,54,58,61,64,68,71,74,78,87],[12,13,14,15,20],"p",{},"This article is about software ",[16,17,19],"a",{"href":18},"/topics/devops/","test automation and DevOps",", but bear with me a moment before we go there. Back during the Cold War, there were many discussions about how to improve relations and reduce the number of nuclear missiles countries were pointing at each other. During these talks, one of the biggest sticking points was how much the two countries could trust each other, and if they couldn’t, how they maintained their sovereignty while under some form of arms control agreement. They eventually agreed upon a regime of agreeing to perform certain actions, with periodic inspections on each side to confirm that said actions would happen, based on the Russian proverb, “trust, but verify.”",[22,23,25],"h2",{"id":24},"trust-but-verify-devops-requires-trust","Trust but verify: DevOps requires trust",[12,27,28,29,33],{},"“Trust, but verify” is commonly used with reference to security, but needs to be the motto for a good DevOps automation pipeline as well. First, for all the developers who ask, “Why should I care about DevOps?” I just want to mention that the key to success in ",[30,31,32],"em",{},"any"," type of development is a short feedback loop and truly safe code. DevOps is a fantastic mechanism for helping us achieve that, by taking the valuable technical practices we’ve learned and applying them frequently and smoothly. DevOps as a cultural phenomenon relies heavily on Lean principles and on the concept of “trust-based management” where we put our trust in the teams to be professional craftsmen. This is important and can’t be overstated. We hire professional developers to do professional development, and we must trust them to get the job done.",[22,35,37],{"id":36},"trust-but-verify-todays-world-requires-verification","Trust but verify: Today’s world requires verification",[12,39,40,41,46],{},"And yet, there is a challenge. In most cases, software is not being created in a vacuum. We must make sure we are integrating well with the rest of the system. Sometimes, we have legal requirements like ",[16,42,45],{"href":43,"rel":44},"https://en.wikipedia.org/wiki/Sarbanes%E2%80%93Oxley_Act",[],"Sarbanes-Oxley compliance",". In the past, we would schedule a large block of time to do all the integration and compliance testing. Now, we are saying, “Trust us, we will do the right thing” and deploying to production as quickly as is practicable. This is where automated testing comes into play.",[22,48,50],{"id":49},"three-categories-of-verification","Three categories of verification",[12,52,53],{},"Let’s break this into three categories: Unit, System, and Compliance. This may not be the breakdown we usually think of, but bear with me. Unit testing is the most commonly discussed level of testing among modern developers. We write small, concise tests that exercise the code under development, ensuring it does what we intend it to do. Preferably we are doing test-driven development, and writing the tests prior to the code, but that is a blog for another time. Under the heading of “trust, but verify,” rather than slow down our development cycle with code review gates and, dare I say it, maybe even merge requests, we allow teams to check code in whenever they feel the need. Then we verify that we haven’t done anything untoward by running the automated unit tests on the build environment. This level of verification isn’t enough to ensure a truly high-quality system, but the lack of this level of verification is a definite step on the road to perdition.",[22,55,57],{"id":56},"system-level-verification","System-level verification",[12,59,60],{},"I like to use System testing to describe the various next level tests. This would be any system-wide tests, such as Acceptance, Integration, and possibly Performance testing. Unfortunately, many development teams stop at automated unit tests. They give lip service to automating other tests “when we have time.” And we know when that is. So, it gets skipped. Or is treated as a luxury. Since we often don’t have enough time to do all this testing manually either, we end up with defects and low-quality user experiences, which erodes trust in our teams’ ability to create and innovate. This downward spiral usually ends with organizations building giant processes and Change Advisory Boards to slow down the pace of change, all in the name of safety.",[12,62,63],{},"So instead, we trust our team to create innovative software, working closely with their customer or other representatives of said customer. To verify the teams are creating the right software, we represent the needs of the customer in terms of tests. These tests are automated to begin with, again preferably before creating the actual product. Then, we include the automated System tests into the DevOps pipeline, running with each check in. Now we can feel safe that the system is stable and represent the customers’ needs to the best of our ability to understand them.",[22,65,67],{"id":66},"safety","Safety",[12,69,70],{},"Lastly, we need to verify that our teams are creating safe software. There are some excellent tools for automated security and safe programming scans. Include these as well into your pipeline. If they take too long, you can consider an alternate pipeline that runs less frequently, but start by running with each check in, until you feel that it just is getting too bogged down.",[12,72,73],{},"In the end, we are back to the basic statement, “trust but verify.” We won’t put massive processes and boards of review in place, slowing down the pace of development. We won’t create giant overarching architectures and just allow our developers to “fill in the blanks.” We will present them with the needs of the system and trust them to develop great software. Meanwhile, we will support them by verifying, many times a day, that they are still on track. Hey, if it worked for nuclear weapons, surely it can work for software.",[22,75,77],{"id":76},"about-the-guest-author","About the guest author",[12,79,80,81,86],{},"Steve Ropa is a Co-founder and Master Craftsman at the ",[16,82,85],{"href":83,"rel":84},"https://www.rmprogrammers.com/",[],"Rocky Mountain Programmers Guild"," in Denver, Colorado, where he brings his long career of successful software delivery to elevate developers and teams to new levels of performance and Craftsmanship.",[12,88,89,94,95],{},[16,90,93],{"href":91,"rel":92},"https://unsplash.com/photos/GNyy-D-SNN8?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Photo"," by Guillaume Lebelt on ",[16,96,99],{"href":97,"rel":98},"https://unsplash.com/search/photos/patterns?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Unsplash",{"title":101,"searchDepth":102,"depth":102,"links":103},"",2,[104,105,106,107,108,109],{"id":24,"depth":102,"text":25},{"id":36,"depth":102,"text":37},{"id":49,"depth":102,"text":50},{"id":56,"depth":102,"text":57},{"id":66,"depth":102,"text":67},{"id":76,"depth":102,"text":77},"insights","2018-04-23","Guest author Steve Ropa explains what a Cold War era motto has to do with test automation (seriously) and bringing development and operations closer together.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668307/Blog/Hero%20Images/test-automation-devops.jpg",{},true,"/en-us/blog/test-automation-devops",{"title":5,"description":112,"ogTitle":5,"ogDescription":112,"noIndex":115,"ogImage":116,"ogUrl":121,"ogSiteName":122,"ogType":123,"canonicalUrls":121},"https://about.gitlab.com/blog/test-automation-devops","https://about.gitlab.com","article","test-automation-devops","en-us/blog/test-automation-devops",[127,128],"DevOps","testing","BlogPost","oDnURJTHTj22YxwRoskVgsahMOawknwG0I62Q0N3rKc",{"logo":132,"freeTrial":137,"sales":142,"login":147,"items":152,"search":479,"minimal":510,"duo":529,"switchNav":538,"pricingDeployment":549},{"config":133},{"href":134,"dataGaName":135,"dataGaLocation":136},"/","gitlab logo","header",{"text":138,"config":139},"Get free trial",{"href":140,"dataGaName":141,"dataGaLocation":136},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":143,"config":144},"Request a demo",{"href":145,"dataGaName":146,"dataGaLocation":136},"/sales/?contact-topic=request-demo","sales",{"text":148,"config":149},"Sign in",{"href":150,"dataGaName":151,"dataGaLocation":136},"https://gitlab.com/users/sign_in/","sign in",[153,182,282,287,401,457],{"text":154,"config":155,"menu":157},"Platform",{"dataNavLevelOne":156},"platform",{"type":158,"columns":159},"cards",[160,166,174],{"title":154,"description":161,"link":162},"The intelligent orchestration platform for DevSecOps",{"text":163,"config":164},"Explore our Platform",{"href":165,"dataGaName":156,"dataGaLocation":136},"/platform/",{"title":167,"description":168,"link":169},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":170,"config":171},"Meet GitLab Duo",{"href":172,"dataGaName":173,"dataGaLocation":136},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":175,"description":176,"link":177},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":178,"config":179},"Learn more",{"href":180,"dataGaName":181,"dataGaLocation":136},"/why-gitlab/","why gitlab",{"text":183,"left":118,"config":184,"menu":186},"Product",{"dataNavLevelOne":185},"solutions",{"type":187,"link":188,"columns":192,"feature":261},"lists",{"text":189,"config":190},"View all Solutions",{"href":191,"dataGaName":185,"dataGaLocation":136},"/solutions/",[193,217,240],{"title":194,"description":195,"link":196,"items":201},"Automation","CI/CD and automation to accelerate deployment",{"config":197},{"icon":198,"href":199,"dataGaName":200,"dataGaLocation":136},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[202,206,209,213],{"text":203,"config":204},"CI/CD",{"href":205,"dataGaLocation":136,"dataGaName":203},"/solutions/continuous-integration/",{"text":167,"config":207},{"href":172,"dataGaLocation":136,"dataGaName":208},"gitlab duo agent platform - product menu",{"text":210,"config":211},"Source Code Management",{"href":212,"dataGaLocation":136,"dataGaName":210},"/solutions/source-code-management/",{"text":214,"config":215},"Automated Software Delivery",{"href":199,"dataGaLocation":136,"dataGaName":216},"Automated software delivery",{"title":218,"description":219,"link":220,"items":225},"Security","Deliver code faster without compromising security",{"config":221},{"href":222,"dataGaName":223,"dataGaLocation":136,"icon":224},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[226,230,235],{"text":227,"config":228},"Application Security Testing",{"href":222,"dataGaName":229,"dataGaLocation":136},"Application security testing",{"text":231,"config":232},"Software Supply Chain Security",{"href":233,"dataGaLocation":136,"dataGaName":234},"/solutions/supply-chain/","Software supply chain security",{"text":236,"config":237},"Software Compliance",{"href":238,"dataGaName":239,"dataGaLocation":136},"/solutions/software-compliance/","software compliance",{"title":241,"link":242,"items":247},"Measurement",{"config":243},{"icon":244,"href":245,"dataGaName":246,"dataGaLocation":136},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[248,252,256],{"text":249,"config":250},"Visibility & Measurement",{"href":245,"dataGaLocation":136,"dataGaName":251},"Visibility and Measurement",{"text":253,"config":254},"Value Stream Management",{"href":255,"dataGaLocation":136,"dataGaName":253},"/solutions/value-stream-management/",{"text":257,"config":258},"Analytics & Insights",{"href":259,"dataGaLocation":136,"dataGaName":260},"/solutions/analytics-and-insights/","Analytics and insights",{"title":262,"type":187,"items":263},"GitLab for",[264,270,276],{"text":265,"config":266},"Enterprise",{"icon":267,"href":268,"dataGaLocation":136,"dataGaName":269},"Building","/enterprise/","enterprise",{"text":271,"config":272},"Small Business",{"icon":273,"href":274,"dataGaLocation":136,"dataGaName":275},"Work","/small-business/","small business",{"text":277,"config":278},"Public Sector",{"icon":279,"href":280,"dataGaLocation":136,"dataGaName":281},"Organization","/solutions/public-sector/","public sector",{"text":283,"config":284},"Pricing",{"href":285,"dataGaName":286,"dataGaLocation":136,"dataNavLevelOne":286},"/pricing/","pricing",{"text":288,"config":289,"menu":291},"Resources",{"dataNavLevelOne":290},"resources",{"type":187,"link":292,"columns":296,"feature":390},{"text":293,"config":294},"View all resources",{"href":295,"dataGaName":290,"dataGaLocation":136},"/resources/",[297,330,357],{"title":298,"items":299},"Getting started",[300,305,310,315,320,325],{"text":301,"config":302},"Install",{"href":303,"dataGaName":304,"dataGaLocation":136},"/install/","install",{"text":306,"config":307},"Quick start guides",{"href":308,"dataGaName":309,"dataGaLocation":136},"/get-started/","quick setup checklists",{"text":311,"config":312},"Learn",{"href":313,"dataGaLocation":136,"dataGaName":314},"https://university.gitlab.com/","learn",{"text":316,"config":317},"Product documentation",{"href":318,"dataGaName":319,"dataGaLocation":136},"https://docs.gitlab.com/","product documentation",{"text":321,"config":322},"Best practice videos",{"href":323,"dataGaName":324,"dataGaLocation":136},"/getting-started-videos/","best practice videos",{"text":326,"config":327},"Integrations",{"href":328,"dataGaName":329,"dataGaLocation":136},"/integrations/","integrations",{"title":331,"items":332},"Discover",[333,338,343,348,352],{"text":334,"config":335},"Customer success stories",{"href":336,"dataGaName":337,"dataGaLocation":136},"/customers/","customer success stories",{"text":339,"config":340},"Blog",{"href":341,"dataGaName":342,"dataGaLocation":136},"/blog/","blog",{"text":344,"config":345},"Demo Hub",{"href":346,"dataGaName":347,"dataGaLocation":136},"/demo-hub/","demo hub",{"text":349,"config":350},"The Source",{"href":351,"dataGaName":342,"dataGaLocation":136},"/the-source/",{"text":353,"config":354},"Remote",{"href":355,"dataGaName":356,"dataGaLocation":136},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":358,"items":359},"Connect",[360,365,370,375,380,385],{"text":361,"config":362},"GitLab Services",{"href":363,"dataGaName":364,"dataGaLocation":136},"/services/","services",{"text":366,"config":367},"Contribute",{"href":368,"dataGaName":369,"dataGaLocation":136},"https://contributors.gitlab.com","contribute",{"text":371,"config":372},"Community",{"href":373,"dataGaName":374,"dataGaLocation":136},"/community/","community",{"text":376,"config":377},"Forum",{"href":378,"dataGaName":379,"dataGaLocation":136},"https://forum.gitlab.com/","forum",{"text":381,"config":382},"Events",{"href":383,"dataGaName":384,"dataGaLocation":136},"/events/","events",{"text":386,"config":387},"Partners",{"href":388,"dataGaName":389,"dataGaLocation":136},"/partners/","partners",{"config":391,"title":394,"text":395,"link":396},{"background":392,"textColor":393},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":397,"config":398},"Read the latest",{"href":399,"dataGaName":400,"dataGaLocation":136},"/whats-new/","whats new",{"text":402,"config":403,"menu":405},"Company",{"dataNavLevelOne":404},"company",{"type":187,"columns":406},[407],{"items":408},[409,414,420,422,427,432,437,442,447,452],{"text":410,"config":411},"About",{"href":412,"dataGaName":413,"dataGaLocation":136},"/company/","about",{"text":415,"config":416,"footerGa":419},"Jobs",{"href":417,"dataGaName":418,"dataGaLocation":136},"/jobs/","jobs",{"dataGaName":418},{"text":381,"config":421},{"href":383,"dataGaName":384,"dataGaLocation":136},{"text":423,"config":424},"Leadership",{"href":425,"dataGaName":426,"dataGaLocation":136},"/company/team/e-group/","leadership",{"text":428,"config":429},"Handbook",{"href":430,"dataGaName":431,"dataGaLocation":136},"https://handbook.gitlab.com/","handbook",{"text":433,"config":434},"Investor relations",{"href":435,"dataGaName":436,"dataGaLocation":136},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":438,"config":439},"Trust Center",{"href":440,"dataGaName":441,"dataGaLocation":136},"/security/","trust center",{"text":443,"config":444},"AI Transparency Center",{"href":445,"dataGaName":446,"dataGaLocation":136},"/ai-transparency-center/","ai transparency center",{"text":448,"config":449},"Newsletter",{"href":450,"dataGaName":451,"dataGaLocation":136},"/company/contact/#contact-forms","newsletter",{"text":453,"config":454},"Press",{"href":455,"dataGaName":456,"dataGaLocation":136},"/press/","press",{"text":458,"config":459,"menu":460},"Contact us",{"dataNavLevelOne":404},{"type":187,"columns":461},[462],{"items":463},[464,469,474],{"text":465,"config":466},"Talk to sales",{"href":467,"dataGaName":468,"dataGaLocation":136},"/sales/","talk to sales",{"text":470,"config":471},"Support portal",{"href":472,"dataGaName":473,"dataGaLocation":136},"https://support.gitlab.com/hc/en-us","support portal",{"text":475,"config":476},"Customer portal",{"href":477,"dataGaName":478,"dataGaLocation":136},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":480,"login":481,"suggestions":488},"Close",{"text":482,"link":483},"To search repositories and projects, login to",{"text":484,"config":485},"gitlab.com",{"href":150,"dataGaName":486,"dataGaLocation":487},"search login","search",{"text":489,"default":490},"Suggestions",[491,493,497,499,503,507],{"text":167,"config":492},{"href":172,"dataGaName":167,"dataGaLocation":487},{"text":494,"config":495},"Code Suggestions (AI)",{"href":496,"dataGaName":494,"dataGaLocation":487},"/solutions/code-suggestions/",{"text":203,"config":498},{"href":205,"dataGaName":203,"dataGaLocation":487},{"text":500,"config":501},"GitLab on AWS",{"href":502,"dataGaName":500,"dataGaLocation":487},"/partners/technology-partners/aws/",{"text":504,"config":505},"GitLab on Google Cloud",{"href":506,"dataGaName":504,"dataGaLocation":487},"/partners/technology-partners/google-cloud-platform/",{"text":508,"config":509},"Why GitLab?",{"href":180,"dataGaName":508,"dataGaLocation":487},{"freeTrial":511,"mobileIcon":516,"desktopIcon":521,"secondaryButton":524},{"text":512,"config":513},"Start free trial",{"href":514,"dataGaName":141,"dataGaLocation":515},"https://gitlab.com/-/trials/new/","nav",{"altText":517,"config":518},"Gitlab Icon",{"src":519,"dataGaName":520,"dataGaLocation":515},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":517,"config":522},{"src":523,"dataGaName":520,"dataGaLocation":515},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":525,"config":526},"Get Started",{"href":527,"dataGaName":528,"dataGaLocation":515},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":530,"mobileIcon":534,"desktopIcon":536},{"text":531,"config":532},"Learn more about GitLab Duo",{"href":172,"dataGaName":533,"dataGaLocation":515},"gitlab duo",{"altText":517,"config":535},{"src":519,"dataGaName":520,"dataGaLocation":515},{"altText":517,"config":537},{"src":523,"dataGaName":520,"dataGaLocation":515},{"button":539,"mobileIcon":544,"desktopIcon":546},{"text":540,"config":541},"/switch",{"href":542,"dataGaName":543,"dataGaLocation":515},"#contact","switch",{"altText":517,"config":545},{"src":519,"dataGaName":520,"dataGaLocation":515},{"altText":517,"config":547},{"src":548,"dataGaName":520,"dataGaLocation":515},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":550,"mobileIcon":555,"desktopIcon":557},{"text":551,"config":552},"Back to pricing",{"href":285,"dataGaName":553,"dataGaLocation":515,"icon":554},"back to pricing","GoBack",{"altText":517,"config":556},{"src":519,"dataGaName":520,"dataGaLocation":515},{"altText":517,"config":558},{"src":523,"dataGaName":520,"dataGaLocation":515},{"title":560,"titleMobile":561,"button":562,"config":567},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":178,"config":563},{"href":564,"dataGaName":565,"dataGaLocation":566},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":568,"disabled":115},"release",{"data":570},{"text":571,"source":572,"edit":578,"contribute":583,"config":588,"items":593,"minimal":801},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":573,"config":574},"View page source",{"href":575,"dataGaName":576,"dataGaLocation":577},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":579,"config":580},"Edit this page",{"href":581,"dataGaName":582,"dataGaLocation":577},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":584,"config":585},"Please contribute",{"href":586,"dataGaName":587,"dataGaLocation":577},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":589,"facebook":590,"youtube":591,"linkedin":592},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[594,641,693,737,769],{"title":283,"links":595,"subMenu":610},[596,600,605],{"text":597,"config":598},"View plans",{"href":285,"dataGaName":599,"dataGaLocation":577},"view plans",{"text":601,"config":602},"Why Premium?",{"href":603,"dataGaName":604,"dataGaLocation":577},"/pricing/premium/","why premium",{"text":606,"config":607},"Why Ultimate?",{"href":608,"dataGaName":609,"dataGaLocation":577},"/pricing/ultimate/","why ultimate",[611],{"title":612,"links":613},"Contact Us",[614,617,619,621,626,631,636],{"text":615,"config":616},"Contact sales",{"href":467,"dataGaName":146,"dataGaLocation":577},{"text":470,"config":618},{"href":472,"dataGaName":473,"dataGaLocation":577},{"text":475,"config":620},{"href":477,"dataGaName":478,"dataGaLocation":577},{"text":622,"config":623},"Status",{"href":624,"dataGaName":625,"dataGaLocation":577},"https://status.gitlab.com/","status",{"text":627,"config":628},"Terms of use",{"href":629,"dataGaName":630,"dataGaLocation":577},"/terms/","terms of use",{"text":632,"config":633},"Privacy statement",{"href":634,"dataGaName":635,"dataGaLocation":577},"/privacy/","privacy statement",{"text":637,"config":638},"Cookie preferences",{"dataGaName":639,"dataGaLocation":577,"id":640,"isOneTrustButton":118},"cookie preferences","ot-sdk-btn",{"title":183,"links":642,"subMenu":651},[643,647],{"text":644,"config":645},"DevSecOps platform",{"href":165,"dataGaName":646,"dataGaLocation":577},"devsecops platform",{"text":648,"config":649},"AI-Assisted Development",{"href":172,"dataGaName":650,"dataGaLocation":577},"ai-assisted development",[652],{"title":653,"links":654},"Topics",[655,660,665,668,673,678,683,688],{"text":656,"config":657},"CICD",{"href":658,"dataGaName":659,"dataGaLocation":577},"/topics/ci-cd/","cicd",{"text":661,"config":662},"GitOps",{"href":663,"dataGaName":664,"dataGaLocation":577},"/topics/gitops/","gitops",{"text":127,"config":666},{"href":18,"dataGaName":667,"dataGaLocation":577},"devops",{"text":669,"config":670},"Version Control",{"href":671,"dataGaName":672,"dataGaLocation":577},"/topics/version-control/","version control",{"text":674,"config":675},"DevSecOps",{"href":676,"dataGaName":677,"dataGaLocation":577},"/topics/devsecops/","devsecops",{"text":679,"config":680},"Cloud Native",{"href":681,"dataGaName":682,"dataGaLocation":577},"/topics/cloud-native/","cloud native",{"text":684,"config":685},"AI for Coding",{"href":686,"dataGaName":687,"dataGaLocation":577},"/topics/devops/ai-for-coding/","ai for coding",{"text":689,"config":690},"Agentic AI",{"href":691,"dataGaName":692,"dataGaLocation":577},"/topics/agentic-ai/","agentic ai",{"title":694,"links":695},"Solutions",[696,698,700,705,709,712,716,719,721,724,727,732],{"text":227,"config":697},{"href":222,"dataGaName":227,"dataGaLocation":577},{"text":216,"config":699},{"href":199,"dataGaName":200,"dataGaLocation":577},{"text":701,"config":702},"Agile development",{"href":703,"dataGaName":704,"dataGaLocation":577},"/solutions/agile-delivery/","agile delivery",{"text":706,"config":707},"SCM",{"href":212,"dataGaName":708,"dataGaLocation":577},"source code management",{"text":656,"config":710},{"href":205,"dataGaName":711,"dataGaLocation":577},"continuous integration & delivery",{"text":713,"config":714},"Value stream management",{"href":255,"dataGaName":715,"dataGaLocation":577},"value stream management",{"text":661,"config":717},{"href":718,"dataGaName":664,"dataGaLocation":577},"/solutions/gitops/",{"text":265,"config":720},{"href":268,"dataGaName":269,"dataGaLocation":577},{"text":722,"config":723},"Small business",{"href":274,"dataGaName":275,"dataGaLocation":577},{"text":725,"config":726},"Public sector",{"href":280,"dataGaName":281,"dataGaLocation":577},{"text":728,"config":729},"Education",{"href":730,"dataGaName":731,"dataGaLocation":577},"/solutions/education/","education",{"text":733,"config":734},"Financial services",{"href":735,"dataGaName":736,"dataGaLocation":577},"/solutions/finance/","financial services",{"title":288,"links":738},[739,741,743,745,748,750,753,755,757,759,761,763,765,767],{"text":301,"config":740},{"href":303,"dataGaName":304,"dataGaLocation":577},{"text":306,"config":742},{"href":308,"dataGaName":309,"dataGaLocation":577},{"text":311,"config":744},{"href":313,"dataGaName":314,"dataGaLocation":577},{"text":316,"config":746},{"href":318,"dataGaName":747,"dataGaLocation":577},"docs",{"text":339,"config":749},{"href":341,"dataGaName":342,"dataGaLocation":577},{"text":751,"config":752},"What's new",{"href":399,"dataGaName":400,"dataGaLocation":577},{"text":334,"config":754},{"href":336,"dataGaName":337,"dataGaLocation":577},{"text":353,"config":756},{"href":355,"dataGaName":356,"dataGaLocation":577},{"text":361,"config":758},{"href":363,"dataGaName":364,"dataGaLocation":577},{"text":366,"config":760},{"href":368,"dataGaName":369,"dataGaLocation":577},{"text":371,"config":762},{"href":373,"dataGaName":374,"dataGaLocation":577},{"text":376,"config":764},{"href":378,"dataGaName":379,"dataGaLocation":577},{"text":381,"config":766},{"href":383,"dataGaName":384,"dataGaLocation":577},{"text":386,"config":768},{"href":388,"dataGaName":389,"dataGaLocation":577},{"title":402,"links":770},[771,773,775,777,779,781,785,790,792,794,796],{"text":410,"config":772},{"href":412,"dataGaName":404,"dataGaLocation":577},{"text":415,"config":774},{"href":417,"dataGaName":418,"dataGaLocation":577},{"text":423,"config":776},{"href":425,"dataGaName":426,"dataGaLocation":577},{"text":428,"config":778},{"href":430,"dataGaName":431,"dataGaLocation":577},{"text":433,"config":780},{"href":435,"dataGaName":436,"dataGaLocation":577},{"text":782,"config":783},"Sustainability",{"href":784,"dataGaName":782,"dataGaLocation":577},"/sustainability/",{"text":786,"config":787},"Diversity, inclusion and belonging (DIB)",{"href":788,"dataGaName":789,"dataGaLocation":577},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":438,"config":791},{"href":440,"dataGaName":441,"dataGaLocation":577},{"text":448,"config":793},{"href":450,"dataGaName":451,"dataGaLocation":577},{"text":453,"config":795},{"href":455,"dataGaName":456,"dataGaLocation":577},{"text":797,"config":798},"Modern Slavery Transparency Statement",{"href":799,"dataGaName":800,"dataGaLocation":577},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":802},[803,806,809],{"text":804,"config":805},"Terms",{"href":629,"dataGaName":630,"dataGaLocation":577},{"text":807,"config":808},"Cookies",{"dataGaName":639,"dataGaLocation":577,"id":640,"isOneTrustButton":118},{"text":810,"config":811},"Privacy",{"href":634,"dataGaName":635,"dataGaLocation":577},[813],{"id":814,"title":7,"body":114,"config":815,"content":817,"description":114,"extension":821,"meta":822,"navigation":118,"path":823,"seo":824,"stem":825,"__hash__":826},"blogAuthors/en-us/blog/authors/steve-ropa.yml",{"template":816},"BlogAuthor",{"name":7,"config":818},{"headshot":819,"ctfId":820},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Steve-Ropa","yml",{},"/en-us/blog/authors/steve-ropa",{},"en-us/blog/authors/steve-ropa","BYT1Q82hy_3Br17EALdNN-Oqr54YmYIm1aHGD8KNFo8",[828,836,844],{"title":829,"description":830,"heroImage":831,"category":110,"date":832,"authors":833,"slug":835,"externalUrl":114},"How we overhauled GitLab navigation","Users weren't getting what they needed from our navigation. Here are the steps we took to turn that experience around.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682884/Blog/Hero%20Images/navigation.jpg","2023-08-15",[834],"Ashley Knobloch","navigation-research-blog-post",{"title":837,"description":838,"heroImage":839,"category":110,"date":840,"authors":841,"slug":843,"externalUrl":114},"Beautifying our UI: Giving GitLab build features a fresh look","Get an inside look at how we are improving the usability of GitLab build features with multiple visual design improvements.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682807/Blog/Hero%20Images/beautify.jpg","2023-07-05",[842],"Veethika Mishra","beautifying-of-our-ui",{"title":845,"description":846,"heroImage":847,"category":110,"date":848,"authors":849,"slug":851,"externalUrl":114},"4 best practices leading orgs to release software faster","GitLab's 2023 Global DevSecOps Survey illuminates the strategies that organizations deploying more frequently have in common.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663908/Blog/Hero%20Images/2023-devsecops-report-blog-banner2.png","2023-06-08",[850],"Kristina Weis","best-practices-leading-orgs-to-release-software-faster",{"promotions":853},[854,868,880,892],{"id":855,"categories":856,"header":858,"text":859,"button":860,"image":865},"ai-modernization",[857],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":861,"config":862},"Get your AI maturity score",{"href":863,"dataGaName":864,"dataGaLocation":342},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":866},{"src":867},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":869,"categories":870,"header":872,"text":859,"button":873,"image":877},"devops-modernization",[871,677],"product","Are you just managing tools or shipping innovation?",{"text":874,"config":875},"Get your DevOps maturity score",{"href":876,"dataGaName":864,"dataGaLocation":342},"/assessments/devops-modernization-assessment/",{"config":878},{"src":879},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":881,"categories":882,"header":884,"text":859,"button":885,"image":889},"security-modernization",[883],"security","Are you trading speed for security?",{"text":886,"config":887},"Get your security maturity score",{"href":888,"dataGaName":864,"dataGaLocation":342},"/assessments/security-modernization-assessment/",{"config":890},{"src":891},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":893,"paths":894,"header":897,"text":898,"button":899,"image":904},"github-azure-migration",[895,896],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":900,"config":901},"See how GitLab compares to GitHub",{"href":902,"dataGaName":903,"dataGaLocation":342},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":905},{"src":879},{"header":907,"blurb":908,"button":909,"secondaryButton":914},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":910,"config":911},"Get your free trial",{"href":912,"dataGaName":141,"dataGaLocation":913},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":615,"config":915},{"href":467,"dataGaName":146,"dataGaLocation":913},1786803755484]