[{"data":1,"prerenderedAt":1037},["ShallowReactive",2],{"/blog/how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too":3,"navigation-en-us":251,"banner-en-us":678,"footer-en-us":688,"blog-post-authors-en-us-William Arias":932,"blog-related-posts-en-us-how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too":947,"blog-promotions-en-us":973,"next-steps-en-us":1027},{"id":4,"title":5,"authors":6,"body":8,"category":228,"date":229,"description":230,"extension":231,"externalUrl":232,"faq":232,"featured":233,"heroImage":234,"meta":235,"navigation":236,"path":237,"seo":238,"slug":243,"stem":244,"tags":245,"template":249,"updatedDate":232,"__hash__":250},"blogPosts/en-us/blog/how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too.md","How we built a Stack Overflow Community questions analyzer (and you can too)",[7],"William Arias",{"type":9,"value":10,"toc":221},"minimark",[11,22,27,30,37,40,69,74,80,110,116,125,134,139,143,152,156,159,164,176,179,184,187,192,195,204,207],[12,13,14,15,21],"p",{},"Being part of the GitLab collective is an opportunity to learn first hand about the challenges the community using the DevOps Platform is facing. As a ",[16,17,20],"a",{"href":18,"rel":19},"https://stackoverflow.com/collectives/gitlab",[],"Collective Member"," logging between 2-3 times a week in StackOverflow  reading the questions and discussion posted about GitLab and manually sorting them by 'Recent Activity', 'Trending' and using Dates, I asked myself:  how can we leverage this  wealth of data and discover feedback, while finding  the most frequent topics where the community has questions?\nThis would be an opportunity to get a quick overview of topics where the community regularly needs help; this would also make it easier for us to create relevant content for them.  Manually sorting and extracting the text of each question wouldn’t be sustainable, so creating an automated way would be the most efficient way to proceed.",[23,24,26],"h2",{"id":25},"experimenting-with-data-oriented-content-creation","Experimenting with data-oriented content creation",[12,28,29],{},"Finding out what the community is working on, and what they need help with while using GitLab, can help us to create better educational content that could expand their understanding of GitLab. To achieve this goal, the solution I created  after a few iterations is depicted below:",[12,31,32],{},[33,34],"img",{"alt":35,"src":36},"Alt text for your image","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398282/blog/Content%20Images/fontes.png",[12,38,39],{},"Where the Bill Of Materials consists mainly of:",[41,42,43,47,50,53,56,59,62],"ul",{},[44,45,46],"li",{},"GitLab DevOps Platform",[44,48,49],{},"Stackoverflow API",[44,51,52],{},"Kubernetes Cluster",[44,54,55],{},"Open Source Python libraries:",[44,57,58],{},"scikit-learn (TF-IDF)",[44,60,61],{},"Streamlit (front-end)",[44,63,64,65,68],{},"Spacy",[66,67],"br",{},"\nI leveraged the GitLab DevOps Platform to organize the projects using groups:",[12,70,71],{},[33,72],{"alt":35,"src":73},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398780/blog/Content%20Images/organize.png",[12,75,76,77],{},"The Loader project pulls questions about GitLab from the StackOverflow API, pre-processes the text and makes it usable for a second project: a Visualizer to create customized dashboards.\nThe automated process executed using the DevOps Platform is outlined below:\n",[33,78],{"alt":35,"src":79},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397976/blog/Content%20Images/automatedprocess.png",[41,81,82,90,93,96,99,107],{},[44,83,84,85],{},"Pull data from ",[16,86,89],{"href":87,"rel":88},"https://api.stackexchange.com/docs",[],"StackOverflow API",[44,91,92],{},"Preprocess the response extracting relevant fields from returned JSON",[44,94,95],{},"Build a corpus and calculate TF-IDF",[44,97,98],{},"Scan for security vulnerabilities",[44,100,101,102],{},"Review Application and display its resulting dashboards using ",[16,103,106],{"href":104,"rel":105},"https://streamlit.io/",[],"Streamlit",[44,108,109],{},"Deploy the built application to a Kubernetes cluster",[12,111,112,113],{},"Loader and Visualizer projects have their own codebase and pipelines, which is helpful if different teams need to work separately on them. However, one project can require the other, which raises the need for  cross-project  automation.\n",[33,114],{"alt":35,"src":115},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398839/blog/Content%20Images/pipeline.png",[12,117,118,119,124],{},"This scenario means a ",[16,120,123],{"href":121,"rel":122},"https://docs.gitlab.com/ci/pipelines/downstream_pipelines/",[],"multi-project pipeline"," is useful to automate the whole process. The multi-project pipeline enables use cases such as:",[41,126,127],{},[44,128,129,130,133],{},"As an NLP Developer I want to work on the NLP Pipeline in the Loader Project and automatically trigger the creation of a new visualization - As a Streamlit Developer I want to work independently in the buttons and data visualization without touching any NLP Pipeline backend\nThe outlined process above is automatically run defining the steps in a ",[16,131,123],{"href":121,"rel":132},[]," sharing artifact:",[12,135,136],{},[33,137],{"alt":35,"src":138},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398144/blog/Content%20Images/demo1-gif.gif",[23,140,142],{"id":141},"finding-the-most-frequently-occurring-words","Finding the most frequently occurring words",[12,144,145,146,151],{},"The Feature Engineering step will help me to analyze the text in the whole dataset of GitLab questions. Using a simple yet powerful technique – TF-IDF – we aim to find the most relevant terms utilized by the community. By using this technique in the pipeline execution,  I represent words in numerical values and later rank them in order of importance.  This approach serves as a baseline for further improvements. More detail about this algorithm can be found ",[16,147,150],{"href":148,"rel":149},"https://en.wikipedia.org/wiki/Tf%E2%80%93idf",[],"here",".",[23,153,155],{"id":154},"did-we-achieve-any-success","Did we achieve any success?",[12,157,158],{},"One run of the multi-pipeline in our solution results in dashboards such as this one:",[12,160,161],{},[33,162],{"alt":35,"src":163},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398145/blog/Content%20Images/demo2-gif.gif",[12,165,166,167,172,173],{},"As an end-user of these dashboards I can immediately conclude that the main source of questions are around GitLab CI, pipelines and usage of Docker images. Not bad for a first run!  Having the data processed enables us to ask more questions and use data to answer it, such as, what are the questions from the highest ",[16,168,171],{"href":169,"rel":170},"https://stackoverflow.com/help/whats-reputation",[],"StackOverflow reputation"," users ?\n",[33,174],{"alt":35,"src":175},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398896/blog/Content%20Images/questions.png",[12,177,178],{},"Could these questions be inspiration for tutorials for the most advanced users, or the implementation of a new feature?\nBecause everyone can contribute, let's take a look at the users who just started gaining their StackOverflow reputation:",[12,180,181],{},[33,182],{"alt":35,"src":183},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398128/blog/Content%20Images/contributors.png",[12,185,186],{},"The question about access and reading/writing permissions in Portuguese is interesting. It makes me wonder about content localization and GitLab meetups in Portuguese-speaking countries. Not surprisingly, there were also \tquestions about GitLab CI too as the text processing and ranking found most relevant in the corpus.\nDid we achieve any success? Yes, using a baseline technique such as TF-IDF sped up by  DevOps practices allowed us  to find out relevant terms and help us to understand where the majority of the community needs help in their DevOps journey. I have automated many steps that will allow me to focus on data exploration and possible implementation of more complex NLP Techniques rather than infrastructure allocation or manual input of commands and tests.",[12,188,189],{},[33,190],{"alt":35,"src":191},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398143/blog/Content%20Images/demo-reduced.gif",[12,193,194],{},"As a Technical Marketing Manager, I want to create content that is relevant to enable or inspire the  community to succeed.\nA personal take away: Educating about the latest GitLab DevOps platform capabilities and the problems they solve  is important and so is keeping an eye on the content that might not be related to a new feature but is needed right now.",[12,196,197,198,203],{},"Are we done? No, quoting Da Vinci's altered quote about ",[16,199,202],{"href":200,"rel":201},"https://www.artshub.com.au/news/features/art-is-never-finished-only-abandoned-262096-2370305/#:~:text=Lottie%20Consalvo%20in%20her%20studio,writers%2C%20and%20creatives%20would%20recognise",[],"Art"," but with software: \"Software is never finished, only abandoned.\"",[12,205,206],{},"There is room for improvement and adding capabilities to this project. We continue iterating, listening to the community, and we encourage you to clone these projects, try it yourself, and adjust it with the topics that make sense to you. Create a merge request to improve the codebase and suggest new dashboards ideas!",[12,208,209,210,215,216,151],{},"Explore the ",[16,211,214],{"href":212,"rel":213},"https://gitlab.com/tech-marketing/ad-fontes",[],"group of projects"," and take a look at the ",[16,217,220],{"href":218,"rel":219},"https://bit.ly/3jeTFQp",[],"dashboard",{"title":222,"searchDepth":223,"depth":223,"links":224},"",2,[225,226,227],{"id":25,"depth":223,"text":26},{"id":141,"depth":223,"text":142},{"id":154,"depth":223,"text":155},"engineering","2022-04-28","We wanted to better understand what Stack Overflow GitLab Community members wanted to know, so we automated a way to keep track of it all. Here's a step-by-step look at how we did it.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667552/Blog/Hero%20Images/gitlabonstackoverflow.png",{},true,"/en-us/blog/how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too",{"title":239,"description":230,"ogTitle":239,"ogDescription":230,"noIndex":233,"ogImage":234,"ogUrl":240,"ogSiteName":241,"ogType":242,"canonicalUrls":240},"How We Built a Stack Overflow Community Questions Analyzer","https://about.gitlab.com/blog/how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too","https://about.gitlab.com","article","how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too","en-us/blog/how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too",[246,247,248],"DevOps","community","contributors","BlogPost","A8A4eYMi2DDmG8McGpYU-P_AWfRhH4ISwYD0F1uQAYU",{"logo":252,"freeTrial":257,"sales":262,"login":267,"items":272,"search":598,"minimal":629,"duo":648,"switchNav":657,"pricingDeployment":668},{"config":253},{"href":254,"dataGaName":255,"dataGaLocation":256},"/","gitlab logo","header",{"text":258,"config":259},"Get free trial",{"href":260,"dataGaName":261,"dataGaLocation":256},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":263,"config":264},"Request a demo",{"href":265,"dataGaName":266,"dataGaLocation":256},"/sales/?contact-topic=request-demo","sales",{"text":268,"config":269},"Sign in",{"href":270,"dataGaName":271,"dataGaLocation":256},"https://gitlab.com/users/sign_in/","sign in",[273,302,402,407,520,576],{"text":274,"config":275,"menu":277},"Platform",{"dataNavLevelOne":276},"platform",{"type":278,"columns":279},"cards",[280,286,294],{"title":274,"description":281,"link":282},"The intelligent orchestration platform for DevSecOps",{"text":283,"config":284},"Explore our Platform",{"href":285,"dataGaName":276,"dataGaLocation":256},"/platform/",{"title":287,"description":288,"link":289},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":290,"config":291},"Meet GitLab Duo",{"href":292,"dataGaName":293,"dataGaLocation":256},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":295,"description":296,"link":297},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":298,"config":299},"Learn more",{"href":300,"dataGaName":301,"dataGaLocation":256},"/why-gitlab/","why gitlab",{"text":303,"left":236,"config":304,"menu":306},"Product",{"dataNavLevelOne":305},"solutions",{"type":307,"link":308,"columns":312,"feature":381},"lists",{"text":309,"config":310},"View all Solutions",{"href":311,"dataGaName":305,"dataGaLocation":256},"/solutions/",[313,337,360],{"title":314,"description":315,"link":316,"items":321},"Automation","CI/CD and automation to accelerate deployment",{"config":317},{"icon":318,"href":319,"dataGaName":320,"dataGaLocation":256},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[322,326,329,333],{"text":323,"config":324},"CI/CD",{"href":325,"dataGaLocation":256,"dataGaName":323},"/solutions/continuous-integration/",{"text":287,"config":327},{"href":292,"dataGaLocation":256,"dataGaName":328},"gitlab duo agent platform - product menu",{"text":330,"config":331},"Source Code Management",{"href":332,"dataGaLocation":256,"dataGaName":330},"/solutions/source-code-management/",{"text":334,"config":335},"Automated Software Delivery",{"href":319,"dataGaLocation":256,"dataGaName":336},"Automated software delivery",{"title":338,"description":339,"link":340,"items":345},"Security","Deliver code faster without compromising security",{"config":341},{"href":342,"dataGaName":343,"dataGaLocation":256,"icon":344},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[346,350,355],{"text":347,"config":348},"Application Security Testing",{"href":342,"dataGaName":349,"dataGaLocation":256},"Application security testing",{"text":351,"config":352},"Software Supply Chain Security",{"href":353,"dataGaLocation":256,"dataGaName":354},"/solutions/supply-chain/","Software supply chain security",{"text":356,"config":357},"Software Compliance",{"href":358,"dataGaName":359,"dataGaLocation":256},"/solutions/software-compliance/","software compliance",{"title":361,"link":362,"items":367},"Measurement",{"config":363},{"icon":364,"href":365,"dataGaName":366,"dataGaLocation":256},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[368,372,376],{"text":369,"config":370},"Visibility & Measurement",{"href":365,"dataGaLocation":256,"dataGaName":371},"Visibility and Measurement",{"text":373,"config":374},"Value Stream Management",{"href":375,"dataGaLocation":256,"dataGaName":373},"/solutions/value-stream-management/",{"text":377,"config":378},"Analytics & Insights",{"href":379,"dataGaLocation":256,"dataGaName":380},"/solutions/analytics-and-insights/","Analytics and insights",{"title":382,"type":307,"items":383},"GitLab for",[384,390,396],{"text":385,"config":386},"Enterprise",{"icon":387,"href":388,"dataGaLocation":256,"dataGaName":389},"Building","/enterprise/","enterprise",{"text":391,"config":392},"Small Business",{"icon":393,"href":394,"dataGaLocation":256,"dataGaName":395},"Work","/small-business/","small business",{"text":397,"config":398},"Public Sector",{"icon":399,"href":400,"dataGaLocation":256,"dataGaName":401},"Organization","/solutions/public-sector/","public sector",{"text":403,"config":404},"Pricing",{"href":405,"dataGaName":406,"dataGaLocation":256,"dataNavLevelOne":406},"/pricing/","pricing",{"text":408,"config":409,"menu":411},"Resources",{"dataNavLevelOne":410},"resources",{"type":307,"link":412,"columns":416,"feature":509},{"text":413,"config":414},"View all resources",{"href":415,"dataGaName":410,"dataGaLocation":256},"/resources/",[417,450,477],{"title":418,"items":419},"Getting started",[420,425,430,435,440,445],{"text":421,"config":422},"Install",{"href":423,"dataGaName":424,"dataGaLocation":256},"/install/","install",{"text":426,"config":427},"Quick start guides",{"href":428,"dataGaName":429,"dataGaLocation":256},"/get-started/","quick setup checklists",{"text":431,"config":432},"Learn",{"href":433,"dataGaLocation":256,"dataGaName":434},"https://university.gitlab.com/","learn",{"text":436,"config":437},"Product documentation",{"href":438,"dataGaName":439,"dataGaLocation":256},"https://docs.gitlab.com/","product documentation",{"text":441,"config":442},"Best practice videos",{"href":443,"dataGaName":444,"dataGaLocation":256},"/getting-started-videos/","best practice videos",{"text":446,"config":447},"Integrations",{"href":448,"dataGaName":449,"dataGaLocation":256},"/integrations/","integrations",{"title":451,"items":452},"Discover",[453,458,463,468,472],{"text":454,"config":455},"Customer success stories",{"href":456,"dataGaName":457,"dataGaLocation":256},"/customers/","customer success stories",{"text":459,"config":460},"Blog",{"href":461,"dataGaName":462,"dataGaLocation":256},"/blog/","blog",{"text":464,"config":465},"Demo Hub",{"href":466,"dataGaName":467,"dataGaLocation":256},"/demo-hub/","demo hub",{"text":469,"config":470},"The Source",{"href":471,"dataGaName":462,"dataGaLocation":256},"/the-source/",{"text":473,"config":474},"Remote",{"href":475,"dataGaName":476,"dataGaLocation":256},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":478,"items":479},"Connect",[480,485,490,494,499,504],{"text":481,"config":482},"GitLab Services",{"href":483,"dataGaName":484,"dataGaLocation":256},"/services/","services",{"text":486,"config":487},"Contribute",{"href":488,"dataGaName":489,"dataGaLocation":256},"https://contributors.gitlab.com","contribute",{"text":491,"config":492},"Community",{"href":493,"dataGaName":247,"dataGaLocation":256},"/community/",{"text":495,"config":496},"Forum",{"href":497,"dataGaName":498,"dataGaLocation":256},"https://forum.gitlab.com/","forum",{"text":500,"config":501},"Events",{"href":502,"dataGaName":503,"dataGaLocation":256},"/events/","events",{"text":505,"config":506},"Partners",{"href":507,"dataGaName":508,"dataGaLocation":256},"/partners/","partners",{"config":510,"title":513,"text":514,"link":515},{"background":511,"textColor":512},"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":516,"config":517},"Read the latest",{"href":518,"dataGaName":519,"dataGaLocation":256},"/whats-new/","whats new",{"text":521,"config":522,"menu":524},"Company",{"dataNavLevelOne":523},"company",{"type":307,"columns":525},[526],{"items":527},[528,533,539,541,546,551,556,561,566,571],{"text":529,"config":530},"About",{"href":531,"dataGaName":532,"dataGaLocation":256},"/company/","about",{"text":534,"config":535,"footerGa":538},"Jobs",{"href":536,"dataGaName":537,"dataGaLocation":256},"/jobs/","jobs",{"dataGaName":537},{"text":500,"config":540},{"href":502,"dataGaName":503,"dataGaLocation":256},{"text":542,"config":543},"Leadership",{"href":544,"dataGaName":545,"dataGaLocation":256},"/company/team/e-group/","leadership",{"text":547,"config":548},"Handbook",{"href":549,"dataGaName":550,"dataGaLocation":256},"https://handbook.gitlab.com/","handbook",{"text":552,"config":553},"Investor relations",{"href":554,"dataGaName":555,"dataGaLocation":256},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":557,"config":558},"Trust Center",{"href":559,"dataGaName":560,"dataGaLocation":256},"/security/","trust center",{"text":562,"config":563},"AI Transparency Center",{"href":564,"dataGaName":565,"dataGaLocation":256},"/ai-transparency-center/","ai transparency center",{"text":567,"config":568},"Newsletter",{"href":569,"dataGaName":570,"dataGaLocation":256},"/company/contact/#contact-forms","newsletter",{"text":572,"config":573},"Press",{"href":574,"dataGaName":575,"dataGaLocation":256},"/press/","press",{"text":577,"config":578,"menu":579},"Contact us",{"dataNavLevelOne":523},{"type":307,"columns":580},[581],{"items":582},[583,588,593],{"text":584,"config":585},"Talk to sales",{"href":586,"dataGaName":587,"dataGaLocation":256},"/sales/","talk to sales",{"text":589,"config":590},"Support portal",{"href":591,"dataGaName":592,"dataGaLocation":256},"https://support.gitlab.com/hc/en-us","support portal",{"text":594,"config":595},"Customer portal",{"href":596,"dataGaName":597,"dataGaLocation":256},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":599,"login":600,"suggestions":607},"Close",{"text":601,"link":602},"To search repositories and projects, login to",{"text":603,"config":604},"gitlab.com",{"href":270,"dataGaName":605,"dataGaLocation":606},"search login","search",{"text":608,"default":609},"Suggestions",[610,612,616,618,622,626],{"text":287,"config":611},{"href":292,"dataGaName":287,"dataGaLocation":606},{"text":613,"config":614},"Code Suggestions (AI)",{"href":615,"dataGaName":613,"dataGaLocation":606},"/solutions/code-suggestions/",{"text":323,"config":617},{"href":325,"dataGaName":323,"dataGaLocation":606},{"text":619,"config":620},"GitLab on AWS",{"href":621,"dataGaName":619,"dataGaLocation":606},"/partners/technology-partners/aws/",{"text":623,"config":624},"GitLab on Google Cloud",{"href":625,"dataGaName":623,"dataGaLocation":606},"/partners/technology-partners/google-cloud-platform/",{"text":627,"config":628},"Why GitLab?",{"href":300,"dataGaName":627,"dataGaLocation":606},{"freeTrial":630,"mobileIcon":635,"desktopIcon":640,"secondaryButton":643},{"text":631,"config":632},"Start free trial",{"href":633,"dataGaName":261,"dataGaLocation":634},"https://gitlab.com/-/trials/new/","nav",{"altText":636,"config":637},"Gitlab Icon",{"src":638,"dataGaName":639,"dataGaLocation":634},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":636,"config":641},{"src":642,"dataGaName":639,"dataGaLocation":634},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":644,"config":645},"Get Started",{"href":646,"dataGaName":647,"dataGaLocation":634},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":649,"mobileIcon":653,"desktopIcon":655},{"text":650,"config":651},"Learn more about GitLab Duo",{"href":292,"dataGaName":652,"dataGaLocation":634},"gitlab duo",{"altText":636,"config":654},{"src":638,"dataGaName":639,"dataGaLocation":634},{"altText":636,"config":656},{"src":642,"dataGaName":639,"dataGaLocation":634},{"button":658,"mobileIcon":663,"desktopIcon":665},{"text":659,"config":660},"/switch",{"href":661,"dataGaName":662,"dataGaLocation":634},"#contact","switch",{"altText":636,"config":664},{"src":638,"dataGaName":639,"dataGaLocation":634},{"altText":636,"config":666},{"src":667,"dataGaName":639,"dataGaLocation":634},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":669,"mobileIcon":674,"desktopIcon":676},{"text":670,"config":671},"Back to pricing",{"href":405,"dataGaName":672,"dataGaLocation":634,"icon":673},"back to pricing","GoBack",{"altText":636,"config":675},{"src":638,"dataGaName":639,"dataGaLocation":634},{"altText":636,"config":677},{"src":642,"dataGaName":639,"dataGaLocation":634},{"title":679,"titleMobile":680,"button":681,"config":686},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":298,"config":682},{"href":683,"dataGaName":684,"dataGaLocation":685},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":687,"disabled":233},"release",{"data":689},{"text":690,"source":691,"edit":697,"contribute":702,"config":707,"items":712,"minimal":921},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":692,"config":693},"View page source",{"href":694,"dataGaName":695,"dataGaLocation":696},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":698,"config":699},"Edit this page",{"href":700,"dataGaName":701,"dataGaLocation":696},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":703,"config":704},"Please contribute",{"href":705,"dataGaName":706,"dataGaLocation":696},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":708,"facebook":709,"youtube":710,"linkedin":711},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[713,760,813,857,889],{"title":403,"links":714,"subMenu":729},[715,719,724],{"text":716,"config":717},"View plans",{"href":405,"dataGaName":718,"dataGaLocation":696},"view plans",{"text":720,"config":721},"Why Premium?",{"href":722,"dataGaName":723,"dataGaLocation":696},"/pricing/premium/","why premium",{"text":725,"config":726},"Why Ultimate?",{"href":727,"dataGaName":728,"dataGaLocation":696},"/pricing/ultimate/","why ultimate",[730],{"title":731,"links":732},"Contact Us",[733,736,738,740,745,750,755],{"text":734,"config":735},"Contact sales",{"href":586,"dataGaName":266,"dataGaLocation":696},{"text":589,"config":737},{"href":591,"dataGaName":592,"dataGaLocation":696},{"text":594,"config":739},{"href":596,"dataGaName":597,"dataGaLocation":696},{"text":741,"config":742},"Status",{"href":743,"dataGaName":744,"dataGaLocation":696},"https://status.gitlab.com/","status",{"text":746,"config":747},"Terms of use",{"href":748,"dataGaName":749,"dataGaLocation":696},"/terms/","terms of use",{"text":751,"config":752},"Privacy statement",{"href":753,"dataGaName":754,"dataGaLocation":696},"/privacy/","privacy statement",{"text":756,"config":757},"Cookie preferences",{"dataGaName":758,"dataGaLocation":696,"id":759,"isOneTrustButton":236},"cookie preferences","ot-sdk-btn",{"title":303,"links":761,"subMenu":770},[762,766],{"text":763,"config":764},"DevSecOps platform",{"href":285,"dataGaName":765,"dataGaLocation":696},"devsecops platform",{"text":767,"config":768},"AI-Assisted Development",{"href":292,"dataGaName":769,"dataGaLocation":696},"ai-assisted development",[771],{"title":772,"links":773},"Topics",[774,779,784,788,793,798,803,808],{"text":775,"config":776},"CICD",{"href":777,"dataGaName":778,"dataGaLocation":696},"/topics/ci-cd/","cicd",{"text":780,"config":781},"GitOps",{"href":782,"dataGaName":783,"dataGaLocation":696},"/topics/gitops/","gitops",{"text":246,"config":785},{"href":786,"dataGaName":787,"dataGaLocation":696},"/topics/devops/","devops",{"text":789,"config":790},"Version Control",{"href":791,"dataGaName":792,"dataGaLocation":696},"/topics/version-control/","version control",{"text":794,"config":795},"DevSecOps",{"href":796,"dataGaName":797,"dataGaLocation":696},"/topics/devsecops/","devsecops",{"text":799,"config":800},"Cloud Native",{"href":801,"dataGaName":802,"dataGaLocation":696},"/topics/cloud-native/","cloud native",{"text":804,"config":805},"AI for Coding",{"href":806,"dataGaName":807,"dataGaLocation":696},"/topics/devops/ai-for-coding/","ai for coding",{"text":809,"config":810},"Agentic AI",{"href":811,"dataGaName":812,"dataGaLocation":696},"/topics/agentic-ai/","agentic ai",{"title":814,"links":815},"Solutions",[816,818,820,825,829,832,836,839,841,844,847,852],{"text":347,"config":817},{"href":342,"dataGaName":347,"dataGaLocation":696},{"text":336,"config":819},{"href":319,"dataGaName":320,"dataGaLocation":696},{"text":821,"config":822},"Agile development",{"href":823,"dataGaName":824,"dataGaLocation":696},"/solutions/agile-delivery/","agile delivery",{"text":826,"config":827},"SCM",{"href":332,"dataGaName":828,"dataGaLocation":696},"source code management",{"text":775,"config":830},{"href":325,"dataGaName":831,"dataGaLocation":696},"continuous integration & delivery",{"text":833,"config":834},"Value stream management",{"href":375,"dataGaName":835,"dataGaLocation":696},"value stream management",{"text":780,"config":837},{"href":838,"dataGaName":783,"dataGaLocation":696},"/solutions/gitops/",{"text":385,"config":840},{"href":388,"dataGaName":389,"dataGaLocation":696},{"text":842,"config":843},"Small business",{"href":394,"dataGaName":395,"dataGaLocation":696},{"text":845,"config":846},"Public sector",{"href":400,"dataGaName":401,"dataGaLocation":696},{"text":848,"config":849},"Education",{"href":850,"dataGaName":851,"dataGaLocation":696},"/solutions/education/","education",{"text":853,"config":854},"Financial services",{"href":855,"dataGaName":856,"dataGaLocation":696},"/solutions/finance/","financial services",{"title":408,"links":858},[859,861,863,865,868,870,873,875,877,879,881,883,885,887],{"text":421,"config":860},{"href":423,"dataGaName":424,"dataGaLocation":696},{"text":426,"config":862},{"href":428,"dataGaName":429,"dataGaLocation":696},{"text":431,"config":864},{"href":433,"dataGaName":434,"dataGaLocation":696},{"text":436,"config":866},{"href":438,"dataGaName":867,"dataGaLocation":696},"docs",{"text":459,"config":869},{"href":461,"dataGaName":462,"dataGaLocation":696},{"text":871,"config":872},"What's new",{"href":518,"dataGaName":519,"dataGaLocation":696},{"text":454,"config":874},{"href":456,"dataGaName":457,"dataGaLocation":696},{"text":473,"config":876},{"href":475,"dataGaName":476,"dataGaLocation":696},{"text":481,"config":878},{"href":483,"dataGaName":484,"dataGaLocation":696},{"text":486,"config":880},{"href":488,"dataGaName":489,"dataGaLocation":696},{"text":491,"config":882},{"href":493,"dataGaName":247,"dataGaLocation":696},{"text":495,"config":884},{"href":497,"dataGaName":498,"dataGaLocation":696},{"text":500,"config":886},{"href":502,"dataGaName":503,"dataGaLocation":696},{"text":505,"config":888},{"href":507,"dataGaName":508,"dataGaLocation":696},{"title":521,"links":890},[891,893,895,897,899,901,905,910,912,914,916],{"text":529,"config":892},{"href":531,"dataGaName":523,"dataGaLocation":696},{"text":534,"config":894},{"href":536,"dataGaName":537,"dataGaLocation":696},{"text":542,"config":896},{"href":544,"dataGaName":545,"dataGaLocation":696},{"text":547,"config":898},{"href":549,"dataGaName":550,"dataGaLocation":696},{"text":552,"config":900},{"href":554,"dataGaName":555,"dataGaLocation":696},{"text":902,"config":903},"Sustainability",{"href":904,"dataGaName":902,"dataGaLocation":696},"/sustainability/",{"text":906,"config":907},"Diversity, inclusion and belonging (DIB)",{"href":908,"dataGaName":909,"dataGaLocation":696},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":557,"config":911},{"href":559,"dataGaName":560,"dataGaLocation":696},{"text":567,"config":913},{"href":569,"dataGaName":570,"dataGaLocation":696},{"text":572,"config":915},{"href":574,"dataGaName":575,"dataGaLocation":696},{"text":917,"config":918},"Modern Slavery Transparency Statement",{"href":919,"dataGaName":920,"dataGaLocation":696},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":922},[923,926,929],{"text":924,"config":925},"Terms",{"href":748,"dataGaName":749,"dataGaLocation":696},{"text":927,"config":928},"Cookies",{"dataGaName":758,"dataGaLocation":696,"id":759,"isOneTrustButton":236},{"text":930,"config":931},"Privacy",{"href":753,"dataGaName":754,"dataGaLocation":696},[933],{"id":934,"title":7,"body":232,"config":935,"content":937,"description":232,"extension":941,"meta":942,"navigation":236,"path":943,"seo":944,"stem":945,"__hash__":946},"blogAuthors/en-us/blog/authors/william-arias.yml",{"template":936},"BlogAuthor",{"name":7,"config":938},{"headshot":939,"ctfId":940},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667549/Blog/Author%20Headshots/warias-headshot.jpg","warias","yml",{},"/en-us/blog/authors/william-arias",{},"en-us/blog/authors/william-arias","1h59SugLZ7hePm0SChSE5WG0Z3uurYxGrujcXoxs4tA",[948,957,965],{"title":949,"description":950,"heroImage":951,"category":228,"date":952,"authors":953,"slug":956,"externalUrl":232},"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",[954,955],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":958,"description":959,"heroImage":960,"category":228,"date":961,"authors":962,"slug":964,"externalUrl":232},"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",[963],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":966,"description":967,"heroImage":968,"category":228,"date":969,"authors":970,"slug":972,"externalUrl":232},"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",[971],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":974},[975,989,1001,1013],{"id":976,"categories":977,"header":979,"text":980,"button":981,"image":986},"ai-modernization",[978],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":982,"config":983},"Get your AI maturity score",{"href":984,"dataGaName":985,"dataGaLocation":462},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":987},{"src":988},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":990,"categories":991,"header":993,"text":980,"button":994,"image":998},"devops-modernization",[992,797],"product","Are you just managing tools or shipping innovation?",{"text":995,"config":996},"Get your DevOps maturity score",{"href":997,"dataGaName":985,"dataGaLocation":462},"/assessments/devops-modernization-assessment/",{"config":999},{"src":1000},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1002,"categories":1003,"header":1005,"text":980,"button":1006,"image":1010},"security-modernization",[1004],"security","Are you trading speed for security?",{"text":1007,"config":1008},"Get your security maturity score",{"href":1009,"dataGaName":985,"dataGaLocation":462},"/assessments/security-modernization-assessment/",{"config":1011},{"src":1012},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1014,"paths":1015,"header":1018,"text":1019,"button":1020,"image":1025},"github-azure-migration",[1016,1017],"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":1021,"config":1022},"See how GitLab compares to GitHub",{"href":1023,"dataGaName":1024,"dataGaLocation":462},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1026},{"src":1000},{"header":1028,"blurb":1029,"button":1030,"secondaryButton":1035},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1031,"config":1032},"Get your free trial",{"href":1033,"dataGaName":261,"dataGaLocation":1034},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":734,"config":1036},{"href":586,"dataGaName":266,"dataGaLocation":1034},1786803762592]