[{"data":1,"prerenderedAt":1081},["ShallowReactive",2],{"/blog/play-reviewer-roulette":3,"navigation-en-us":295,"banner-en-us":722,"footer-en-us":732,"blog-post-authors-en-us-Dennis Tang":976,"blog-related-posts-en-us-play-reviewer-roulette":991,"blog-promotions-en-us":1017,"next-steps-en-us":1071},{"id":4,"title":5,"authors":6,"body":8,"category":273,"date":274,"description":275,"extension":276,"externalUrl":277,"faq":277,"featured":278,"heroImage":279,"meta":280,"navigation":281,"path":282,"seo":283,"slug":288,"stem":289,"tags":290,"template":293,"updatedDate":277,"__hash__":294},"blogPosts/en-us/blog/play-reviewer-roulette.md","Let's play Reviewer Roulette! An easy way to find a reviewer for your merge request",[7],"Dennis Tang",{"type":9,"value":10,"toc":263},"minimark",[11,24,27,32,35,42,45,49,62,68,75,82,92,95,99,105,112,115,123,126,159,170,174,177,196,200,207,222,233,240,244,247,250],[12,13,14,15,19,20,23],"p",{},"GitLab is ",[16,17,18],"span",{},"growing quickly",", and ",[16,21,22],{},"constantly looking for more talented people"," to join the team. While exciting, it can be tough to keep track of who's who, especially when you're new to the company.",[12,25,26],{},"So how do you know who to contact if you need a pair of eyes on your merge request?",[28,29,31],"h2",{"id":30},"meet-reviewer-roulette","Meet Reviewer Roulette!",[12,33,34],{},"Reviewer Roulette is a Slack slash command to help GitLab team-members randomly select a person from a given team, which can be especially useful as multiple teams work together to deliver features in a single merge request.",[12,36,37],{},[38,39],"img",{"alt":40,"src":41},"Demo of /reviewerroulette","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398839/blog/Content%20Images/play-reviewer-roulette/demo.gif",[43,44],"hr",{},[28,46,48],{"id":47},"the-idea","The idea",[12,50,51,52,55,56,61],{},"It's quite common to find that your issue or merge request will have multiple labels to associate different feature areas and teams that are contributing to them. As someone who's recently joined GitLab, I'm still getting to know ",[16,53,54],{},"all the different teams and people"," that work at GitLab. That said, I'm working on a feature with the ",[57,58,60],"a",{"href":59},"/topics/ci-cd/","CI/CD"," or discussion team, who should I reach out to if I have questions or need a review of my work?",[12,63,64],{},[38,65],{"alt":66,"src":67},"Various labels on Merge Requests in gitlab-ce","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398839/blog/Content%20Images/play-reviewer-roulette/labels.png",[12,69,70,71,74],{},"The idea arose from the ",[16,72,73],{},"frontend team weekly call"," where Tim Zallmann reminded us that, \"Everyone on the frontend team is a reviewer.\" The team previously had a microservice built by Luke Bennett for this, however, it's no longer online. Beyond that, wouldn't it be convenient to simply type a command in Slack to be suggested someone to ping for a review?",[12,76,77,78,81],{},"I can say with confidence that GitLab is a company that truly exemplifies its values, and I was empowered by the value of ",[16,79,80],{},"collaboration"," to build something that could help our team (and others!) find reviewers. I couldn't be the only one who had this problem!",[83,84,85],"blockquote",{},[12,86,87,91],{},[88,89,90],"strong",{},"Do it yourself"," Our collaboration value is about helping each other when we have questions, need critique, or need help. No need to brainstorm, wait for consensus, or do with two what you can do yourself.",[12,93,94],{},"I quickly went to work to (hastily) put together a proof-of-concept to see if it would something that people would want to use.",[28,96,98],{"id":97},"decision-fatigue-be-gone","Decision fatigue, be gone!",[12,100,101],{},[38,102],{"alt":103,"src":104},"Screenshot of /reviewerroulette","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398839/blog/Content%20Images/play-reviewer-roulette/screenshot.png",[12,106,107,108,111],{},"It was presented to the frontend team and received warmly, and many people were keen to contribute and also ",[16,109,110],{},"suggest ideas"," that would make it even more useful!",[12,113,114],{},"Although it was originally intended for the frontend group, since I was building it from scratch, it was very easy to make the decision to have it work for all engineering teams.",[12,116,117,118,122],{},"With Reviewer Roulette, I don't have to ping entire Slack channels or guess from our team page to try to find ",[119,120,121],"em",{},"someone"," to talk to.",[12,124,125],{},"Additionally, it provides a number of other benefits such as:",[127,128,129,142,145,156],"ol",{},[130,131,132,133],"li",{},"It promotes a more balanced distribution of reviewers amongst the team.\n",[134,135,136,139],"ul",{},[130,137,138],{},"Less experienced reviewers have more opportunities to do code reviews",[130,140,141],{},"More experienced reviewers are not as heavily relied on",[130,143,144],{},"It allows more team members to learn more about parts of the codebase they may not be as familiar with, increasing the knowledge of the team overall",[130,146,147,148,151,152,155],{},"It provides more opportunities to apply our ",[16,149,150],{},"code review guidelines"," or ",[16,153,154],{},"frontend style guides"," to all team members",[130,157,158],{},"It reduces bias towards reviewers that you may unconsciously prefer to select",[12,160,161,162,165,166,169],{},"Of course, we have our various subject matter experts such as our ",[16,163,164],{},"frontend domain experts"," and ",[16,167,168],{},"gitlab-ce maintainers"," who may provide the best insight for a given topic, but it's good to randomly select reviewers by default!",[28,171,173],{"id":172},"how-its-made","How it's made",[12,175,176],{},"When it came to thinking about how to build Reviewer Roulette, it wasn't so much about the tech, than it being about being enabled to create something that will benefit the team.",[12,178,179,180,183,184,165,188,191,192,195],{},"Embracing our value of ",[16,181,182],{},"efficiency",", the solution is very much a boring one. It's a simple Node.js application utilizing ",[185,186,187],"code",{},"js-yaml",[185,189,190],{},"express"," to be able to search our ",[16,193,194],{},"team structure file"," and respond to Slack's slash command requests properly.",[28,197,199],{"id":198},"whats-next","What's next",[12,201,202,203,206],{},"Reviewer Roulette is seeing regular usage, and has ",[16,204,205],{},"plenty of features planned"," to hopefully increase its usefulness.",[12,208,209,210,213,214,217,218,221],{},"While originally intended for engineering, it can ",[16,211,212],{},"help the entire company"," out. In addition to our ",[16,215,216],{},"Coffee Break calls",", we also have ",[16,219,220],{},"a step in our onboarding process"," to meet five different people across different teams and countries. That's something that Reviewer Roulette could easily help with!",[12,223,224,225,228,229,232],{},"We also plan on moving it to the frontend ",[16,226,227],{},"GKE"," cluster, and activating ",[16,230,231],{},"Auto DevOps"," to make builds and deployments painless.",[12,234,235,236,239],{},"If you're interested in checking it out, feel free to take a look at the ",[16,237,238],{},"project","! Perhaps it might be useful to you and your team?",[28,241,243],{"id":242},"share-your-thoughts","Share your thoughts!",[12,245,246],{},"If there's interest in using Reviewer Roulette for your community contribution to GitLab projects, let us know in the comments and we can release it on Slack for everyone to use!",[12,248,249],{},"What do you think of Reviewer Roulette? Is this something you would use for your team? How do you pick people for reviewing?",[12,251,252,257,258],{},[57,253,256],{"href":254,"rel":255},"https://unsplash.com/photos/w6OniVDCfn0?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Photo"," by Krissia Cruz on ",[57,259,262],{"href":260,"rel":261},"https://unsplash.com/search/photos/roulette?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Unsplash",{"title":264,"searchDepth":265,"depth":265,"links":266},"",2,[267,268,269,270,271,272],{"id":30,"depth":265,"text":31},{"id":47,"depth":265,"text":48},{"id":97,"depth":265,"text":98},{"id":172,"depth":265,"text":173},{"id":198,"depth":265,"text":199},{"id":242,"depth":265,"text":243},"engineering","2018-06-28","Finding the right reviewer for a merge request can be tough. Reviewer Roulette makes the decision easier – by making it random!","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672195/Blog/Hero%20Images/play-reviewer-roulette.jpg",{},true,"/en-us/blog/play-reviewer-roulette",{"title":284,"description":275,"ogTitle":284,"ogDescription":275,"noIndex":278,"ogImage":279,"ogUrl":285,"ogSiteName":286,"ogType":287,"canonicalUrls":285},"Reviewer roulette: Easy way to find merge request reviewers","https://about.gitlab.com/blog/play-reviewer-roulette","https://about.gitlab.com","article","play-reviewer-roulette","en-us/blog/play-reviewer-roulette",[291,80,292],"inside GitLab","frontend","BlogPost","6-aPV_E34TgyH54DJT7MHH0AcQmMWYzLLi7xmfmmh00",{"logo":296,"freeTrial":301,"sales":306,"login":311,"items":316,"search":642,"minimal":673,"duo":692,"switchNav":701,"pricingDeployment":712},{"config":297},{"href":298,"dataGaName":299,"dataGaLocation":300},"/","gitlab logo","header",{"text":302,"config":303},"Get free trial",{"href":304,"dataGaName":305,"dataGaLocation":300},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":307,"config":308},"Request a demo",{"href":309,"dataGaName":310,"dataGaLocation":300},"/sales/?contact-topic=request-demo","sales",{"text":312,"config":313},"Sign in",{"href":314,"dataGaName":315,"dataGaLocation":300},"https://gitlab.com/users/sign_in/","sign in",[317,346,445,450,564,620],{"text":318,"config":319,"menu":321},"Platform",{"dataNavLevelOne":320},"platform",{"type":322,"columns":323},"cards",[324,330,338],{"title":318,"description":325,"link":326},"The intelligent orchestration platform for DevSecOps",{"text":327,"config":328},"Explore our Platform",{"href":329,"dataGaName":320,"dataGaLocation":300},"/platform/",{"title":331,"description":332,"link":333},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":334,"config":335},"Meet GitLab Duo",{"href":336,"dataGaName":337,"dataGaLocation":300},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":339,"description":340,"link":341},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":342,"config":343},"Learn more",{"href":344,"dataGaName":345,"dataGaLocation":300},"/why-gitlab/","why gitlab",{"text":347,"left":281,"config":348,"menu":350},"Product",{"dataNavLevelOne":349},"solutions",{"type":351,"link":352,"columns":356,"feature":424},"lists",{"text":353,"config":354},"View all Solutions",{"href":355,"dataGaName":349,"dataGaLocation":300},"/solutions/",[357,380,403],{"title":358,"description":359,"link":360,"items":365},"Automation","CI/CD and automation to accelerate deployment",{"config":361},{"icon":362,"href":363,"dataGaName":364,"dataGaLocation":300},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[366,369,372,376],{"text":60,"config":367},{"href":368,"dataGaLocation":300,"dataGaName":60},"/solutions/continuous-integration/",{"text":331,"config":370},{"href":336,"dataGaLocation":300,"dataGaName":371},"gitlab duo agent platform - product menu",{"text":373,"config":374},"Source Code Management",{"href":375,"dataGaLocation":300,"dataGaName":373},"/solutions/source-code-management/",{"text":377,"config":378},"Automated Software Delivery",{"href":363,"dataGaLocation":300,"dataGaName":379},"Automated software delivery",{"title":381,"description":382,"link":383,"items":388},"Security","Deliver code faster without compromising security",{"config":384},{"href":385,"dataGaName":386,"dataGaLocation":300,"icon":387},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[389,393,398],{"text":390,"config":391},"Application Security Testing",{"href":385,"dataGaName":392,"dataGaLocation":300},"Application security testing",{"text":394,"config":395},"Software Supply Chain Security",{"href":396,"dataGaLocation":300,"dataGaName":397},"/solutions/supply-chain/","Software supply chain security",{"text":399,"config":400},"Software Compliance",{"href":401,"dataGaName":402,"dataGaLocation":300},"/solutions/software-compliance/","software compliance",{"title":404,"link":405,"items":410},"Measurement",{"config":406},{"icon":407,"href":408,"dataGaName":409,"dataGaLocation":300},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[411,415,419],{"text":412,"config":413},"Visibility & Measurement",{"href":408,"dataGaLocation":300,"dataGaName":414},"Visibility and Measurement",{"text":416,"config":417},"Value Stream Management",{"href":418,"dataGaLocation":300,"dataGaName":416},"/solutions/value-stream-management/",{"text":420,"config":421},"Analytics & Insights",{"href":422,"dataGaLocation":300,"dataGaName":423},"/solutions/analytics-and-insights/","Analytics and insights",{"title":425,"type":351,"items":426},"GitLab for",[427,433,439],{"text":428,"config":429},"Enterprise",{"icon":430,"href":431,"dataGaLocation":300,"dataGaName":432},"Building","/enterprise/","enterprise",{"text":434,"config":435},"Small Business",{"icon":436,"href":437,"dataGaLocation":300,"dataGaName":438},"Work","/small-business/","small business",{"text":440,"config":441},"Public Sector",{"icon":442,"href":443,"dataGaLocation":300,"dataGaName":444},"Organization","/solutions/public-sector/","public sector",{"text":446,"config":447},"Pricing",{"href":448,"dataGaName":449,"dataGaLocation":300,"dataNavLevelOne":449},"/pricing/","pricing",{"text":451,"config":452,"menu":454},"Resources",{"dataNavLevelOne":453},"resources",{"type":351,"link":455,"columns":459,"feature":553},{"text":456,"config":457},"View all resources",{"href":458,"dataGaName":453,"dataGaLocation":300},"/resources/",[460,493,520],{"title":461,"items":462},"Getting started",[463,468,473,478,483,488],{"text":464,"config":465},"Install",{"href":466,"dataGaName":467,"dataGaLocation":300},"/install/","install",{"text":469,"config":470},"Quick start guides",{"href":471,"dataGaName":472,"dataGaLocation":300},"/get-started/","quick setup checklists",{"text":474,"config":475},"Learn",{"href":476,"dataGaLocation":300,"dataGaName":477},"https://university.gitlab.com/","learn",{"text":479,"config":480},"Product documentation",{"href":481,"dataGaName":482,"dataGaLocation":300},"https://docs.gitlab.com/","product documentation",{"text":484,"config":485},"Best practice videos",{"href":486,"dataGaName":487,"dataGaLocation":300},"/getting-started-videos/","best practice videos",{"text":489,"config":490},"Integrations",{"href":491,"dataGaName":492,"dataGaLocation":300},"/integrations/","integrations",{"title":494,"items":495},"Discover",[496,501,506,511,515],{"text":497,"config":498},"Customer success stories",{"href":499,"dataGaName":500,"dataGaLocation":300},"/customers/","customer success stories",{"text":502,"config":503},"Blog",{"href":504,"dataGaName":505,"dataGaLocation":300},"/blog/","blog",{"text":507,"config":508},"Demo Hub",{"href":509,"dataGaName":510,"dataGaLocation":300},"/demo-hub/","demo hub",{"text":512,"config":513},"The Source",{"href":514,"dataGaName":505,"dataGaLocation":300},"/the-source/",{"text":516,"config":517},"Remote",{"href":518,"dataGaName":519,"dataGaLocation":300},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":521,"items":522},"Connect",[523,528,533,538,543,548],{"text":524,"config":525},"GitLab Services",{"href":526,"dataGaName":527,"dataGaLocation":300},"/services/","services",{"text":529,"config":530},"Contribute",{"href":531,"dataGaName":532,"dataGaLocation":300},"https://contributors.gitlab.com","contribute",{"text":534,"config":535},"Community",{"href":536,"dataGaName":537,"dataGaLocation":300},"/community/","community",{"text":539,"config":540},"Forum",{"href":541,"dataGaName":542,"dataGaLocation":300},"https://forum.gitlab.com/","forum",{"text":544,"config":545},"Events",{"href":546,"dataGaName":547,"dataGaLocation":300},"/events/","events",{"text":549,"config":550},"Partners",{"href":551,"dataGaName":552,"dataGaLocation":300},"/partners/","partners",{"config":554,"title":557,"text":558,"link":559},{"background":555,"textColor":556},"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":560,"config":561},"Read the latest",{"href":562,"dataGaName":563,"dataGaLocation":300},"/whats-new/","whats new",{"text":565,"config":566,"menu":568},"Company",{"dataNavLevelOne":567},"company",{"type":351,"columns":569},[570],{"items":571},[572,577,583,585,590,595,600,605,610,615],{"text":573,"config":574},"About",{"href":575,"dataGaName":576,"dataGaLocation":300},"/company/","about",{"text":578,"config":579,"footerGa":582},"Jobs",{"href":580,"dataGaName":581,"dataGaLocation":300},"/jobs/","jobs",{"dataGaName":581},{"text":544,"config":584},{"href":546,"dataGaName":547,"dataGaLocation":300},{"text":586,"config":587},"Leadership",{"href":588,"dataGaName":589,"dataGaLocation":300},"/company/team/e-group/","leadership",{"text":591,"config":592},"Handbook",{"href":593,"dataGaName":594,"dataGaLocation":300},"https://handbook.gitlab.com/","handbook",{"text":596,"config":597},"Investor relations",{"href":598,"dataGaName":599,"dataGaLocation":300},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":601,"config":602},"Trust Center",{"href":603,"dataGaName":604,"dataGaLocation":300},"/security/","trust center",{"text":606,"config":607},"AI Transparency Center",{"href":608,"dataGaName":609,"dataGaLocation":300},"/ai-transparency-center/","ai transparency center",{"text":611,"config":612},"Newsletter",{"href":613,"dataGaName":614,"dataGaLocation":300},"/company/contact/#contact-forms","newsletter",{"text":616,"config":617},"Press",{"href":618,"dataGaName":619,"dataGaLocation":300},"/press/","press",{"text":621,"config":622,"menu":623},"Contact us",{"dataNavLevelOne":567},{"type":351,"columns":624},[625],{"items":626},[627,632,637],{"text":628,"config":629},"Talk to sales",{"href":630,"dataGaName":631,"dataGaLocation":300},"/sales/","talk to sales",{"text":633,"config":634},"Support portal",{"href":635,"dataGaName":636,"dataGaLocation":300},"https://support.gitlab.com/hc/en-us","support portal",{"text":638,"config":639},"Customer portal",{"href":640,"dataGaName":641,"dataGaLocation":300},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":643,"login":644,"suggestions":651},"Close",{"text":645,"link":646},"To search repositories and projects, login to",{"text":647,"config":648},"gitlab.com",{"href":314,"dataGaName":649,"dataGaLocation":650},"search login","search",{"text":652,"default":653},"Suggestions",[654,656,660,662,666,670],{"text":331,"config":655},{"href":336,"dataGaName":331,"dataGaLocation":650},{"text":657,"config":658},"Code Suggestions (AI)",{"href":659,"dataGaName":657,"dataGaLocation":650},"/solutions/code-suggestions/",{"text":60,"config":661},{"href":368,"dataGaName":60,"dataGaLocation":650},{"text":663,"config":664},"GitLab on AWS",{"href":665,"dataGaName":663,"dataGaLocation":650},"/partners/technology-partners/aws/",{"text":667,"config":668},"GitLab on Google Cloud",{"href":669,"dataGaName":667,"dataGaLocation":650},"/partners/technology-partners/google-cloud-platform/",{"text":671,"config":672},"Why GitLab?",{"href":344,"dataGaName":671,"dataGaLocation":650},{"freeTrial":674,"mobileIcon":679,"desktopIcon":684,"secondaryButton":687},{"text":675,"config":676},"Start free trial",{"href":677,"dataGaName":305,"dataGaLocation":678},"https://gitlab.com/-/trials/new/","nav",{"altText":680,"config":681},"Gitlab Icon",{"src":682,"dataGaName":683,"dataGaLocation":678},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":680,"config":685},{"src":686,"dataGaName":683,"dataGaLocation":678},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":688,"config":689},"Get Started",{"href":690,"dataGaName":691,"dataGaLocation":678},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":693,"mobileIcon":697,"desktopIcon":699},{"text":694,"config":695},"Learn more about GitLab Duo",{"href":336,"dataGaName":696,"dataGaLocation":678},"gitlab duo",{"altText":680,"config":698},{"src":682,"dataGaName":683,"dataGaLocation":678},{"altText":680,"config":700},{"src":686,"dataGaName":683,"dataGaLocation":678},{"button":702,"mobileIcon":707,"desktopIcon":709},{"text":703,"config":704},"/switch",{"href":705,"dataGaName":706,"dataGaLocation":678},"#contact","switch",{"altText":680,"config":708},{"src":682,"dataGaName":683,"dataGaLocation":678},{"altText":680,"config":710},{"src":711,"dataGaName":683,"dataGaLocation":678},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":713,"mobileIcon":718,"desktopIcon":720},{"text":714,"config":715},"Back to pricing",{"href":448,"dataGaName":716,"dataGaLocation":678,"icon":717},"back to pricing","GoBack",{"altText":680,"config":719},{"src":682,"dataGaName":683,"dataGaLocation":678},{"altText":680,"config":721},{"src":686,"dataGaName":683,"dataGaLocation":678},{"title":723,"titleMobile":724,"button":725,"config":730},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":342,"config":726},{"href":727,"dataGaName":728,"dataGaLocation":729},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":731,"disabled":278},"release",{"data":733},{"text":734,"source":735,"edit":741,"contribute":746,"config":751,"items":756,"minimal":965},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":736,"config":737},"View page source",{"href":738,"dataGaName":739,"dataGaLocation":740},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":742,"config":743},"Edit this page",{"href":744,"dataGaName":745,"dataGaLocation":740},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":747,"config":748},"Please contribute",{"href":749,"dataGaName":750,"dataGaLocation":740},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":752,"facebook":753,"youtube":754,"linkedin":755},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[757,804,857,901,933],{"title":446,"links":758,"subMenu":773},[759,763,768],{"text":760,"config":761},"View plans",{"href":448,"dataGaName":762,"dataGaLocation":740},"view plans",{"text":764,"config":765},"Why Premium?",{"href":766,"dataGaName":767,"dataGaLocation":740},"/pricing/premium/","why premium",{"text":769,"config":770},"Why Ultimate?",{"href":771,"dataGaName":772,"dataGaLocation":740},"/pricing/ultimate/","why ultimate",[774],{"title":775,"links":776},"Contact Us",[777,780,782,784,789,794,799],{"text":778,"config":779},"Contact sales",{"href":630,"dataGaName":310,"dataGaLocation":740},{"text":633,"config":781},{"href":635,"dataGaName":636,"dataGaLocation":740},{"text":638,"config":783},{"href":640,"dataGaName":641,"dataGaLocation":740},{"text":785,"config":786},"Status",{"href":787,"dataGaName":788,"dataGaLocation":740},"https://status.gitlab.com/","status",{"text":790,"config":791},"Terms of use",{"href":792,"dataGaName":793,"dataGaLocation":740},"/terms/","terms of use",{"text":795,"config":796},"Privacy statement",{"href":797,"dataGaName":798,"dataGaLocation":740},"/privacy/","privacy statement",{"text":800,"config":801},"Cookie preferences",{"dataGaName":802,"dataGaLocation":740,"id":803,"isOneTrustButton":281},"cookie preferences","ot-sdk-btn",{"title":347,"links":805,"subMenu":814},[806,810],{"text":807,"config":808},"DevSecOps platform",{"href":329,"dataGaName":809,"dataGaLocation":740},"devsecops platform",{"text":811,"config":812},"AI-Assisted Development",{"href":336,"dataGaName":813,"dataGaLocation":740},"ai-assisted development",[815],{"title":816,"links":817},"Topics",[818,822,827,832,837,842,847,852],{"text":819,"config":820},"CICD",{"href":59,"dataGaName":821,"dataGaLocation":740},"cicd",{"text":823,"config":824},"GitOps",{"href":825,"dataGaName":826,"dataGaLocation":740},"/topics/gitops/","gitops",{"text":828,"config":829},"DevOps",{"href":830,"dataGaName":831,"dataGaLocation":740},"/topics/devops/","devops",{"text":833,"config":834},"Version Control",{"href":835,"dataGaName":836,"dataGaLocation":740},"/topics/version-control/","version control",{"text":838,"config":839},"DevSecOps",{"href":840,"dataGaName":841,"dataGaLocation":740},"/topics/devsecops/","devsecops",{"text":843,"config":844},"Cloud Native",{"href":845,"dataGaName":846,"dataGaLocation":740},"/topics/cloud-native/","cloud native",{"text":848,"config":849},"AI for Coding",{"href":850,"dataGaName":851,"dataGaLocation":740},"/topics/devops/ai-for-coding/","ai for coding",{"text":853,"config":854},"Agentic AI",{"href":855,"dataGaName":856,"dataGaLocation":740},"/topics/agentic-ai/","agentic ai",{"title":858,"links":859},"Solutions",[860,862,864,869,873,876,880,883,885,888,891,896],{"text":390,"config":861},{"href":385,"dataGaName":390,"dataGaLocation":740},{"text":379,"config":863},{"href":363,"dataGaName":364,"dataGaLocation":740},{"text":865,"config":866},"Agile development",{"href":867,"dataGaName":868,"dataGaLocation":740},"/solutions/agile-delivery/","agile delivery",{"text":870,"config":871},"SCM",{"href":375,"dataGaName":872,"dataGaLocation":740},"source code management",{"text":819,"config":874},{"href":368,"dataGaName":875,"dataGaLocation":740},"continuous integration & delivery",{"text":877,"config":878},"Value stream management",{"href":418,"dataGaName":879,"dataGaLocation":740},"value stream management",{"text":823,"config":881},{"href":882,"dataGaName":826,"dataGaLocation":740},"/solutions/gitops/",{"text":428,"config":884},{"href":431,"dataGaName":432,"dataGaLocation":740},{"text":886,"config":887},"Small business",{"href":437,"dataGaName":438,"dataGaLocation":740},{"text":889,"config":890},"Public sector",{"href":443,"dataGaName":444,"dataGaLocation":740},{"text":892,"config":893},"Education",{"href":894,"dataGaName":895,"dataGaLocation":740},"/solutions/education/","education",{"text":897,"config":898},"Financial services",{"href":899,"dataGaName":900,"dataGaLocation":740},"/solutions/finance/","financial services",{"title":451,"links":902},[903,905,907,909,912,914,917,919,921,923,925,927,929,931],{"text":464,"config":904},{"href":466,"dataGaName":467,"dataGaLocation":740},{"text":469,"config":906},{"href":471,"dataGaName":472,"dataGaLocation":740},{"text":474,"config":908},{"href":476,"dataGaName":477,"dataGaLocation":740},{"text":479,"config":910},{"href":481,"dataGaName":911,"dataGaLocation":740},"docs",{"text":502,"config":913},{"href":504,"dataGaName":505,"dataGaLocation":740},{"text":915,"config":916},"What's new",{"href":562,"dataGaName":563,"dataGaLocation":740},{"text":497,"config":918},{"href":499,"dataGaName":500,"dataGaLocation":740},{"text":516,"config":920},{"href":518,"dataGaName":519,"dataGaLocation":740},{"text":524,"config":922},{"href":526,"dataGaName":527,"dataGaLocation":740},{"text":529,"config":924},{"href":531,"dataGaName":532,"dataGaLocation":740},{"text":534,"config":926},{"href":536,"dataGaName":537,"dataGaLocation":740},{"text":539,"config":928},{"href":541,"dataGaName":542,"dataGaLocation":740},{"text":544,"config":930},{"href":546,"dataGaName":547,"dataGaLocation":740},{"text":549,"config":932},{"href":551,"dataGaName":552,"dataGaLocation":740},{"title":565,"links":934},[935,937,939,941,943,945,949,954,956,958,960],{"text":573,"config":936},{"href":575,"dataGaName":567,"dataGaLocation":740},{"text":578,"config":938},{"href":580,"dataGaName":581,"dataGaLocation":740},{"text":586,"config":940},{"href":588,"dataGaName":589,"dataGaLocation":740},{"text":591,"config":942},{"href":593,"dataGaName":594,"dataGaLocation":740},{"text":596,"config":944},{"href":598,"dataGaName":599,"dataGaLocation":740},{"text":946,"config":947},"Sustainability",{"href":948,"dataGaName":946,"dataGaLocation":740},"/sustainability/",{"text":950,"config":951},"Diversity, inclusion and belonging (DIB)",{"href":952,"dataGaName":953,"dataGaLocation":740},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":601,"config":955},{"href":603,"dataGaName":604,"dataGaLocation":740},{"text":611,"config":957},{"href":613,"dataGaName":614,"dataGaLocation":740},{"text":616,"config":959},{"href":618,"dataGaName":619,"dataGaLocation":740},{"text":961,"config":962},"Modern Slavery Transparency Statement",{"href":963,"dataGaName":964,"dataGaLocation":740},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":966},[967,970,973],{"text":968,"config":969},"Terms",{"href":792,"dataGaName":793,"dataGaLocation":740},{"text":971,"config":972},"Cookies",{"dataGaName":802,"dataGaLocation":740,"id":803,"isOneTrustButton":281},{"text":974,"config":975},"Privacy",{"href":797,"dataGaName":798,"dataGaLocation":740},[977],{"id":978,"title":7,"body":277,"config":979,"content":981,"description":277,"extension":985,"meta":986,"navigation":281,"path":987,"seo":988,"stem":989,"__hash__":990},"blogAuthors/en-us/blog/authors/dennis-tang.yml",{"template":980},"BlogAuthor",{"name":7,"config":982},{"headshot":983,"ctfId":984},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672189/Blog/Author%20Headshots/dennis-headshot.jpg","dennis","yml",{},"/en-us/blog/authors/dennis-tang",{},"en-us/blog/authors/dennis-tang","_Sgo2u9oMf9kWRbJxuZYPbpIFuG_3XrkNMHfynjJIoc",[992,1001,1009],{"title":993,"description":994,"heroImage":995,"category":273,"date":996,"authors":997,"slug":1000,"externalUrl":277},"Confidential AI for GitLab Self-Hosted","Give developers AI coding agents in GitLab Duo without source code leaving a hardware-encrypted boundary — no GPUs needed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[998,999],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1002,"description":1003,"heroImage":1004,"category":273,"date":1005,"authors":1006,"slug":1008,"externalUrl":277},"Green DevOps: Why carbon measurement belongs in your CI/CD pipeline","CI/CD pipelines have a hidden carbon cost. Here's why measuring it matters, and how you can get started with Eco CI and Carmen in GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[1007],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1010,"description":1011,"heroImage":1012,"category":273,"date":1013,"authors":1014,"slug":1016,"externalUrl":277},"How to build CI/CD observability at scale","This practical guide to GitLab pipeline analytics helps self-managed users gain operational insights using Prometheus and Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-04-28",[1015],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1018},[1019,1033,1045,1057],{"id":1020,"categories":1021,"header":1023,"text":1024,"button":1025,"image":1030},"ai-modernization",[1022],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1026,"config":1027},"Get your AI maturity score",{"href":1028,"dataGaName":1029,"dataGaLocation":505},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1031},{"src":1032},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1034,"categories":1035,"header":1037,"text":1024,"button":1038,"image":1042},"devops-modernization",[1036,841],"product","Are you just managing tools or shipping innovation?",{"text":1039,"config":1040},"Get your DevOps maturity score",{"href":1041,"dataGaName":1029,"dataGaLocation":505},"/assessments/devops-modernization-assessment/",{"config":1043},{"src":1044},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1046,"categories":1047,"header":1049,"text":1024,"button":1050,"image":1054},"security-modernization",[1048],"security","Are you trading speed for security?",{"text":1051,"config":1052},"Get your security maturity score",{"href":1053,"dataGaName":1029,"dataGaLocation":505},"/assessments/security-modernization-assessment/",{"config":1055},{"src":1056},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1058,"paths":1059,"header":1062,"text":1063,"button":1064,"image":1069},"github-azure-migration",[1060,1061],"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":1065,"config":1066},"See how GitLab compares to GitHub",{"href":1067,"dataGaName":1068,"dataGaLocation":505},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1070},{"src":1044},{"header":1072,"blurb":1073,"button":1074,"secondaryButton":1079},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1075,"config":1076},"Get your free trial",{"href":1077,"dataGaName":305,"dataGaLocation":1078},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":778,"config":1080},{"href":630,"dataGaName":310,"dataGaLocation":1078},1786803753866]