[{"data":1,"prerenderedAt":953},["ShallowReactive",2],{"/blog/placebo-lines-on-the-pipeline-graph":3,"navigation-en-us":167,"banner-en-us":595,"footer-en-us":605,"blog-post-authors-en-us-Sam Beckham":850,"blog-related-posts-en-us-placebo-lines-on-the-pipeline-graph":865,"blog-promotions-en-us":889,"next-steps-en-us":943},{"id":4,"title":5,"authors":6,"body":8,"category":144,"date":145,"description":146,"extension":147,"externalUrl":148,"faq":148,"featured":149,"heroImage":150,"meta":151,"navigation":152,"path":153,"seo":154,"slug":158,"stem":159,"tags":160,"template":165,"updatedDate":148,"__hash__":166},"blogPosts/en-us/blog/placebo-lines-on-the-pipeline-graph.md","Placebo Lines on the Pipeline Graph",[7],"Sam Beckham",{"type":9,"value":10,"toc":140},"minimark",[11,22,48,51,54,61,64,78,90,96,107,110,113,119],[12,13,14,15,21],"p",{},"Have you ever pressed the close door button on the elevator, in the hope that you'll save a few precious seconds?\nOr got frustrated at the person stood next to you at the cross-walk, neglecting to press the button?\nWell, maybe they know something you don't, or perhaps you know this already.\nMany buttons in our society lie to us.\n",[16,17,20],"a",{"href":18,"rel":19},"https://youarenotsosmart.com/2010/02/10/placebo-buttons/",[],"David McRaney"," dubbed these, \"Placebo buttons\" and they're everywhere.\nThose elevator doors won't close any faster and the cross-walk button has no effect on the lights.\nThe only lights they control are the lights on the buttons themselves.\nThey give you the feedback you crave, but that's all they're doing.",[12,23,24,25,29,30,35,36,41,42,47],{},"These placebos aren't constrained to the physical world, they're prevalent in ",[16,26,28],{"href":27},"/blog/the-evolution-of-ux-at-gitlab/","UI design"," too.\nFrom literal placebo buttons like ",[16,31,34],{"href":32,"rel":33},"https://www.quora.com/Does-downvoting-a-comment-on-YouTube-even-do-anything",[],"YouTube's downvote",", to more subtle effects like Instagram always ",[16,37,40],{"href":38,"rel":39},"https://www.fastcompany.com/1669788/the-3-white-lies-behind-instagrams-lightning-speed",[],"pretending to work",", or progress bars that have a ",[16,43,46],{"href":44,"rel":45},"https://www.theatlantic.com/technology/archive/2017/02/why-some-apps-use-fake-progress-bars/517233/",[],"fixed animation",".\nThey're everywhere if you know where to look.",[12,49,50],{},"At GitLab, we created a placebo of our own in one of our core features; the pipeline graph.",[12,52,53],{},"Those of you who have used our pipeline graph, will be familiar with its appearance.\nThere's a series of jobs, grouped by stages, connected by a series of lines depicting the relationships between the jobs.\nBut these lines might be lying to you.\nThese lines are indiscriminately drawn between each job in a stage, regardless of their relationship.\nThese lines are placebos.",[12,55,56],{},[57,58],"img",{"alt":59,"src":60},"The old pipeline rendering with lines connecting every job in a stage","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398839/blog/Content%20Images/placebo-lines_old-graph.png",[12,62,63],{},"This wasn't a problem to begin with.\nA basic pipeline has several jobs across a handful of stages.\nJobs in each stage would run parallel to each other, but each stage would run sequentially.\nIn the image shown above, all the jobs in the test stage would trigger at the same time. Once those jobs had finished, all the jobs in the build stage would trigger.\nWe used rudimentary CSS to draw lines connecting each job in one stage to each job in the next.\nThese lines weren't calculated based on their connections, but still reflected the story they were telling.",[12,65,66,67,71,72,77],{},"Since the introduction of ",[68,69,70],"code",{},"needs"," relationships in ",[16,73,76],{"href":74,"rel":75},"https://gitlab.com/gitlab-org/gitlab-foss/-/issues/47063",[],"v12.2",", pipelines got a bit more complicated.\nNow you could configure a job in a later stage to trigger as soon as a job in an earlier stage completed.\nLooking at our old example, we could set the API deployment to run as soon as our spec tests passed.\nThis skips the remaining tests and the entire build stage, turning our lines into pretty little liars.",[12,79,80,81,83,84,89],{},"We had many internal discussions about these lines, and how to show the relationships between jobs.\nThere's the ",[68,82,70],{}," visualization, which does an excellent job of displaying these relationships, but the main pipeline graph was still inaccurate.\nFor the past few months, we've been ",[16,85,88],{"href":86,"rel":87},"https://gitlab.com/gitlab-org/gitlab/-/issues/276949",[],"refactoring the pipeline graph",", giving it a new lease of life and fixing some of its issues along the way.\nOne of those issues were the faked lines.\nIn the new version, we can accurately draw lines between jobs.\nLines that actually depict the relationships jobs have with each other.\nNow the lines no-longer lie!",[12,91,92],{},[57,93],{"alt":94,"src":95},"The newer pipeline graph showing the correct needs links between jobs","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398839/blog/Content%20Images/placebo-lines_new-graph.png",[12,97,98,99,102,103,106],{},"The above image shows an unreleased version of the pipeline graph.\nYou can see the lines drawn between the jobs to show that the ",[68,100,101],{},"deploy:API"," job can start as soon as the ",[68,104,105],{},"rspec"," job is successful.\nSomething the old lines (shown earlier in this post) would have been unable to depict.",[12,108,109],{},"One unfortunate downside of this is that these lines can be quite expensive to calculate.\nThey're actual DOM nodes, drawn deliberately and placed precisely.\nOn smaller graphs this isn't a problem, but some of our initial tests have found pipelines with a potential 8000+ job connections.\nThat kind of calculation would grind the browser to a halt, and nobody wants that.",[12,111,112],{},"At GitLab, we believe in boring solutions.\nWe make the simple change that sets us on the path towards where we want to be.\nShip it, get feedback, and iterate.\nSo that's what we did.\nIn the first phase of this rollout, we shipped the new pipeline graph with no lines connecting the jobs.\nWe don't have to worry about the expensive calculations, and we still get to roll out the refactored pipeline graph.",[12,114,115],{},[57,116],{"alt":117,"src":118},"The current (v13.11) pipeline graph showing no links between jobs","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398839/blog/Content%20Images/placebo-lines_current-graph.png",[12,120,121,122,127,128,133,134,139],{},"We know some of you will miss them, but fear not.\nBoring solutions are just technical debt if you don't iterate on them.\nSo the ",[16,123,126],{"href":124,"rel":125},"https://gitlab.com/groups/gitlab-org/-/epics/4509",[],"improved lines are coming"," in a future release, along with several other improvements to the pipeline graph.\nWe're already starting to roll out the new ",[16,129,132],{"href":130,"rel":131},"https://gitlab.com/gitlab-org/gitlab/-/issues/298973",[],"Job Dependencies"," view which shows the jobs in a (much closer to) execution order.\nStay tuned for more updates, and watch ",[16,135,138],{"href":136,"rel":137},"https://www.youtube.com/watch?v=R2EKqKjB7OQ",[],"Sarah Groff Hennigh Palermo's talk"," for the technical side of this effort and a deeper dive into some of the decisions we made.",{"title":141,"searchDepth":142,"depth":142,"links":143},"",2,[],"unfiltered","2021-05-11","Have you noticed the connecting lines missing on your pipelines lately? Here's why","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679507/Blog/Hero%20Images/ci-cd.png",{},true,"/en-us/blog/placebo-lines-on-the-pipeline-graph",{"title":5,"description":146,"ogTitle":5,"ogDescription":146,"noIndex":149,"ogImage":150,"ogUrl":155,"ogSiteName":156,"ogType":157,"canonicalUrls":155},"https://about.gitlab.com/blog/placebo-lines-on-the-pipeline-graph","https://about.gitlab.com","article","placebo-lines-on-the-pipeline-graph","en-us/blog/placebo-lines-on-the-pipeline-graph",[161,162,163,164],"CI","frontend","agile","design","BlogPost","GtfVtW0KNnNRkS7TuJA0tj4WodDqvy9xgKiFuFix0jY",{"logo":168,"freeTrial":173,"sales":178,"login":183,"items":188,"search":515,"minimal":546,"duo":565,"switchNav":574,"pricingDeployment":585},{"config":169},{"href":170,"dataGaName":171,"dataGaLocation":172},"/","gitlab logo","header",{"text":174,"config":175},"Get free trial",{"href":176,"dataGaName":177,"dataGaLocation":172},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":179,"config":180},"Request a demo",{"href":181,"dataGaName":182,"dataGaLocation":172},"/sales/?contact-topic=request-demo","sales",{"text":184,"config":185},"Sign in",{"href":186,"dataGaName":187,"dataGaLocation":172},"https://gitlab.com/users/sign_in/","sign in",[189,218,318,323,437,493],{"text":190,"config":191,"menu":193},"Platform",{"dataNavLevelOne":192},"platform",{"type":194,"columns":195},"cards",[196,202,210],{"title":190,"description":197,"link":198},"The intelligent orchestration platform for DevSecOps",{"text":199,"config":200},"Explore our Platform",{"href":201,"dataGaName":192,"dataGaLocation":172},"/platform/",{"title":203,"description":204,"link":205},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":206,"config":207},"Meet GitLab Duo",{"href":208,"dataGaName":209,"dataGaLocation":172},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":211,"description":212,"link":213},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":214,"config":215},"Learn more",{"href":216,"dataGaName":217,"dataGaLocation":172},"/why-gitlab/","why gitlab",{"text":219,"left":152,"config":220,"menu":222},"Product",{"dataNavLevelOne":221},"solutions",{"type":223,"link":224,"columns":228,"feature":297},"lists",{"text":225,"config":226},"View all Solutions",{"href":227,"dataGaName":221,"dataGaLocation":172},"/solutions/",[229,253,276],{"title":230,"description":231,"link":232,"items":237},"Automation","CI/CD and automation to accelerate deployment",{"config":233},{"icon":234,"href":235,"dataGaName":236,"dataGaLocation":172},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[238,242,245,249],{"text":239,"config":240},"CI/CD",{"href":241,"dataGaLocation":172,"dataGaName":239},"/solutions/continuous-integration/",{"text":203,"config":243},{"href":208,"dataGaLocation":172,"dataGaName":244},"gitlab duo agent platform - product menu",{"text":246,"config":247},"Source Code Management",{"href":248,"dataGaLocation":172,"dataGaName":246},"/solutions/source-code-management/",{"text":250,"config":251},"Automated Software Delivery",{"href":235,"dataGaLocation":172,"dataGaName":252},"Automated software delivery",{"title":254,"description":255,"link":256,"items":261},"Security","Deliver code faster without compromising security",{"config":257},{"href":258,"dataGaName":259,"dataGaLocation":172,"icon":260},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[262,266,271],{"text":263,"config":264},"Application Security Testing",{"href":258,"dataGaName":265,"dataGaLocation":172},"Application security testing",{"text":267,"config":268},"Software Supply Chain Security",{"href":269,"dataGaLocation":172,"dataGaName":270},"/solutions/supply-chain/","Software supply chain security",{"text":272,"config":273},"Software Compliance",{"href":274,"dataGaName":275,"dataGaLocation":172},"/solutions/software-compliance/","software compliance",{"title":277,"link":278,"items":283},"Measurement",{"config":279},{"icon":280,"href":281,"dataGaName":282,"dataGaLocation":172},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[284,288,292],{"text":285,"config":286},"Visibility & Measurement",{"href":281,"dataGaLocation":172,"dataGaName":287},"Visibility and Measurement",{"text":289,"config":290},"Value Stream Management",{"href":291,"dataGaLocation":172,"dataGaName":289},"/solutions/value-stream-management/",{"text":293,"config":294},"Analytics & Insights",{"href":295,"dataGaLocation":172,"dataGaName":296},"/solutions/analytics-and-insights/","Analytics and insights",{"title":298,"type":223,"items":299},"GitLab for",[300,306,312],{"text":301,"config":302},"Enterprise",{"icon":303,"href":304,"dataGaLocation":172,"dataGaName":305},"Building","/enterprise/","enterprise",{"text":307,"config":308},"Small Business",{"icon":309,"href":310,"dataGaLocation":172,"dataGaName":311},"Work","/small-business/","small business",{"text":313,"config":314},"Public Sector",{"icon":315,"href":316,"dataGaLocation":172,"dataGaName":317},"Organization","/solutions/public-sector/","public sector",{"text":319,"config":320},"Pricing",{"href":321,"dataGaName":322,"dataGaLocation":172,"dataNavLevelOne":322},"/pricing/","pricing",{"text":324,"config":325,"menu":327},"Resources",{"dataNavLevelOne":326},"resources",{"type":223,"link":328,"columns":332,"feature":426},{"text":329,"config":330},"View all resources",{"href":331,"dataGaName":326,"dataGaLocation":172},"/resources/",[333,366,393],{"title":334,"items":335},"Getting started",[336,341,346,351,356,361],{"text":337,"config":338},"Install",{"href":339,"dataGaName":340,"dataGaLocation":172},"/install/","install",{"text":342,"config":343},"Quick start guides",{"href":344,"dataGaName":345,"dataGaLocation":172},"/get-started/","quick setup checklists",{"text":347,"config":348},"Learn",{"href":349,"dataGaLocation":172,"dataGaName":350},"https://university.gitlab.com/","learn",{"text":352,"config":353},"Product documentation",{"href":354,"dataGaName":355,"dataGaLocation":172},"https://docs.gitlab.com/","product documentation",{"text":357,"config":358},"Best practice videos",{"href":359,"dataGaName":360,"dataGaLocation":172},"/getting-started-videos/","best practice videos",{"text":362,"config":363},"Integrations",{"href":364,"dataGaName":365,"dataGaLocation":172},"/integrations/","integrations",{"title":367,"items":368},"Discover",[369,374,379,384,388],{"text":370,"config":371},"Customer success stories",{"href":372,"dataGaName":373,"dataGaLocation":172},"/customers/","customer success stories",{"text":375,"config":376},"Blog",{"href":377,"dataGaName":378,"dataGaLocation":172},"/blog/","blog",{"text":380,"config":381},"Demo Hub",{"href":382,"dataGaName":383,"dataGaLocation":172},"/demo-hub/","demo hub",{"text":385,"config":386},"The Source",{"href":387,"dataGaName":378,"dataGaLocation":172},"/the-source/",{"text":389,"config":390},"Remote",{"href":391,"dataGaName":392,"dataGaLocation":172},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":394,"items":395},"Connect",[396,401,406,411,416,421],{"text":397,"config":398},"GitLab Services",{"href":399,"dataGaName":400,"dataGaLocation":172},"/services/","services",{"text":402,"config":403},"Contribute",{"href":404,"dataGaName":405,"dataGaLocation":172},"https://contributors.gitlab.com","contribute",{"text":407,"config":408},"Community",{"href":409,"dataGaName":410,"dataGaLocation":172},"/community/","community",{"text":412,"config":413},"Forum",{"href":414,"dataGaName":415,"dataGaLocation":172},"https://forum.gitlab.com/","forum",{"text":417,"config":418},"Events",{"href":419,"dataGaName":420,"dataGaLocation":172},"/events/","events",{"text":422,"config":423},"Partners",{"href":424,"dataGaName":425,"dataGaLocation":172},"/partners/","partners",{"config":427,"title":430,"text":431,"link":432},{"background":428,"textColor":429},"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":433,"config":434},"Read the latest",{"href":435,"dataGaName":436,"dataGaLocation":172},"/whats-new/","whats new",{"text":438,"config":439,"menu":441},"Company",{"dataNavLevelOne":440},"company",{"type":223,"columns":442},[443],{"items":444},[445,450,456,458,463,468,473,478,483,488],{"text":446,"config":447},"About",{"href":448,"dataGaName":449,"dataGaLocation":172},"/company/","about",{"text":451,"config":452,"footerGa":455},"Jobs",{"href":453,"dataGaName":454,"dataGaLocation":172},"/jobs/","jobs",{"dataGaName":454},{"text":417,"config":457},{"href":419,"dataGaName":420,"dataGaLocation":172},{"text":459,"config":460},"Leadership",{"href":461,"dataGaName":462,"dataGaLocation":172},"/company/team/e-group/","leadership",{"text":464,"config":465},"Handbook",{"href":466,"dataGaName":467,"dataGaLocation":172},"https://handbook.gitlab.com/","handbook",{"text":469,"config":470},"Investor relations",{"href":471,"dataGaName":472,"dataGaLocation":172},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":474,"config":475},"Trust Center",{"href":476,"dataGaName":477,"dataGaLocation":172},"/security/","trust center",{"text":479,"config":480},"AI Transparency Center",{"href":481,"dataGaName":482,"dataGaLocation":172},"/ai-transparency-center/","ai transparency center",{"text":484,"config":485},"Newsletter",{"href":486,"dataGaName":487,"dataGaLocation":172},"/company/contact/#contact-forms","newsletter",{"text":489,"config":490},"Press",{"href":491,"dataGaName":492,"dataGaLocation":172},"/press/","press",{"text":494,"config":495,"menu":496},"Contact us",{"dataNavLevelOne":440},{"type":223,"columns":497},[498],{"items":499},[500,505,510],{"text":501,"config":502},"Talk to sales",{"href":503,"dataGaName":504,"dataGaLocation":172},"/sales/","talk to sales",{"text":506,"config":507},"Support portal",{"href":508,"dataGaName":509,"dataGaLocation":172},"https://support.gitlab.com/hc/en-us","support portal",{"text":511,"config":512},"Customer portal",{"href":513,"dataGaName":514,"dataGaLocation":172},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":516,"login":517,"suggestions":524},"Close",{"text":518,"link":519},"To search repositories and projects, login to",{"text":520,"config":521},"gitlab.com",{"href":186,"dataGaName":522,"dataGaLocation":523},"search login","search",{"text":525,"default":526},"Suggestions",[527,529,533,535,539,543],{"text":203,"config":528},{"href":208,"dataGaName":203,"dataGaLocation":523},{"text":530,"config":531},"Code Suggestions (AI)",{"href":532,"dataGaName":530,"dataGaLocation":523},"/solutions/code-suggestions/",{"text":239,"config":534},{"href":241,"dataGaName":239,"dataGaLocation":523},{"text":536,"config":537},"GitLab on AWS",{"href":538,"dataGaName":536,"dataGaLocation":523},"/partners/technology-partners/aws/",{"text":540,"config":541},"GitLab on Google Cloud",{"href":542,"dataGaName":540,"dataGaLocation":523},"/partners/technology-partners/google-cloud-platform/",{"text":544,"config":545},"Why GitLab?",{"href":216,"dataGaName":544,"dataGaLocation":523},{"freeTrial":547,"mobileIcon":552,"desktopIcon":557,"secondaryButton":560},{"text":548,"config":549},"Start free trial",{"href":550,"dataGaName":177,"dataGaLocation":551},"https://gitlab.com/-/trials/new/","nav",{"altText":553,"config":554},"Gitlab Icon",{"src":555,"dataGaName":556,"dataGaLocation":551},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":553,"config":558},{"src":559,"dataGaName":556,"dataGaLocation":551},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":561,"config":562},"Get Started",{"href":563,"dataGaName":564,"dataGaLocation":551},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":566,"mobileIcon":570,"desktopIcon":572},{"text":567,"config":568},"Learn more about GitLab Duo",{"href":208,"dataGaName":569,"dataGaLocation":551},"gitlab duo",{"altText":553,"config":571},{"src":555,"dataGaName":556,"dataGaLocation":551},{"altText":553,"config":573},{"src":559,"dataGaName":556,"dataGaLocation":551},{"button":575,"mobileIcon":580,"desktopIcon":582},{"text":576,"config":577},"/switch",{"href":578,"dataGaName":579,"dataGaLocation":551},"#contact","switch",{"altText":553,"config":581},{"src":555,"dataGaName":556,"dataGaLocation":551},{"altText":553,"config":583},{"src":584,"dataGaName":556,"dataGaLocation":551},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":586,"mobileIcon":591,"desktopIcon":593},{"text":587,"config":588},"Back to pricing",{"href":321,"dataGaName":589,"dataGaLocation":551,"icon":590},"back to pricing","GoBack",{"altText":553,"config":592},{"src":555,"dataGaName":556,"dataGaLocation":551},{"altText":553,"config":594},{"src":559,"dataGaName":556,"dataGaLocation":551},{"title":596,"titleMobile":597,"button":598,"config":603},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":214,"config":599},{"href":600,"dataGaName":601,"dataGaLocation":602},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":604,"disabled":149},"release",{"data":606},{"text":607,"source":608,"edit":614,"contribute":619,"config":624,"items":629,"minimal":839},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":609,"config":610},"View page source",{"href":611,"dataGaName":612,"dataGaLocation":613},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":615,"config":616},"Edit this page",{"href":617,"dataGaName":618,"dataGaLocation":613},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":620,"config":621},"Please contribute",{"href":622,"dataGaName":623,"dataGaLocation":613},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":625,"facebook":626,"youtube":627,"linkedin":628},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[630,677,731,775,807],{"title":319,"links":631,"subMenu":646},[632,636,641],{"text":633,"config":634},"View plans",{"href":321,"dataGaName":635,"dataGaLocation":613},"view plans",{"text":637,"config":638},"Why Premium?",{"href":639,"dataGaName":640,"dataGaLocation":613},"/pricing/premium/","why premium",{"text":642,"config":643},"Why Ultimate?",{"href":644,"dataGaName":645,"dataGaLocation":613},"/pricing/ultimate/","why ultimate",[647],{"title":648,"links":649},"Contact Us",[650,653,655,657,662,667,672],{"text":651,"config":652},"Contact sales",{"href":503,"dataGaName":182,"dataGaLocation":613},{"text":506,"config":654},{"href":508,"dataGaName":509,"dataGaLocation":613},{"text":511,"config":656},{"href":513,"dataGaName":514,"dataGaLocation":613},{"text":658,"config":659},"Status",{"href":660,"dataGaName":661,"dataGaLocation":613},"https://status.gitlab.com/","status",{"text":663,"config":664},"Terms of use",{"href":665,"dataGaName":666,"dataGaLocation":613},"/terms/","terms of use",{"text":668,"config":669},"Privacy statement",{"href":670,"dataGaName":671,"dataGaLocation":613},"/privacy/","privacy statement",{"text":673,"config":674},"Cookie preferences",{"dataGaName":675,"dataGaLocation":613,"id":676,"isOneTrustButton":152},"cookie preferences","ot-sdk-btn",{"title":219,"links":678,"subMenu":687},[679,683],{"text":680,"config":681},"DevSecOps platform",{"href":201,"dataGaName":682,"dataGaLocation":613},"devsecops platform",{"text":684,"config":685},"AI-Assisted Development",{"href":208,"dataGaName":686,"dataGaLocation":613},"ai-assisted development",[688],{"title":689,"links":690},"Topics",[691,696,701,706,711,716,721,726],{"text":692,"config":693},"CICD",{"href":694,"dataGaName":695,"dataGaLocation":613},"/topics/ci-cd/","cicd",{"text":697,"config":698},"GitOps",{"href":699,"dataGaName":700,"dataGaLocation":613},"/topics/gitops/","gitops",{"text":702,"config":703},"DevOps",{"href":704,"dataGaName":705,"dataGaLocation":613},"/topics/devops/","devops",{"text":707,"config":708},"Version Control",{"href":709,"dataGaName":710,"dataGaLocation":613},"/topics/version-control/","version control",{"text":712,"config":713},"DevSecOps",{"href":714,"dataGaName":715,"dataGaLocation":613},"/topics/devsecops/","devsecops",{"text":717,"config":718},"Cloud Native",{"href":719,"dataGaName":720,"dataGaLocation":613},"/topics/cloud-native/","cloud native",{"text":722,"config":723},"AI for Coding",{"href":724,"dataGaName":725,"dataGaLocation":613},"/topics/devops/ai-for-coding/","ai for coding",{"text":727,"config":728},"Agentic AI",{"href":729,"dataGaName":730,"dataGaLocation":613},"/topics/agentic-ai/","agentic ai",{"title":732,"links":733},"Solutions",[734,736,738,743,747,750,754,757,759,762,765,770],{"text":263,"config":735},{"href":258,"dataGaName":263,"dataGaLocation":613},{"text":252,"config":737},{"href":235,"dataGaName":236,"dataGaLocation":613},{"text":739,"config":740},"Agile development",{"href":741,"dataGaName":742,"dataGaLocation":613},"/solutions/agile-delivery/","agile delivery",{"text":744,"config":745},"SCM",{"href":248,"dataGaName":746,"dataGaLocation":613},"source code management",{"text":692,"config":748},{"href":241,"dataGaName":749,"dataGaLocation":613},"continuous integration & delivery",{"text":751,"config":752},"Value stream management",{"href":291,"dataGaName":753,"dataGaLocation":613},"value stream management",{"text":697,"config":755},{"href":756,"dataGaName":700,"dataGaLocation":613},"/solutions/gitops/",{"text":301,"config":758},{"href":304,"dataGaName":305,"dataGaLocation":613},{"text":760,"config":761},"Small business",{"href":310,"dataGaName":311,"dataGaLocation":613},{"text":763,"config":764},"Public sector",{"href":316,"dataGaName":317,"dataGaLocation":613},{"text":766,"config":767},"Education",{"href":768,"dataGaName":769,"dataGaLocation":613},"/solutions/education/","education",{"text":771,"config":772},"Financial services",{"href":773,"dataGaName":774,"dataGaLocation":613},"/solutions/finance/","financial services",{"title":324,"links":776},[777,779,781,783,786,788,791,793,795,797,799,801,803,805],{"text":337,"config":778},{"href":339,"dataGaName":340,"dataGaLocation":613},{"text":342,"config":780},{"href":344,"dataGaName":345,"dataGaLocation":613},{"text":347,"config":782},{"href":349,"dataGaName":350,"dataGaLocation":613},{"text":352,"config":784},{"href":354,"dataGaName":785,"dataGaLocation":613},"docs",{"text":375,"config":787},{"href":377,"dataGaName":378,"dataGaLocation":613},{"text":789,"config":790},"What's new",{"href":435,"dataGaName":436,"dataGaLocation":613},{"text":370,"config":792},{"href":372,"dataGaName":373,"dataGaLocation":613},{"text":389,"config":794},{"href":391,"dataGaName":392,"dataGaLocation":613},{"text":397,"config":796},{"href":399,"dataGaName":400,"dataGaLocation":613},{"text":402,"config":798},{"href":404,"dataGaName":405,"dataGaLocation":613},{"text":407,"config":800},{"href":409,"dataGaName":410,"dataGaLocation":613},{"text":412,"config":802},{"href":414,"dataGaName":415,"dataGaLocation":613},{"text":417,"config":804},{"href":419,"dataGaName":420,"dataGaLocation":613},{"text":422,"config":806},{"href":424,"dataGaName":425,"dataGaLocation":613},{"title":438,"links":808},[809,811,813,815,817,819,823,828,830,832,834],{"text":446,"config":810},{"href":448,"dataGaName":440,"dataGaLocation":613},{"text":451,"config":812},{"href":453,"dataGaName":454,"dataGaLocation":613},{"text":459,"config":814},{"href":461,"dataGaName":462,"dataGaLocation":613},{"text":464,"config":816},{"href":466,"dataGaName":467,"dataGaLocation":613},{"text":469,"config":818},{"href":471,"dataGaName":472,"dataGaLocation":613},{"text":820,"config":821},"Sustainability",{"href":822,"dataGaName":820,"dataGaLocation":613},"/sustainability/",{"text":824,"config":825},"Diversity, inclusion and belonging (DIB)",{"href":826,"dataGaName":827,"dataGaLocation":613},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":474,"config":829},{"href":476,"dataGaName":477,"dataGaLocation":613},{"text":484,"config":831},{"href":486,"dataGaName":487,"dataGaLocation":613},{"text":489,"config":833},{"href":491,"dataGaName":492,"dataGaLocation":613},{"text":835,"config":836},"Modern Slavery Transparency Statement",{"href":837,"dataGaName":838,"dataGaLocation":613},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":840},[841,844,847],{"text":842,"config":843},"Terms",{"href":665,"dataGaName":666,"dataGaLocation":613},{"text":845,"config":846},"Cookies",{"dataGaName":675,"dataGaLocation":613,"id":676,"isOneTrustButton":152},{"text":848,"config":849},"Privacy",{"href":670,"dataGaName":671,"dataGaLocation":613},[851],{"id":852,"title":7,"body":148,"config":853,"content":855,"description":148,"extension":859,"meta":860,"navigation":152,"path":861,"seo":862,"stem":863,"__hash__":864},"blogAuthors/en-us/blog/authors/sam-beckham.yml",{"template":854},"BlogAuthor",{"name":7,"config":856},{"headshot":857,"ctfId":858},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678740/Blog/Author%20Headshots/samdbeckham-headshot.jpg","samdbeckham","yml",{},"/en-us/blog/authors/sam-beckham",{},"en-us/blog/authors/sam-beckham","Lqtc4A7WNFET0xbcui4NaPIAvsEm_cWvi0BR-a2Ri04",[866,874,881],{"title":867,"description":868,"heroImage":869,"category":144,"date":870,"authors":871,"slug":873,"externalUrl":148},"CEO Shadow Takeaways from Jacie","Recap of my experience in the CEO Shadow Program.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664102/Blog/Hero%20Images/gitlab-values-cover.png","2021-05-18",[872],"Jacie Bandur","ceo-shadow-recap",{"title":875,"description":876,"heroImage":877,"category":144,"date":145,"authors":878,"slug":880,"externalUrl":148},"Why I love contributing to GitLab","Making small meaningful changes is what it's all about.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679501/Blog/Hero%20Images/new-feature.png",[879],"Austin Regnery","why-i-love-contributing-to-gitlab",{"title":882,"description":883,"heroImage":884,"category":144,"date":885,"authors":886,"slug":888,"externalUrl":148},"Auto DevOps: Where we are and where we are headed","As we will soon start an Auto DevOps design sprint, this article aims to summarize our current knowledge about Auto DevOps, and sets the stage for future discussions.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679516/Blog/Hero%20Images/gitlab-11-0-released-cover.jpg","2021-05-05",[887],"Viktor Nagy","auto-devops-where-we-are-and-where-we-are-headed",{"promotions":890},[891,905,917,929],{"id":892,"categories":893,"header":895,"text":896,"button":897,"image":902},"ai-modernization",[894],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":898,"config":899},"Get your AI maturity score",{"href":900,"dataGaName":901,"dataGaLocation":378},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":903},{"src":904},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":906,"categories":907,"header":909,"text":896,"button":910,"image":914},"devops-modernization",[908,715],"product","Are you just managing tools or shipping innovation?",{"text":911,"config":912},"Get your DevOps maturity score",{"href":913,"dataGaName":901,"dataGaLocation":378},"/assessments/devops-modernization-assessment/",{"config":915},{"src":916},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":918,"categories":919,"header":921,"text":896,"button":922,"image":926},"security-modernization",[920],"security","Are you trading speed for security?",{"text":923,"config":924},"Get your security maturity score",{"href":925,"dataGaName":901,"dataGaLocation":378},"/assessments/security-modernization-assessment/",{"config":927},{"src":928},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":930,"paths":931,"header":934,"text":935,"button":936,"image":941},"github-azure-migration",[932,933],"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":937,"config":938},"See how GitLab compares to GitHub",{"href":939,"dataGaName":940,"dataGaLocation":378},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":942},{"src":916},{"header":944,"blurb":945,"button":946,"secondaryButton":951},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":947,"config":948},"Get your free trial",{"href":949,"dataGaName":177,"dataGaLocation":950},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":651,"config":952},{"href":503,"dataGaName":182,"dataGaLocation":950},1786803751896]