[{"data":1,"prerenderedAt":985},["ShallowReactive",2],{"/blog/application-modernization-best-practices":3,"navigation-en-us":198,"banner-en-us":626,"footer-en-us":636,"blog-post-authors-en-us-Chrissie Buchanan":880,"blog-related-posts-en-us-application-modernization-best-practices":895,"blog-promotions-en-us":921,"next-steps-en-us":975},{"id":4,"title":5,"authors":6,"body":8,"category":177,"date":178,"description":179,"extension":180,"externalUrl":181,"faq":181,"featured":182,"heroImage":183,"meta":184,"navigation":185,"path":186,"seo":187,"slug":191,"stem":192,"tags":193,"template":196,"updatedDate":181,"__hash__":197},"blogPosts/en-us/blog/application-modernization-best-practices.md","7 Best practices for application modernization",[7],"Chrissie Buchanan",{"type":9,"value":10,"toc":163},"minimark",[11,15,24,29,38,72,75,80,88,92,101,104,108,111,120,124,127,130,134,137,141,144,148,156],[12,13,14],"p",{},"A journey starts with a single step, any motivational poster can you tell you that, but what about all the steps after?\nEven if you know where you're going, are you getting there in the most efficient way possible?\nBefore you start an application modernization quest of your own, it helps to get an idea of the road ahead.",[12,16,17,18,23],{},"You don't have to have everything mapped out from the start, and chances are high your plans will change.\nEnterprises can learn a lot from ",[19,20,22],"a",{"href":21},"/blog/application-modernization-examples/","teams that modernized their legacy systems successfully",", but there are also valuable lessons from those that failed.",[25,26,28],"h2",{"id":27},"why-legacy-modernization-projects-fail","Why legacy modernization projects fail",[12,30,31,32,37],{},"Enterprises that dive into the application modernization process are trying to solve big problems, but great intentions rarely guarantee success.\nIn 1999, Carnegie Mellon researchers dove into ",[19,33,36],{"href":34,"rel":35},"https://www.cs.cmu.edu/~aldrich/courses/654-sp05/readings/Bergey99.pdf",[],"10 reasons why legacy re-engineering efforts fail"," that are still very relevant today:",[39,40,41,45,48,51,54,57,60,63,66,69],"ol",{},[42,43,44],"li",{},"The organization adopts a flawed strategy from the start.",[42,46,47],{},"The organization relies too heavily on outside consultants.",[42,49,50],{},"The team is tied down to old technologies and inadequate training.",[42,52,53],{},"The organization thinks it has its legacy system under control (it doesn't).",[42,55,56],{},"The needs of the organization are oversimplified.",[42,58,59],{},"The overall software architecture isn't given enough consideration.",[42,61,62],{},"There is no defined application modernization process.",[42,64,65],{},"Inadequate planning and follow through.",[42,67,68],{},"Lack of long-term commitment to the strategy.",[42,70,71],{},"Leaders pre-determine technical decisions.",[12,73,74],{},"Every team faces legacy modernization challenges.\nCommitting to the process is the first step to meeting those challenges head on.\nAs teams go through the modernization journey, use these best practices to avoid common pitfalls and ensure long-term success.",[76,77,79],"h3",{"id":78},"_1-create-a-modernization-team","1. Create a modernization team",[12,81,82,83,87],{},"Groups can learn a lot from each other and a variety of voices at the table can point out weaknesses and improve the modernization process.\nWhen choosing a team or developing an innovation group, avoid thinking along legacy lines which divide teams by stages of the software lifecycle.\n",[19,84,86],{"href":85},"/blog/beyond-application-modernization-trends/","Think about building a cross-functional team of 8–12 people"," who can focus on developing the culture, process, and tools needed to continuously deliver software.",[76,89,91],{"id":90},"_2-disagree-commit-and-disagree","2. Disagree, commit, and disagree",[12,93,94,95,100],{},"With more voices come more opinions.\nIt's a powerful way to innovate and generate great ideas, but it's also the most effective way to be ineffective.\nDecisions sometimes have to be made without a 100 percent buy-in.\nEverything can be questioned but as long as a decision is in place, we should expect people to commit to executing it.\n\"Disagree and commit\" is ",[19,96,99],{"href":97,"rel":98},"https://handbook.gitlab.com/handbook/values/#disagree-commit-and-disagree",[],"one of GitLab's core values"," and it's a common business principle that keeps projects moving forward.",[12,102,103],{},"Whether decisions are left to one individual or distributed will largely depend on the size of the organization.\nFor all final decision-makers during the application modernization process: listen to other points of view, thank those who contribute ideas and feedback, consider options carefully, and commit to a course of action.",[76,105,107],{"id":106},"_3-map-the-development-workflow","3. Map the development workflow",[12,109,110],{},"Many organizations have been bogged down by the sheer number of tools, plug-ins, and platforms they use to accommodate everyday tasks.\nSome workflows have more in common with a Rube Goldberg device than a logical order of operation, but mapping out the development workflow is a necessity when undertaking a legacy modernization project.\nThis step is usually when the headaches of toolchain complexity come to light.",[12,112,113,114,119],{},"Look at every tool being used across teams and identify dependencies.\nMore handoffs present more opportunities for single points failure, and any new applications added to the mix need to be able to play well with others.\nEven if you don't mind teams finding their own solutions so that they can work creatively, it's a good rule of thumb to ",[19,115,118],{"href":116,"rel":117},"https://www.pluralsight.com/blog/career/shadow-it-security-threat",[],"identify all privately used tools"," that might be in the mix.",[76,121,123],{"id":122},"_4-set-small-modernization-goals","4. Set small modernization goals",[12,125,126],{},"Having an entire timeline mapped out months in advance sets you up for failure.\nWhy? Projects inevitably change once they get started.\nTrying to map moving targets months in advance is an exercise in futility that ends in projects that are rushed, incomplete, or late anyway. Reducing the cycle time and focusing instead on iterating towards smaller goals will have a much higher likelihood of success.\nTeams that master iteration respond to feedback faster, adapt more quickly, and complete their projects faster than their large-scale counterparts.\nBy shortening the timeframe and reducing the scope of each goal, you're able to respond to changing needs, adjust your long-term plans with the feedback you receive along the way, and radically reduce engineering risk.",[12,128,129],{},"When planning for major milestones (when certain tools will be retired or migrated, when updates will occur, team training, etc), focus instead on the many small steps between them.\nA smaller deploy introduces less changes that can potentially introduce issues, ensuring that each steps moves smoothly.",[76,131,133],{"id":132},"_5-prioritize-legacy-data","5. Prioritize legacy data",[12,135,136],{},"Preventing data loss is a key priority during the modernization process.\nEvaluate the data being processed, moved, and stored and put it into categories.\nWhether it's \"high, moderate, or low\" or \"green, yellow, and red,\" make sure the team understands each data category and what safeguards to have in place for each.",[76,138,140],{"id":139},"_6-dont-modernize-bad-habits","6. Don't modernize bad habits",[12,142,143],{},"Many organizations have squandered a clean slate by infusing new tools with old habits.\nTake a close look at your development workflow and identify instances of duplicated data, manual tasks, inefficiencies, and other habits that could derail your application modernization process in its tracks.\nMany of these practices are due to a lack of training or documentation – both easily fixable problems.\nA new tool doesn't solve bad habits, but bad habits can derail new tools.",[76,145,147],{"id":146},"_7-close-the-skill-gap","7. Close the skill gap",[12,149,150,151,155],{},"The number of programming languages, tools, systems, and methodologies that developers have to know is immense.\nIt's a challenge for teams to develop the knowledge they need to work quickly, and adding a new system to the mix should be considered carefully.\nKeeping teams in the loop on changes and then dedicating resources to make sure they understand how to navigate the new workflows will be the ",[152,153,154],"em",{},"most important part of the application modernization process",".\nMake this an ongoing, long-term commitment to organizational success and continue to document best practices long after legacy systems are turned off. Tools are only as good as the people who use them.",[12,157,158,159],{},"Are you ready to tackle application modernization? ",[19,160,162],{"href":161},"/blog/application-modernization-best-practices/","Just commit.",{"title":164,"searchDepth":165,"depth":165,"links":166},"",2,[167],{"id":27,"depth":165,"text":28,"children":168},[169,171,172,173,174,175,176],{"id":78,"depth":170,"text":79},3,{"id":90,"depth":170,"text":91},{"id":106,"depth":170,"text":107},{"id":122,"depth":170,"text":123},{"id":132,"depth":170,"text":133},{"id":139,"depth":170,"text":140},{"id":146,"depth":170,"text":147},"engineering","2019-03-27","Use these best practices to avoid common pitfalls on the application modernization journey.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671258/Blog/Hero%20Images/just-commit-blog-cover.png",{},true,"/en-us/blog/application-modernization-best-practices",{"title":5,"description":179,"ogTitle":5,"ogDescription":179,"noIndex":182,"ogImage":183,"ogUrl":188,"ogSiteName":189,"ogType":190,"canonicalUrls":188},"https://about.gitlab.com/blog/application-modernization-best-practices","https://about.gitlab.com","article","application-modernization-best-practices","en-us/blog/application-modernization-best-practices",[194,195],"CI","DevOps","BlogPost","HH88TPjwuNwC-pHRRkr4qoQL22a-7QznWr4TX10wpU8",{"logo":199,"freeTrial":204,"sales":209,"login":214,"items":219,"search":546,"minimal":577,"duo":596,"switchNav":605,"pricingDeployment":616},{"config":200},{"href":201,"dataGaName":202,"dataGaLocation":203},"/","gitlab logo","header",{"text":205,"config":206},"Get free trial",{"href":207,"dataGaName":208,"dataGaLocation":203},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":210,"config":211},"Request a demo",{"href":212,"dataGaName":213,"dataGaLocation":203},"/sales/?contact-topic=request-demo","sales",{"text":215,"config":216},"Sign in",{"href":217,"dataGaName":218,"dataGaLocation":203},"https://gitlab.com/users/sign_in/","sign in",[220,249,349,354,468,524],{"text":221,"config":222,"menu":224},"Platform",{"dataNavLevelOne":223},"platform",{"type":225,"columns":226},"cards",[227,233,241],{"title":221,"description":228,"link":229},"The intelligent orchestration platform for DevSecOps",{"text":230,"config":231},"Explore our Platform",{"href":232,"dataGaName":223,"dataGaLocation":203},"/platform/",{"title":234,"description":235,"link":236},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":237,"config":238},"Meet GitLab Duo",{"href":239,"dataGaName":240,"dataGaLocation":203},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":242,"description":243,"link":244},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":245,"config":246},"Learn more",{"href":247,"dataGaName":248,"dataGaLocation":203},"/why-gitlab/","why gitlab",{"text":250,"left":185,"config":251,"menu":253},"Product",{"dataNavLevelOne":252},"solutions",{"type":254,"link":255,"columns":259,"feature":328},"lists",{"text":256,"config":257},"View all Solutions",{"href":258,"dataGaName":252,"dataGaLocation":203},"/solutions/",[260,284,307],{"title":261,"description":262,"link":263,"items":268},"Automation","CI/CD and automation to accelerate deployment",{"config":264},{"icon":265,"href":266,"dataGaName":267,"dataGaLocation":203},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[269,273,276,280],{"text":270,"config":271},"CI/CD",{"href":272,"dataGaLocation":203,"dataGaName":270},"/solutions/continuous-integration/",{"text":234,"config":274},{"href":239,"dataGaLocation":203,"dataGaName":275},"gitlab duo agent platform - product menu",{"text":277,"config":278},"Source Code Management",{"href":279,"dataGaLocation":203,"dataGaName":277},"/solutions/source-code-management/",{"text":281,"config":282},"Automated Software Delivery",{"href":266,"dataGaLocation":203,"dataGaName":283},"Automated software delivery",{"title":285,"description":286,"link":287,"items":292},"Security","Deliver code faster without compromising security",{"config":288},{"href":289,"dataGaName":290,"dataGaLocation":203,"icon":291},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[293,297,302],{"text":294,"config":295},"Application Security Testing",{"href":289,"dataGaName":296,"dataGaLocation":203},"Application security testing",{"text":298,"config":299},"Software Supply Chain Security",{"href":300,"dataGaLocation":203,"dataGaName":301},"/solutions/supply-chain/","Software supply chain security",{"text":303,"config":304},"Software Compliance",{"href":305,"dataGaName":306,"dataGaLocation":203},"/solutions/software-compliance/","software compliance",{"title":308,"link":309,"items":314},"Measurement",{"config":310},{"icon":311,"href":312,"dataGaName":313,"dataGaLocation":203},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[315,319,323],{"text":316,"config":317},"Visibility & Measurement",{"href":312,"dataGaLocation":203,"dataGaName":318},"Visibility and Measurement",{"text":320,"config":321},"Value Stream Management",{"href":322,"dataGaLocation":203,"dataGaName":320},"/solutions/value-stream-management/",{"text":324,"config":325},"Analytics & Insights",{"href":326,"dataGaLocation":203,"dataGaName":327},"/solutions/analytics-and-insights/","Analytics and insights",{"title":329,"type":254,"items":330},"GitLab for",[331,337,343],{"text":332,"config":333},"Enterprise",{"icon":334,"href":335,"dataGaLocation":203,"dataGaName":336},"Building","/enterprise/","enterprise",{"text":338,"config":339},"Small Business",{"icon":340,"href":341,"dataGaLocation":203,"dataGaName":342},"Work","/small-business/","small business",{"text":344,"config":345},"Public Sector",{"icon":346,"href":347,"dataGaLocation":203,"dataGaName":348},"Organization","/solutions/public-sector/","public sector",{"text":350,"config":351},"Pricing",{"href":352,"dataGaName":353,"dataGaLocation":203,"dataNavLevelOne":353},"/pricing/","pricing",{"text":355,"config":356,"menu":358},"Resources",{"dataNavLevelOne":357},"resources",{"type":254,"link":359,"columns":363,"feature":457},{"text":360,"config":361},"View all resources",{"href":362,"dataGaName":357,"dataGaLocation":203},"/resources/",[364,397,424],{"title":365,"items":366},"Getting started",[367,372,377,382,387,392],{"text":368,"config":369},"Install",{"href":370,"dataGaName":371,"dataGaLocation":203},"/install/","install",{"text":373,"config":374},"Quick start guides",{"href":375,"dataGaName":376,"dataGaLocation":203},"/get-started/","quick setup checklists",{"text":378,"config":379},"Learn",{"href":380,"dataGaLocation":203,"dataGaName":381},"https://university.gitlab.com/","learn",{"text":383,"config":384},"Product documentation",{"href":385,"dataGaName":386,"dataGaLocation":203},"https://docs.gitlab.com/","product documentation",{"text":388,"config":389},"Best practice videos",{"href":390,"dataGaName":391,"dataGaLocation":203},"/getting-started-videos/","best practice videos",{"text":393,"config":394},"Integrations",{"href":395,"dataGaName":396,"dataGaLocation":203},"/integrations/","integrations",{"title":398,"items":399},"Discover",[400,405,410,415,419],{"text":401,"config":402},"Customer success stories",{"href":403,"dataGaName":404,"dataGaLocation":203},"/customers/","customer success stories",{"text":406,"config":407},"Blog",{"href":408,"dataGaName":409,"dataGaLocation":203},"/blog/","blog",{"text":411,"config":412},"Demo Hub",{"href":413,"dataGaName":414,"dataGaLocation":203},"/demo-hub/","demo hub",{"text":416,"config":417},"The Source",{"href":418,"dataGaName":409,"dataGaLocation":203},"/the-source/",{"text":420,"config":421},"Remote",{"href":422,"dataGaName":423,"dataGaLocation":203},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":425,"items":426},"Connect",[427,432,437,442,447,452],{"text":428,"config":429},"GitLab Services",{"href":430,"dataGaName":431,"dataGaLocation":203},"/services/","services",{"text":433,"config":434},"Contribute",{"href":435,"dataGaName":436,"dataGaLocation":203},"https://contributors.gitlab.com","contribute",{"text":438,"config":439},"Community",{"href":440,"dataGaName":441,"dataGaLocation":203},"/community/","community",{"text":443,"config":444},"Forum",{"href":445,"dataGaName":446,"dataGaLocation":203},"https://forum.gitlab.com/","forum",{"text":448,"config":449},"Events",{"href":450,"dataGaName":451,"dataGaLocation":203},"/events/","events",{"text":453,"config":454},"Partners",{"href":455,"dataGaName":456,"dataGaLocation":203},"/partners/","partners",{"config":458,"title":461,"text":462,"link":463},{"background":459,"textColor":460},"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":464,"config":465},"Read the latest",{"href":466,"dataGaName":467,"dataGaLocation":203},"/whats-new/","whats new",{"text":469,"config":470,"menu":472},"Company",{"dataNavLevelOne":471},"company",{"type":254,"columns":473},[474],{"items":475},[476,481,487,489,494,499,504,509,514,519],{"text":477,"config":478},"About",{"href":479,"dataGaName":480,"dataGaLocation":203},"/company/","about",{"text":482,"config":483,"footerGa":486},"Jobs",{"href":484,"dataGaName":485,"dataGaLocation":203},"/jobs/","jobs",{"dataGaName":485},{"text":448,"config":488},{"href":450,"dataGaName":451,"dataGaLocation":203},{"text":490,"config":491},"Leadership",{"href":492,"dataGaName":493,"dataGaLocation":203},"/company/team/e-group/","leadership",{"text":495,"config":496},"Handbook",{"href":497,"dataGaName":498,"dataGaLocation":203},"https://handbook.gitlab.com/","handbook",{"text":500,"config":501},"Investor relations",{"href":502,"dataGaName":503,"dataGaLocation":203},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":505,"config":506},"Trust Center",{"href":507,"dataGaName":508,"dataGaLocation":203},"/security/","trust center",{"text":510,"config":511},"AI Transparency Center",{"href":512,"dataGaName":513,"dataGaLocation":203},"/ai-transparency-center/","ai transparency center",{"text":515,"config":516},"Newsletter",{"href":517,"dataGaName":518,"dataGaLocation":203},"/company/contact/#contact-forms","newsletter",{"text":520,"config":521},"Press",{"href":522,"dataGaName":523,"dataGaLocation":203},"/press/","press",{"text":525,"config":526,"menu":527},"Contact us",{"dataNavLevelOne":471},{"type":254,"columns":528},[529],{"items":530},[531,536,541],{"text":532,"config":533},"Talk to sales",{"href":534,"dataGaName":535,"dataGaLocation":203},"/sales/","talk to sales",{"text":537,"config":538},"Support portal",{"href":539,"dataGaName":540,"dataGaLocation":203},"https://support.gitlab.com/hc/en-us","support portal",{"text":542,"config":543},"Customer portal",{"href":544,"dataGaName":545,"dataGaLocation":203},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":547,"login":548,"suggestions":555},"Close",{"text":549,"link":550},"To search repositories and projects, login to",{"text":551,"config":552},"gitlab.com",{"href":217,"dataGaName":553,"dataGaLocation":554},"search login","search",{"text":556,"default":557},"Suggestions",[558,560,564,566,570,574],{"text":234,"config":559},{"href":239,"dataGaName":234,"dataGaLocation":554},{"text":561,"config":562},"Code Suggestions (AI)",{"href":563,"dataGaName":561,"dataGaLocation":554},"/solutions/code-suggestions/",{"text":270,"config":565},{"href":272,"dataGaName":270,"dataGaLocation":554},{"text":567,"config":568},"GitLab on AWS",{"href":569,"dataGaName":567,"dataGaLocation":554},"/partners/technology-partners/aws/",{"text":571,"config":572},"GitLab on Google Cloud",{"href":573,"dataGaName":571,"dataGaLocation":554},"/partners/technology-partners/google-cloud-platform/",{"text":575,"config":576},"Why GitLab?",{"href":247,"dataGaName":575,"dataGaLocation":554},{"freeTrial":578,"mobileIcon":583,"desktopIcon":588,"secondaryButton":591},{"text":579,"config":580},"Start free trial",{"href":581,"dataGaName":208,"dataGaLocation":582},"https://gitlab.com/-/trials/new/","nav",{"altText":584,"config":585},"Gitlab Icon",{"src":586,"dataGaName":587,"dataGaLocation":582},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":584,"config":589},{"src":590,"dataGaName":587,"dataGaLocation":582},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":592,"config":593},"Get Started",{"href":594,"dataGaName":595,"dataGaLocation":582},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":597,"mobileIcon":601,"desktopIcon":603},{"text":598,"config":599},"Learn more about GitLab Duo",{"href":239,"dataGaName":600,"dataGaLocation":582},"gitlab duo",{"altText":584,"config":602},{"src":586,"dataGaName":587,"dataGaLocation":582},{"altText":584,"config":604},{"src":590,"dataGaName":587,"dataGaLocation":582},{"button":606,"mobileIcon":611,"desktopIcon":613},{"text":607,"config":608},"/switch",{"href":609,"dataGaName":610,"dataGaLocation":582},"#contact","switch",{"altText":584,"config":612},{"src":586,"dataGaName":587,"dataGaLocation":582},{"altText":584,"config":614},{"src":615,"dataGaName":587,"dataGaLocation":582},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":617,"mobileIcon":622,"desktopIcon":624},{"text":618,"config":619},"Back to pricing",{"href":352,"dataGaName":620,"dataGaLocation":582,"icon":621},"back to pricing","GoBack",{"altText":584,"config":623},{"src":586,"dataGaName":587,"dataGaLocation":582},{"altText":584,"config":625},{"src":590,"dataGaName":587,"dataGaLocation":582},{"title":627,"titleMobile":628,"button":629,"config":634},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":245,"config":630},{"href":631,"dataGaName":632,"dataGaLocation":633},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":635,"disabled":182},"release",{"data":637},{"text":638,"source":639,"edit":645,"contribute":650,"config":655,"items":660,"minimal":869},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":640,"config":641},"View page source",{"href":642,"dataGaName":643,"dataGaLocation":644},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":646,"config":647},"Edit this page",{"href":648,"dataGaName":649,"dataGaLocation":644},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":651,"config":652},"Please contribute",{"href":653,"dataGaName":654,"dataGaLocation":644},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":656,"facebook":657,"youtube":658,"linkedin":659},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[661,708,761,805,837],{"title":350,"links":662,"subMenu":677},[663,667,672],{"text":664,"config":665},"View plans",{"href":352,"dataGaName":666,"dataGaLocation":644},"view plans",{"text":668,"config":669},"Why Premium?",{"href":670,"dataGaName":671,"dataGaLocation":644},"/pricing/premium/","why premium",{"text":673,"config":674},"Why Ultimate?",{"href":675,"dataGaName":676,"dataGaLocation":644},"/pricing/ultimate/","why ultimate",[678],{"title":679,"links":680},"Contact Us",[681,684,686,688,693,698,703],{"text":682,"config":683},"Contact sales",{"href":534,"dataGaName":213,"dataGaLocation":644},{"text":537,"config":685},{"href":539,"dataGaName":540,"dataGaLocation":644},{"text":542,"config":687},{"href":544,"dataGaName":545,"dataGaLocation":644},{"text":689,"config":690},"Status",{"href":691,"dataGaName":692,"dataGaLocation":644},"https://status.gitlab.com/","status",{"text":694,"config":695},"Terms of use",{"href":696,"dataGaName":697,"dataGaLocation":644},"/terms/","terms of use",{"text":699,"config":700},"Privacy statement",{"href":701,"dataGaName":702,"dataGaLocation":644},"/privacy/","privacy statement",{"text":704,"config":705},"Cookie preferences",{"dataGaName":706,"dataGaLocation":644,"id":707,"isOneTrustButton":185},"cookie preferences","ot-sdk-btn",{"title":250,"links":709,"subMenu":718},[710,714],{"text":711,"config":712},"DevSecOps platform",{"href":232,"dataGaName":713,"dataGaLocation":644},"devsecops platform",{"text":715,"config":716},"AI-Assisted Development",{"href":239,"dataGaName":717,"dataGaLocation":644},"ai-assisted development",[719],{"title":720,"links":721},"Topics",[722,727,732,736,741,746,751,756],{"text":723,"config":724},"CICD",{"href":725,"dataGaName":726,"dataGaLocation":644},"/topics/ci-cd/","cicd",{"text":728,"config":729},"GitOps",{"href":730,"dataGaName":731,"dataGaLocation":644},"/topics/gitops/","gitops",{"text":195,"config":733},{"href":734,"dataGaName":735,"dataGaLocation":644},"/topics/devops/","devops",{"text":737,"config":738},"Version Control",{"href":739,"dataGaName":740,"dataGaLocation":644},"/topics/version-control/","version control",{"text":742,"config":743},"DevSecOps",{"href":744,"dataGaName":745,"dataGaLocation":644},"/topics/devsecops/","devsecops",{"text":747,"config":748},"Cloud Native",{"href":749,"dataGaName":750,"dataGaLocation":644},"/topics/cloud-native/","cloud native",{"text":752,"config":753},"AI for Coding",{"href":754,"dataGaName":755,"dataGaLocation":644},"/topics/devops/ai-for-coding/","ai for coding",{"text":757,"config":758},"Agentic AI",{"href":759,"dataGaName":760,"dataGaLocation":644},"/topics/agentic-ai/","agentic ai",{"title":762,"links":763},"Solutions",[764,766,768,773,777,780,784,787,789,792,795,800],{"text":294,"config":765},{"href":289,"dataGaName":294,"dataGaLocation":644},{"text":283,"config":767},{"href":266,"dataGaName":267,"dataGaLocation":644},{"text":769,"config":770},"Agile development",{"href":771,"dataGaName":772,"dataGaLocation":644},"/solutions/agile-delivery/","agile delivery",{"text":774,"config":775},"SCM",{"href":279,"dataGaName":776,"dataGaLocation":644},"source code management",{"text":723,"config":778},{"href":272,"dataGaName":779,"dataGaLocation":644},"continuous integration & delivery",{"text":781,"config":782},"Value stream management",{"href":322,"dataGaName":783,"dataGaLocation":644},"value stream management",{"text":728,"config":785},{"href":786,"dataGaName":731,"dataGaLocation":644},"/solutions/gitops/",{"text":332,"config":788},{"href":335,"dataGaName":336,"dataGaLocation":644},{"text":790,"config":791},"Small business",{"href":341,"dataGaName":342,"dataGaLocation":644},{"text":793,"config":794},"Public sector",{"href":347,"dataGaName":348,"dataGaLocation":644},{"text":796,"config":797},"Education",{"href":798,"dataGaName":799,"dataGaLocation":644},"/solutions/education/","education",{"text":801,"config":802},"Financial services",{"href":803,"dataGaName":804,"dataGaLocation":644},"/solutions/finance/","financial services",{"title":355,"links":806},[807,809,811,813,816,818,821,823,825,827,829,831,833,835],{"text":368,"config":808},{"href":370,"dataGaName":371,"dataGaLocation":644},{"text":373,"config":810},{"href":375,"dataGaName":376,"dataGaLocation":644},{"text":378,"config":812},{"href":380,"dataGaName":381,"dataGaLocation":644},{"text":383,"config":814},{"href":385,"dataGaName":815,"dataGaLocation":644},"docs",{"text":406,"config":817},{"href":408,"dataGaName":409,"dataGaLocation":644},{"text":819,"config":820},"What's new",{"href":466,"dataGaName":467,"dataGaLocation":644},{"text":401,"config":822},{"href":403,"dataGaName":404,"dataGaLocation":644},{"text":420,"config":824},{"href":422,"dataGaName":423,"dataGaLocation":644},{"text":428,"config":826},{"href":430,"dataGaName":431,"dataGaLocation":644},{"text":433,"config":828},{"href":435,"dataGaName":436,"dataGaLocation":644},{"text":438,"config":830},{"href":440,"dataGaName":441,"dataGaLocation":644},{"text":443,"config":832},{"href":445,"dataGaName":446,"dataGaLocation":644},{"text":448,"config":834},{"href":450,"dataGaName":451,"dataGaLocation":644},{"text":453,"config":836},{"href":455,"dataGaName":456,"dataGaLocation":644},{"title":469,"links":838},[839,841,843,845,847,849,853,858,860,862,864],{"text":477,"config":840},{"href":479,"dataGaName":471,"dataGaLocation":644},{"text":482,"config":842},{"href":484,"dataGaName":485,"dataGaLocation":644},{"text":490,"config":844},{"href":492,"dataGaName":493,"dataGaLocation":644},{"text":495,"config":846},{"href":497,"dataGaName":498,"dataGaLocation":644},{"text":500,"config":848},{"href":502,"dataGaName":503,"dataGaLocation":644},{"text":850,"config":851},"Sustainability",{"href":852,"dataGaName":850,"dataGaLocation":644},"/sustainability/",{"text":854,"config":855},"Diversity, inclusion and belonging (DIB)",{"href":856,"dataGaName":857,"dataGaLocation":644},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":505,"config":859},{"href":507,"dataGaName":508,"dataGaLocation":644},{"text":515,"config":861},{"href":517,"dataGaName":518,"dataGaLocation":644},{"text":520,"config":863},{"href":522,"dataGaName":523,"dataGaLocation":644},{"text":865,"config":866},"Modern Slavery Transparency Statement",{"href":867,"dataGaName":868,"dataGaLocation":644},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":870},[871,874,877],{"text":872,"config":873},"Terms",{"href":696,"dataGaName":697,"dataGaLocation":644},{"text":875,"config":876},"Cookies",{"dataGaName":706,"dataGaLocation":644,"id":707,"isOneTrustButton":185},{"text":878,"config":879},"Privacy",{"href":701,"dataGaName":702,"dataGaLocation":644},[881],{"id":882,"title":7,"body":181,"config":883,"content":885,"description":181,"extension":889,"meta":890,"navigation":185,"path":891,"seo":892,"stem":893,"__hash__":894},"blogAuthors/en-us/blog/authors/chrissie-buchanan.yml",{"template":884},"BlogAuthor",{"name":7,"config":886},{"headshot":887,"ctfId":888},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","cbuchanan","yml",{},"/en-us/blog/authors/chrissie-buchanan",{},"en-us/blog/authors/chrissie-buchanan","VUaqNs-WRatnVN614U2QKvMKVSh6PynpH3T0SHM4ayU",[896,905,913],{"title":897,"description":898,"heroImage":899,"category":177,"date":900,"authors":901,"slug":904,"externalUrl":181},"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",[902,903],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":906,"description":907,"heroImage":908,"category":177,"date":909,"authors":910,"slug":912,"externalUrl":181},"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",[911],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":914,"description":915,"heroImage":916,"category":177,"date":917,"authors":918,"slug":920,"externalUrl":181},"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",[919],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":922},[923,937,949,961],{"id":924,"categories":925,"header":927,"text":928,"button":929,"image":934},"ai-modernization",[926],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":930,"config":931},"Get your AI maturity score",{"href":932,"dataGaName":933,"dataGaLocation":409},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":935},{"src":936},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":938,"categories":939,"header":941,"text":928,"button":942,"image":946},"devops-modernization",[940,745],"product","Are you just managing tools or shipping innovation?",{"text":943,"config":944},"Get your DevOps maturity score",{"href":945,"dataGaName":933,"dataGaLocation":409},"/assessments/devops-modernization-assessment/",{"config":947},{"src":948},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":950,"categories":951,"header":953,"text":928,"button":954,"image":958},"security-modernization",[952],"security","Are you trading speed for security?",{"text":955,"config":956},"Get your security maturity score",{"href":957,"dataGaName":933,"dataGaLocation":409},"/assessments/security-modernization-assessment/",{"config":959},{"src":960},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":962,"paths":963,"header":966,"text":967,"button":968,"image":973},"github-azure-migration",[964,965],"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":969,"config":970},"See how GitLab compares to GitHub",{"href":971,"dataGaName":972,"dataGaLocation":409},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":974},{"src":948},{"header":976,"blurb":977,"button":978,"secondaryButton":983},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":979,"config":980},"Get your free trial",{"href":981,"dataGaName":208,"dataGaLocation":982},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":682,"config":984},{"href":534,"dataGaName":213,"dataGaLocation":982},1786803763272]