[{"data":1,"prerenderedAt":1043},["ShallowReactive",2],{"/blog/3-debugging-tips-we-learned-from-you":3,"navigation-en-us":256,"banner-en-us":683,"footer-en-us":693,"blog-post-authors-en-us-Rebecca Dodd":938,"blog-related-posts-en-us-3-debugging-tips-we-learned-from-you":953,"blog-promotions-en-us":979,"next-steps-en-us":1033},{"id":4,"title":5,"authors":6,"body":8,"category":237,"date":238,"description":239,"extension":240,"externalUrl":241,"faq":241,"featured":242,"heroImage":243,"meta":244,"navigation":86,"path":245,"seo":246,"slug":250,"stem":251,"tags":252,"template":254,"updatedDate":241,"__hash__":255},"blogPosts/en-us/blog/3-debugging-tips-we-learned-from-you.md","3 Debugging tips we learned from you",[7],"Rebecca Dodd",{"type":9,"value":10,"toc":229},"minimark",[11,15,22,32,35,40,49,55,69,83,89,100,102,112,114,122,126,134,141,145,148,159,161,164,167,171,179,182,192,194,204,206,215],[12,13,14],"p",{},"Infuriating, facepalm-inducing, but with an intensely satisfying payoff when (if!) you figure them out, bugs are an unavoidable part of being a developer.",[12,16,17],{},[18,19],"img",{"alt":20,"src":21},"Programmer debugging meme","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398142/blog/Content%20Images/debugging.png",[12,23,24,25,31],{},"When senior developer evangelist Brendan O'Leary shared with us this amusing ",[26,27,30],"a",{"href":28,"rel":29},"https://boleary.dev/blog/2021-01-27-the-purse-caper-debugging-can-be-hard.html",[],"story about a \"bug\" he solved"," in a previous role, we knew we had to ask you about your most elusive bugs. Now we're sharing some of the best bug stories with you, along with some lessons.",[12,33,34],{},"Brendan's example was in fact not a bug at all, but actually the result of an employee resting their purse on the keyboard. This is the first lesson:",[36,37,39],"h2",{"id":38},"debugging-tip-1-it-might-not-be-a-bug-at-all","Debugging tip 1: It might not be a bug at all",[12,41,42,43,48],{},"A surprising number of \"bugs\" actually have nothing to do with code. One of the first principles of debugging is to reproduce the bug to get started. If you can't do that, it could be a sign that, er, human factors are at play. Consider this example from ",[26,44,47],{"href":45,"rel":46},"https://twitter.com/MrSimonEmms",[],"@MrSimonEmms"," on Twitter:",[50,51,52],"blockquote",{},[12,53,54],{},"I once spent an entire day chasing down an error because I put a backtick in – originally, I thought it was a piece of dirt on my screen.\n(This was 15+ years ago and the stacktrace wasn't even erroring in the correct file)",[12,56,57,58,63,64,68],{},"In fact, when we asked for your stories, ",[26,59,62],{"href":60,"rel":61},"https://en.wikipedia.org/wiki/User_error",[],"user errors"," came up ",[65,66,67],"em",{},"a lot",":",[50,70,73,78,79],{"className":71},[72],"twitter-tweet",[12,74,77],{"lang":75,"dir":76},"en","ltr","customer reporting that the new software was not printing the letterhead. The letterhead is fed in from a different tray in the printer. The letterhead tray was empty.","— My dad calls me brucellosis. (@brucelowther) ",[26,80,82],{"href":81},"https://twitter.com/brucelowther/status/1366332712932569094?ref_src=twsrc%5Etfw","March 1, 2021",[84,85],"script",{"async":86,"src":87,"charSet":88},true,"https://platform.twitter.com/widgets.js","utf-8",[50,90,92,95,96],{"className":91},[72],[12,93,94],{"lang":75,"dir":76},"During internship a long time ago. Everyone got paged, servers down!!! We rush to the office (yea, they hat the servers in the office) and found the cleaning lady needed a power plug while vacuuming the server room 😅 (true story)","— Bart 全部技術 (@ZenbuTech) ",[26,97,99],{"href":98},"https://twitter.com/ZenbuTech/status/1367826235951378434?ref_src=twsrc%5Etfw","March 5, 2021",[84,101],{"async":86,"src":87,"charSet":88},[50,103,105,108,109],{"className":104},[72],[12,106,107],{"lang":75,"dir":76},"An employee who complained that the web app often wanted a fresh login during work. Searched and debugged nearly everything until we found out that this employee let other people work with their pc and cleaned the browser cache afterwards but wasn't aware that this reset the app.","— Bernhard Rausch (@rauschbit) ",[26,110,82],{"href":111},"https://twitter.com/rauschbit/status/1366499562295287813?ref_src=twsrc%5Etfw",[84,113],{"async":86,"src":87,"charSet":88},[12,115,116,117,121],{},"As Brendan noted in ",[26,118,120],{"href":28,"rel":119},[],"his story",", \"The lesson is that as humans interact with systems – or as systems become complex enough to take actions on their own – they will make mistakes. And while you can't possibly anticipate every one of those mistakes from the onset, when you encounter one, you can work on making sure you have observability at every level so you can see it when it happens.\"",[36,123,125],{"id":124},"debugging-tip-2-get-the-receipts","Debugging tip 2: Get the receipts",[12,127,128,133],{},[26,129,132],{"href":130,"rel":131},"https://www.linkedin.com/feed/update/urn:li:ugcPost:6770791699489796096?commentUrn=urn%3Ali%3Acomment%3A%28ugcPost%3A6770791699489796096%2C6773896843345580033%29",[],"This comment"," perfectly demonstrates why it's critical to require details such as Screen IDs when users or customers submit bug reports.",[12,135,136],{},[18,137],{"alt":138,"src":139,"title":140},"LinkedIn comment: \"a customer sharing over and over again the same old screenshot claiming that the bug still exists ... That's why all screens have now a small screenID and Version number that is required when screen-shotting issues and bugs!\"","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398977/blog/Content%20Images/screenshot-2021-03-30-at-12.28.25.png","LinkedIn comment",[36,142,144],{"id":143},"debugging-tip-3-computers-do-what-you-tell-them-to","Debugging tip 3: Computers do what you tell them to",[12,146,147],{},"We asked you for examples of your most unexpected culprit when debugging.",[50,149,151,155,156],{"className":150},[72],[12,152,154],{"lang":153,"dir":76},"und","Me 🤣","— Steven เด็กน้อย (@TweetsByBooth) ",[26,157,99],{"href":158},"https://twitter.com/TweetsByBooth/status/1367859314728255490?ref_src=twsrc%5Etfw",[84,160],{"async":86,"src":87,"charSet":88},[12,162,163],{},"We appreciate the above commenter's self awareness, which brings us to our next lesson...",[12,165,166],{},"The code always does exactly what you tell it to – you just might be asking it to do something different from what you really meant. To get to the bottom of things, ask yourself what you expected the code to do versus what it actually did, and from there you'll usually find the answer staring you in the face.",[36,168,170],{"id":169},"debugging-tip-4-when-in-doubt-investigate-the-usual-suspects","Debugging tip 4: When in doubt, investigate the usual suspects",[12,172,173,178],{},[26,174,177],{"href":175,"rel":176},"https://en.wikipedia.org/wiki/Occam%27s_razor",[],"Occam's Razor"," is your friend. It's often useful to rule out the obvious before you get too deep in debugging. Of course, no post about debugging would be complete without an off-by-one error, so we couldn't resist sneaking it into the title of this post (see what we did there? 😉)",[12,180,181],{},"Your own codebase will no doubt have its usual suspects, as the interaction below demonstrates, so those are a good place to start.",[50,183,185,188,189],{"className":184},[72],[12,186,187],{"lang":75,"dir":76},"DNS, it's always DNS!","— cronopio (@cronopio2) ",[26,190,99],{"href":191},"https://twitter.com/cronopio2/status/1367827879309025284?ref_src=twsrc%5Etfw",[84,193],{"async":86,"src":87,"charSet":88},[50,195,197,200,201],{"className":196},[72],[12,198,199],{"lang":75,"dir":76},"If not, is definitely SELinux","— Łukasz Korbasiewicz (@korbasiewicz) ",[26,202,99],{"href":203},"https://twitter.com/korbasiewicz/status/1367861966446944258?ref_src=twsrc%5Etfw",[84,205],{"async":86,"src":87,"charSet":88},[12,207,208,209,214],{},"Whether bugs drive you to distraction or you enjoy the challenge (probably both?), we want to hear about yours! Share in the comments below or tweet us ",[26,210,213],{"href":211,"rel":212},"https://twitter.com/gitlab/",[],"@GitLab",".",[12,216,217,218,223,224],{},"Thumbnail photo by ",[26,219,222],{"href":220,"rel":221},"https://unsplash.com/@andreuuuw?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Andrew Wulf"," on ",[26,225,228],{"href":226,"rel":227},"https://unsplash.com/s/photos/rubber-duck?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Unsplash",{"title":230,"searchDepth":231,"depth":231,"links":232},"",2,[233,234,235,236],{"id":38,"depth":231,"text":39},{"id":124,"depth":231,"text":125},{"id":143,"depth":231,"text":144},{"id":169,"depth":231,"text":170},"engineering","2021-03-31","We asked for your most unexpected causes of bugs. Here's what we learned.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663397/Blog/Hero%20Images/logoforblogpost.jpg",{},"/en-us/blog/3-debugging-tips-we-learned-from-you",{"title":5,"description":239,"ogTitle":5,"ogDescription":239,"noIndex":242,"ogImage":243,"ogUrl":247,"ogSiteName":248,"ogType":249,"canonicalUrls":247},"https://about.gitlab.com/blog/3-debugging-tips-we-learned-from-you","https://about.gitlab.com","article","3-debugging-tips-we-learned-from-you","en-us/blog/3-debugging-tips-we-learned-from-you",[253],"community","BlogPost","Vug62rnc73LrkxGWZook0401D5555qoRmh-sUCblJ1w",{"logo":257,"freeTrial":262,"sales":267,"login":272,"items":277,"search":603,"minimal":634,"duo":653,"switchNav":662,"pricingDeployment":673},{"config":258},{"href":259,"dataGaName":260,"dataGaLocation":261},"/","gitlab logo","header",{"text":263,"config":264},"Get free trial",{"href":265,"dataGaName":266,"dataGaLocation":261},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":268,"config":269},"Request a demo",{"href":270,"dataGaName":271,"dataGaLocation":261},"/sales/?contact-topic=request-demo","sales",{"text":273,"config":274},"Sign in",{"href":275,"dataGaName":276,"dataGaLocation":261},"https://gitlab.com/users/sign_in/","sign in",[278,307,407,412,525,581],{"text":279,"config":280,"menu":282},"Platform",{"dataNavLevelOne":281},"platform",{"type":283,"columns":284},"cards",[285,291,299],{"title":279,"description":286,"link":287},"The intelligent orchestration platform for DevSecOps",{"text":288,"config":289},"Explore our Platform",{"href":290,"dataGaName":281,"dataGaLocation":261},"/platform/",{"title":292,"description":293,"link":294},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":295,"config":296},"Meet GitLab Duo",{"href":297,"dataGaName":298,"dataGaLocation":261},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":300,"description":301,"link":302},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":303,"config":304},"Learn more",{"href":305,"dataGaName":306,"dataGaLocation":261},"/why-gitlab/","why gitlab",{"text":308,"left":86,"config":309,"menu":311},"Product",{"dataNavLevelOne":310},"solutions",{"type":312,"link":313,"columns":317,"feature":386},"lists",{"text":314,"config":315},"View all Solutions",{"href":316,"dataGaName":310,"dataGaLocation":261},"/solutions/",[318,342,365],{"title":319,"description":320,"link":321,"items":326},"Automation","CI/CD and automation to accelerate deployment",{"config":322},{"icon":323,"href":324,"dataGaName":325,"dataGaLocation":261},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[327,331,334,338],{"text":328,"config":329},"CI/CD",{"href":330,"dataGaLocation":261,"dataGaName":328},"/solutions/continuous-integration/",{"text":292,"config":332},{"href":297,"dataGaLocation":261,"dataGaName":333},"gitlab duo agent platform - product menu",{"text":335,"config":336},"Source Code Management",{"href":337,"dataGaLocation":261,"dataGaName":335},"/solutions/source-code-management/",{"text":339,"config":340},"Automated Software Delivery",{"href":324,"dataGaLocation":261,"dataGaName":341},"Automated software delivery",{"title":343,"description":344,"link":345,"items":350},"Security","Deliver code faster without compromising security",{"config":346},{"href":347,"dataGaName":348,"dataGaLocation":261,"icon":349},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[351,355,360],{"text":352,"config":353},"Application Security Testing",{"href":347,"dataGaName":354,"dataGaLocation":261},"Application security testing",{"text":356,"config":357},"Software Supply Chain Security",{"href":358,"dataGaLocation":261,"dataGaName":359},"/solutions/supply-chain/","Software supply chain security",{"text":361,"config":362},"Software Compliance",{"href":363,"dataGaName":364,"dataGaLocation":261},"/solutions/software-compliance/","software compliance",{"title":366,"link":367,"items":372},"Measurement",{"config":368},{"icon":369,"href":370,"dataGaName":371,"dataGaLocation":261},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[373,377,381],{"text":374,"config":375},"Visibility & Measurement",{"href":370,"dataGaLocation":261,"dataGaName":376},"Visibility and Measurement",{"text":378,"config":379},"Value Stream Management",{"href":380,"dataGaLocation":261,"dataGaName":378},"/solutions/value-stream-management/",{"text":382,"config":383},"Analytics & Insights",{"href":384,"dataGaLocation":261,"dataGaName":385},"/solutions/analytics-and-insights/","Analytics and insights",{"title":387,"type":312,"items":388},"GitLab for",[389,395,401],{"text":390,"config":391},"Enterprise",{"icon":392,"href":393,"dataGaLocation":261,"dataGaName":394},"Building","/enterprise/","enterprise",{"text":396,"config":397},"Small Business",{"icon":398,"href":399,"dataGaLocation":261,"dataGaName":400},"Work","/small-business/","small business",{"text":402,"config":403},"Public Sector",{"icon":404,"href":405,"dataGaLocation":261,"dataGaName":406},"Organization","/solutions/public-sector/","public sector",{"text":408,"config":409},"Pricing",{"href":410,"dataGaName":411,"dataGaLocation":261,"dataNavLevelOne":411},"/pricing/","pricing",{"text":413,"config":414,"menu":416},"Resources",{"dataNavLevelOne":415},"resources",{"type":312,"link":417,"columns":421,"feature":514},{"text":418,"config":419},"View all resources",{"href":420,"dataGaName":415,"dataGaLocation":261},"/resources/",[422,455,482],{"title":423,"items":424},"Getting started",[425,430,435,440,445,450],{"text":426,"config":427},"Install",{"href":428,"dataGaName":429,"dataGaLocation":261},"/install/","install",{"text":431,"config":432},"Quick start guides",{"href":433,"dataGaName":434,"dataGaLocation":261},"/get-started/","quick setup checklists",{"text":436,"config":437},"Learn",{"href":438,"dataGaLocation":261,"dataGaName":439},"https://university.gitlab.com/","learn",{"text":441,"config":442},"Product documentation",{"href":443,"dataGaName":444,"dataGaLocation":261},"https://docs.gitlab.com/","product documentation",{"text":446,"config":447},"Best practice videos",{"href":448,"dataGaName":449,"dataGaLocation":261},"/getting-started-videos/","best practice videos",{"text":451,"config":452},"Integrations",{"href":453,"dataGaName":454,"dataGaLocation":261},"/integrations/","integrations",{"title":456,"items":457},"Discover",[458,463,468,473,477],{"text":459,"config":460},"Customer success stories",{"href":461,"dataGaName":462,"dataGaLocation":261},"/customers/","customer success stories",{"text":464,"config":465},"Blog",{"href":466,"dataGaName":467,"dataGaLocation":261},"/blog/","blog",{"text":469,"config":470},"Demo Hub",{"href":471,"dataGaName":472,"dataGaLocation":261},"/demo-hub/","demo hub",{"text":474,"config":475},"The Source",{"href":476,"dataGaName":467,"dataGaLocation":261},"/the-source/",{"text":478,"config":479},"Remote",{"href":480,"dataGaName":481,"dataGaLocation":261},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":483,"items":484},"Connect",[485,490,495,499,504,509],{"text":486,"config":487},"GitLab Services",{"href":488,"dataGaName":489,"dataGaLocation":261},"/services/","services",{"text":491,"config":492},"Contribute",{"href":493,"dataGaName":494,"dataGaLocation":261},"https://contributors.gitlab.com","contribute",{"text":496,"config":497},"Community",{"href":498,"dataGaName":253,"dataGaLocation":261},"/community/",{"text":500,"config":501},"Forum",{"href":502,"dataGaName":503,"dataGaLocation":261},"https://forum.gitlab.com/","forum",{"text":505,"config":506},"Events",{"href":507,"dataGaName":508,"dataGaLocation":261},"/events/","events",{"text":510,"config":511},"Partners",{"href":512,"dataGaName":513,"dataGaLocation":261},"/partners/","partners",{"config":515,"title":518,"text":519,"link":520},{"background":516,"textColor":517},"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":521,"config":522},"Read the latest",{"href":523,"dataGaName":524,"dataGaLocation":261},"/whats-new/","whats new",{"text":526,"config":527,"menu":529},"Company",{"dataNavLevelOne":528},"company",{"type":312,"columns":530},[531],{"items":532},[533,538,544,546,551,556,561,566,571,576],{"text":534,"config":535},"About",{"href":536,"dataGaName":537,"dataGaLocation":261},"/company/","about",{"text":539,"config":540,"footerGa":543},"Jobs",{"href":541,"dataGaName":542,"dataGaLocation":261},"/jobs/","jobs",{"dataGaName":542},{"text":505,"config":545},{"href":507,"dataGaName":508,"dataGaLocation":261},{"text":547,"config":548},"Leadership",{"href":549,"dataGaName":550,"dataGaLocation":261},"/company/team/e-group/","leadership",{"text":552,"config":553},"Handbook",{"href":554,"dataGaName":555,"dataGaLocation":261},"https://handbook.gitlab.com/","handbook",{"text":557,"config":558},"Investor relations",{"href":559,"dataGaName":560,"dataGaLocation":261},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":562,"config":563},"Trust Center",{"href":564,"dataGaName":565,"dataGaLocation":261},"/security/","trust center",{"text":567,"config":568},"AI Transparency Center",{"href":569,"dataGaName":570,"dataGaLocation":261},"/ai-transparency-center/","ai transparency center",{"text":572,"config":573},"Newsletter",{"href":574,"dataGaName":575,"dataGaLocation":261},"/company/contact/#contact-forms","newsletter",{"text":577,"config":578},"Press",{"href":579,"dataGaName":580,"dataGaLocation":261},"/press/","press",{"text":582,"config":583,"menu":584},"Contact us",{"dataNavLevelOne":528},{"type":312,"columns":585},[586],{"items":587},[588,593,598],{"text":589,"config":590},"Talk to sales",{"href":591,"dataGaName":592,"dataGaLocation":261},"/sales/","talk to sales",{"text":594,"config":595},"Support portal",{"href":596,"dataGaName":597,"dataGaLocation":261},"https://support.gitlab.com/hc/en-us","support portal",{"text":599,"config":600},"Customer portal",{"href":601,"dataGaName":602,"dataGaLocation":261},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":604,"login":605,"suggestions":612},"Close",{"text":606,"link":607},"To search repositories and projects, login to",{"text":608,"config":609},"gitlab.com",{"href":275,"dataGaName":610,"dataGaLocation":611},"search login","search",{"text":613,"default":614},"Suggestions",[615,617,621,623,627,631],{"text":292,"config":616},{"href":297,"dataGaName":292,"dataGaLocation":611},{"text":618,"config":619},"Code Suggestions (AI)",{"href":620,"dataGaName":618,"dataGaLocation":611},"/solutions/code-suggestions/",{"text":328,"config":622},{"href":330,"dataGaName":328,"dataGaLocation":611},{"text":624,"config":625},"GitLab on AWS",{"href":626,"dataGaName":624,"dataGaLocation":611},"/partners/technology-partners/aws/",{"text":628,"config":629},"GitLab on Google Cloud",{"href":630,"dataGaName":628,"dataGaLocation":611},"/partners/technology-partners/google-cloud-platform/",{"text":632,"config":633},"Why GitLab?",{"href":305,"dataGaName":632,"dataGaLocation":611},{"freeTrial":635,"mobileIcon":640,"desktopIcon":645,"secondaryButton":648},{"text":636,"config":637},"Start free trial",{"href":638,"dataGaName":266,"dataGaLocation":639},"https://gitlab.com/-/trials/new/","nav",{"altText":641,"config":642},"Gitlab Icon",{"src":643,"dataGaName":644,"dataGaLocation":639},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":641,"config":646},{"src":647,"dataGaName":644,"dataGaLocation":639},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":649,"config":650},"Get Started",{"href":651,"dataGaName":652,"dataGaLocation":639},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":654,"mobileIcon":658,"desktopIcon":660},{"text":655,"config":656},"Learn more about GitLab Duo",{"href":297,"dataGaName":657,"dataGaLocation":639},"gitlab duo",{"altText":641,"config":659},{"src":643,"dataGaName":644,"dataGaLocation":639},{"altText":641,"config":661},{"src":647,"dataGaName":644,"dataGaLocation":639},{"button":663,"mobileIcon":668,"desktopIcon":670},{"text":664,"config":665},"/switch",{"href":666,"dataGaName":667,"dataGaLocation":639},"#contact","switch",{"altText":641,"config":669},{"src":643,"dataGaName":644,"dataGaLocation":639},{"altText":641,"config":671},{"src":672,"dataGaName":644,"dataGaLocation":639},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":674,"mobileIcon":679,"desktopIcon":681},{"text":675,"config":676},"Back to pricing",{"href":410,"dataGaName":677,"dataGaLocation":639,"icon":678},"back to pricing","GoBack",{"altText":641,"config":680},{"src":643,"dataGaName":644,"dataGaLocation":639},{"altText":641,"config":682},{"src":647,"dataGaName":644,"dataGaLocation":639},{"title":684,"titleMobile":685,"button":686,"config":691},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":303,"config":687},{"href":688,"dataGaName":689,"dataGaLocation":690},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":692,"disabled":242},"release",{"data":694},{"text":695,"source":696,"edit":702,"contribute":707,"config":712,"items":717,"minimal":927},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":697,"config":698},"View page source",{"href":699,"dataGaName":700,"dataGaLocation":701},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":703,"config":704},"Edit this page",{"href":705,"dataGaName":706,"dataGaLocation":701},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":708,"config":709},"Please contribute",{"href":710,"dataGaName":711,"dataGaLocation":701},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":713,"facebook":714,"youtube":715,"linkedin":716},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[718,765,819,863,895],{"title":408,"links":719,"subMenu":734},[720,724,729],{"text":721,"config":722},"View plans",{"href":410,"dataGaName":723,"dataGaLocation":701},"view plans",{"text":725,"config":726},"Why Premium?",{"href":727,"dataGaName":728,"dataGaLocation":701},"/pricing/premium/","why premium",{"text":730,"config":731},"Why Ultimate?",{"href":732,"dataGaName":733,"dataGaLocation":701},"/pricing/ultimate/","why ultimate",[735],{"title":736,"links":737},"Contact Us",[738,741,743,745,750,755,760],{"text":739,"config":740},"Contact sales",{"href":591,"dataGaName":271,"dataGaLocation":701},{"text":594,"config":742},{"href":596,"dataGaName":597,"dataGaLocation":701},{"text":599,"config":744},{"href":601,"dataGaName":602,"dataGaLocation":701},{"text":746,"config":747},"Status",{"href":748,"dataGaName":749,"dataGaLocation":701},"https://status.gitlab.com/","status",{"text":751,"config":752},"Terms of use",{"href":753,"dataGaName":754,"dataGaLocation":701},"/terms/","terms of use",{"text":756,"config":757},"Privacy statement",{"href":758,"dataGaName":759,"dataGaLocation":701},"/privacy/","privacy statement",{"text":761,"config":762},"Cookie preferences",{"dataGaName":763,"dataGaLocation":701,"id":764,"isOneTrustButton":86},"cookie preferences","ot-sdk-btn",{"title":308,"links":766,"subMenu":775},[767,771],{"text":768,"config":769},"DevSecOps platform",{"href":290,"dataGaName":770,"dataGaLocation":701},"devsecops platform",{"text":772,"config":773},"AI-Assisted Development",{"href":297,"dataGaName":774,"dataGaLocation":701},"ai-assisted development",[776],{"title":777,"links":778},"Topics",[779,784,789,794,799,804,809,814],{"text":780,"config":781},"CICD",{"href":782,"dataGaName":783,"dataGaLocation":701},"/topics/ci-cd/","cicd",{"text":785,"config":786},"GitOps",{"href":787,"dataGaName":788,"dataGaLocation":701},"/topics/gitops/","gitops",{"text":790,"config":791},"DevOps",{"href":792,"dataGaName":793,"dataGaLocation":701},"/topics/devops/","devops",{"text":795,"config":796},"Version Control",{"href":797,"dataGaName":798,"dataGaLocation":701},"/topics/version-control/","version control",{"text":800,"config":801},"DevSecOps",{"href":802,"dataGaName":803,"dataGaLocation":701},"/topics/devsecops/","devsecops",{"text":805,"config":806},"Cloud Native",{"href":807,"dataGaName":808,"dataGaLocation":701},"/topics/cloud-native/","cloud native",{"text":810,"config":811},"AI for Coding",{"href":812,"dataGaName":813,"dataGaLocation":701},"/topics/devops/ai-for-coding/","ai for coding",{"text":815,"config":816},"Agentic AI",{"href":817,"dataGaName":818,"dataGaLocation":701},"/topics/agentic-ai/","agentic ai",{"title":820,"links":821},"Solutions",[822,824,826,831,835,838,842,845,847,850,853,858],{"text":352,"config":823},{"href":347,"dataGaName":352,"dataGaLocation":701},{"text":341,"config":825},{"href":324,"dataGaName":325,"dataGaLocation":701},{"text":827,"config":828},"Agile development",{"href":829,"dataGaName":830,"dataGaLocation":701},"/solutions/agile-delivery/","agile delivery",{"text":832,"config":833},"SCM",{"href":337,"dataGaName":834,"dataGaLocation":701},"source code management",{"text":780,"config":836},{"href":330,"dataGaName":837,"dataGaLocation":701},"continuous integration & delivery",{"text":839,"config":840},"Value stream management",{"href":380,"dataGaName":841,"dataGaLocation":701},"value stream management",{"text":785,"config":843},{"href":844,"dataGaName":788,"dataGaLocation":701},"/solutions/gitops/",{"text":390,"config":846},{"href":393,"dataGaName":394,"dataGaLocation":701},{"text":848,"config":849},"Small business",{"href":399,"dataGaName":400,"dataGaLocation":701},{"text":851,"config":852},"Public sector",{"href":405,"dataGaName":406,"dataGaLocation":701},{"text":854,"config":855},"Education",{"href":856,"dataGaName":857,"dataGaLocation":701},"/solutions/education/","education",{"text":859,"config":860},"Financial services",{"href":861,"dataGaName":862,"dataGaLocation":701},"/solutions/finance/","financial services",{"title":413,"links":864},[865,867,869,871,874,876,879,881,883,885,887,889,891,893],{"text":426,"config":866},{"href":428,"dataGaName":429,"dataGaLocation":701},{"text":431,"config":868},{"href":433,"dataGaName":434,"dataGaLocation":701},{"text":436,"config":870},{"href":438,"dataGaName":439,"dataGaLocation":701},{"text":441,"config":872},{"href":443,"dataGaName":873,"dataGaLocation":701},"docs",{"text":464,"config":875},{"href":466,"dataGaName":467,"dataGaLocation":701},{"text":877,"config":878},"What's new",{"href":523,"dataGaName":524,"dataGaLocation":701},{"text":459,"config":880},{"href":461,"dataGaName":462,"dataGaLocation":701},{"text":478,"config":882},{"href":480,"dataGaName":481,"dataGaLocation":701},{"text":486,"config":884},{"href":488,"dataGaName":489,"dataGaLocation":701},{"text":491,"config":886},{"href":493,"dataGaName":494,"dataGaLocation":701},{"text":496,"config":888},{"href":498,"dataGaName":253,"dataGaLocation":701},{"text":500,"config":890},{"href":502,"dataGaName":503,"dataGaLocation":701},{"text":505,"config":892},{"href":507,"dataGaName":508,"dataGaLocation":701},{"text":510,"config":894},{"href":512,"dataGaName":513,"dataGaLocation":701},{"title":526,"links":896},[897,899,901,903,905,907,911,916,918,920,922],{"text":534,"config":898},{"href":536,"dataGaName":528,"dataGaLocation":701},{"text":539,"config":900},{"href":541,"dataGaName":542,"dataGaLocation":701},{"text":547,"config":902},{"href":549,"dataGaName":550,"dataGaLocation":701},{"text":552,"config":904},{"href":554,"dataGaName":555,"dataGaLocation":701},{"text":557,"config":906},{"href":559,"dataGaName":560,"dataGaLocation":701},{"text":908,"config":909},"Sustainability",{"href":910,"dataGaName":908,"dataGaLocation":701},"/sustainability/",{"text":912,"config":913},"Diversity, inclusion and belonging (DIB)",{"href":914,"dataGaName":915,"dataGaLocation":701},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":562,"config":917},{"href":564,"dataGaName":565,"dataGaLocation":701},{"text":572,"config":919},{"href":574,"dataGaName":575,"dataGaLocation":701},{"text":577,"config":921},{"href":579,"dataGaName":580,"dataGaLocation":701},{"text":923,"config":924},"Modern Slavery Transparency Statement",{"href":925,"dataGaName":926,"dataGaLocation":701},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":928},[929,932,935],{"text":930,"config":931},"Terms",{"href":753,"dataGaName":754,"dataGaLocation":701},{"text":933,"config":934},"Cookies",{"dataGaName":763,"dataGaLocation":701,"id":764,"isOneTrustButton":86},{"text":936,"config":937},"Privacy",{"href":758,"dataGaName":759,"dataGaLocation":701},[939],{"id":940,"title":7,"body":241,"config":941,"content":943,"description":241,"extension":947,"meta":948,"navigation":86,"path":949,"seo":950,"stem":951,"__hash__":952},"blogAuthors/en-us/blog/authors/rebecca-dodd.yml",{"template":942},"BlogAuthor",{"name":7,"config":944},{"headshot":945,"ctfId":946},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Rebecca-Dodd","yml",{},"/en-us/blog/authors/rebecca-dodd",{},"en-us/blog/authors/rebecca-dodd","Fqnz-zC5Rsc_ZMULQNrNPzwFh8Smy8g5utEqKK0NjJE",[954,963,971],{"title":955,"description":956,"heroImage":957,"category":237,"date":958,"authors":959,"slug":962,"externalUrl":241},"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",[960,961],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":964,"description":965,"heroImage":966,"category":237,"date":967,"authors":968,"slug":970,"externalUrl":241},"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",[969],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":972,"description":973,"heroImage":974,"category":237,"date":975,"authors":976,"slug":978,"externalUrl":241},"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",[977],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":980},[981,995,1007,1019],{"id":982,"categories":983,"header":985,"text":986,"button":987,"image":992},"ai-modernization",[984],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":988,"config":989},"Get your AI maturity score",{"href":990,"dataGaName":991,"dataGaLocation":467},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":993},{"src":994},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":996,"categories":997,"header":999,"text":986,"button":1000,"image":1004},"devops-modernization",[998,803],"product","Are you just managing tools or shipping innovation?",{"text":1001,"config":1002},"Get your DevOps maturity score",{"href":1003,"dataGaName":991,"dataGaLocation":467},"/assessments/devops-modernization-assessment/",{"config":1005},{"src":1006},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1008,"categories":1009,"header":1011,"text":986,"button":1012,"image":1016},"security-modernization",[1010],"security","Are you trading speed for security?",{"text":1013,"config":1014},"Get your security maturity score",{"href":1015,"dataGaName":991,"dataGaLocation":467},"/assessments/security-modernization-assessment/",{"config":1017},{"src":1018},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1020,"paths":1021,"header":1024,"text":1025,"button":1026,"image":1031},"github-azure-migration",[1022,1023],"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":1027,"config":1028},"See how GitLab compares to GitHub",{"href":1029,"dataGaName":1030,"dataGaLocation":467},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1032},{"src":1006},{"header":1034,"blurb":1035,"button":1036,"secondaryButton":1041},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1037,"config":1038},"Get your free trial",{"href":1039,"dataGaName":266,"dataGaLocation":1040},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":739,"config":1042},{"href":591,"dataGaName":271,"dataGaLocation":1040},1786803753450]