[{"data":1,"prerenderedAt":1485},["ShallowReactive",2],{"/blog/how-to-calculate-devops-platform-total-cost-of-ownership":3,"navigation-en-us":725,"banner-en-us":1156,"footer-en-us":1166,"blog-post-authors-en-us-GitLab":1426,"blog-related-posts-en-us-how-to-calculate-devops-platform-total-cost-of-ownership":1441,"blog-share-wrapper-en-us":1465,"next-steps-en-us":1475},{"id":4,"title":5,"authors":6,"body":8,"category":686,"date":687,"description":688,"extension":689,"externalUrl":690,"faq":691,"featured":711,"heroImage":712,"meta":713,"navigation":714,"path":715,"seo":716,"slug":718,"stem":719,"tags":720,"template":723,"updatedDate":690,"__hash__":724},"blogPosts/en-us/blog/how-to-calculate-devops-platform-total-cost-of-ownership.md","How to calculate DevOps platform total cost of ownership",[7],"GitLab",{"type":9,"value":10,"toc":667},"minimark",[11,15,18,31,36,39,42,45,48,56,60,63,186,189,192,195,198,203,206,215,218,233,236,240,243,246,272,281,290,294,297,300,543,545,548,551,554,565,569,572,576,579,582,586,589,592,601,605,608,616,620,623,632,636,639,642,646,649,652,655],[12,13,14],"p",{},"There’s nothing like budget pressure to put your DevOps platform under a microscope. But subscription fees and license costs only tell one part of the story. The total cost of ownership (TCO) for a DevOps platform also includes variable costs like CI/CD compute and AI usage, along with the infrastructure, tools, and employee time required to keep software delivery moving.",[12,16,17],{},"That wider view matters when you’re tasked with defending platform spend or comparing options with a head of finance. Designing a useful TCO model can:",[19,20,21,25,28],"ul",{},[22,23,24],"li",{},"Make those costs transparent for stakeholders",[22,26,27],{},"Shine a light on the reasoning (or lack thereof) behind each cost",[22,29,30],{},"Identify areas to reduce spend without negatively impacting software delivery",[32,33,35],"h2",{"id":34},"what-total-cost-of-ownership-really-includes","What total cost of ownership really includes",[12,37,38],{},"The core challenge of calculating TCO is that DevOps platforms package and price capabilities differently. For example, one platform may bundle CI/CD or AI capabilities into a per-seat subscription, while another could price usage separately. A third may appear less expensive upfront but require additional tools and ongoing integration work.",[12,40,41],{},"That’s why list prices or pricing tiers alone won’t give you a useful comparison. Start with the capabilities and workloads your organization actually needs, then calculate what it takes to support them on each platform.",[12,43,44],{},"Use the same scope and time period for every option — often one year — and define which teams, applications, environments, and delivery stages are included. Separate recurring costs from one-time expenses and external spend from internal labor, so finance can audit the assumptions and forecast future years.",[12,46,47],{},"A useful TCO model, therefore, answers two questions:",[19,49,50,53],{},[22,51,52],{},"What does it cost to meet our requirements today?",[22,54,55],{},"Which variables will cause that cost to rise or fall as our usage changes?",[32,57,59],{"id":58},"the-cost-categories-that-drive-your-bill","The cost categories that drive your bill",[12,61,62],{},"Most DevOps platform costs fit into the following categories:",[64,65,66,83],"table",{},[67,68,69],"thead",{},[70,71,72,77,80],"tr",{},[73,74,76],"th",{"align":75},"left","Cost category",[73,78,79],{"align":75},"What it includes",[73,81,82],{"align":75},"Main cost driver",[84,85,86,98,109,120,131,142,153,164,175],"tbody",{},[70,87,88,92,95],{},[89,90,91],"td",{"align":75},"Platform access",[89,93,94],{"align":75},"Paid seats, role-based licenses, enterprise features, and minimum commitments",[89,96,97],{"align":75},"Headcount",[70,99,100,103,106],{},[89,101,102],{"align":75},"CI/CD consumption",[89,104,105],{"align":75},"Job execution time, hosted compute, concurrency, storage, artifacts, cache, and data transfer",[89,107,108],{"align":75},"Usage",[70,110,111,114,117],{},[89,112,113],{"align":75},"AI and agentic capabilities",[89,115,116],{"align":75},"AI coding tools, agents, agentic workflows, and other usage-based AI capabilities",[89,118,119],{"align":75},"Headcount + usage + capability mix",[70,121,122,125,128],{},[89,123,124],{"align":75},"Runner infrastructure",[89,126,127],{"align":75},"Virtual machines, containers, orchestration, networking, monitoring, and administration",[89,129,130],{"align":75},"Usage + infrastructure complexity",[70,132,133,136,139],{},[89,134,135],{"align":75},"Security and compliance",[89,137,138],{"align":75},"Scanning, dependency analysis, secrets detection, policy management, audit evidence, and reporting",[89,140,141],{"align":75},"Headcount + usage + capability needs",[70,143,144,147,150],{},[89,145,146],{"align":75},"Additional tools",[89,148,149],{"align":75},"Planning, source code management, registries, observability, release management, and any necessary compliance products that are outside of the core platform",[89,151,152],{"align":75},"Toolchain complexity",[70,154,155,158,161],{},[89,156,157],{"align":75},"Support and services",[89,159,160],{"align":75},"Support plans, professional services, training, and enablement",[89,162,163],{"align":75},"Headcount + service level",[70,165,166,169,172],{},[89,167,168],{"align":75},"Internal operations",[89,170,171],{"align":75},"Administration, upgrades, incident response, access management, integration maintenance, and vendor management",[89,173,174],{"align":75},"Toolchain / infrastructure complexity",[70,176,177,180,183],{},[89,178,179],{"align":75},"Migration and change",[89,181,182],{"align":75},"Data migration, workflow redesign, testing, retraining, temporary parallel systems, and productivity loss during transition",[89,184,185],{"align":75},"One-time / scope-driven",[187,188],"br",{},[12,190,191],{},"As you can see, some costs change with headcount, while others depend more on usage or operational complexity. Model these drivers independently rather than assuming platform costs will rise in lockstep. Pipeline frequency or job duration, for example, can increase CI/CD compute costs even when team size stays the same.",[12,193,194],{},"AI introduces another variable. Depending on the platform, AI may be priced by seat, consumption, or a combination of the two. That can make AI consumption inherently difficult to predict and pricing confusing to understand. As adoption grows, model AI usage separately from headcount and account for which AI capabilities teams actually use, since both can affect the total.",[12,196,197],{},"Additionally, cost drivers are only one part of the comparison. DevOps platforms package capabilities differently, so compare the cost of meeting the same requirements rather than matching tier names. If one option includes security testing and another requires separate products, include those products — along with the work required to integrate and operate them — in the comparison.",[199,200,202],"h3",{"id":201},"how-your-runner-strategy-affects-cicd-compute-costs","How your runner strategy affects CI/CD compute costs",[12,204,205],{},"While seat licenses are fairly predictable, CI/CD compute is not. As pipeline activity grows, longer jobs or higher concurrency can push costs up even if your team size stays the same.",[12,207,208,214],{},[209,210,213],"a",{"href":211,"rel":212},"https://docs.gitlab.com/ci/runners/",[],"Runners"," are where that compute gets used. They pick up CI/CD jobs, execute them on a machine or container, then return the results to the platform.",[12,216,217],{},"A key cost decision is who manages that compute:",[19,219,220,227],{},[22,221,222,226],{},[223,224,225],"strong",{},"Vendor-hosted runners"," shift more of the expense into metered usage. They reduce the infrastructure your team has to operate, but costs can rise quickly as usage grows.",[22,228,229,232],{},[223,230,231],{},"Self-managed runners"," give you more control over the execution environment and infrastructure. They can be more economical for large, predictable workloads or when you already have capacity in place. The tradeoff is that your team owns the runner fleet and its operational overhead.",[12,234,235],{},"When determining your runner strategy, consider total cost — including storage, networking, security, monitoring, and maintenance — rather than infrastructure price alone. A strong approach should balance compute spend with operational overhead and developer experience as workloads change.",[32,237,239],{"id":238},"the-hidden-cost-of-tool-sprawl","The hidden cost of tool sprawl",[12,241,242],{},"Tool sprawl doesn’t happen overnight. It takes shape gradually, as teams add a tool for planning, another for CI/CD, one more for security, and so on. AI can accelerate the pattern as teams adopt coding assistants, agents, and other AI tools alongside the existing stack.",[12,244,245],{},"Add up the invoices, and you still won’t see the full cost, because each tool brings more work:",[19,247,248,254,260,266],{},[22,249,250,253],{},[223,251,252],{},"Integration maintenance",": Connections between systems need to be built and updated as APIs change.",[22,255,256,259],{},[223,257,258],{},"Administration",": Teams have to manage access, permissions, upgrades, and vendor contracts.",[22,261,262,265],{},[223,263,264],{},"Troubleshooting",": When a workflow breaks across tools, someone has to find where the problem started.",[22,267,268,271],{},[223,269,270],{},"Developer time",": Switching between systems and piecing together context can slow down everyday work.",[12,273,274,275,280],{},"That time can add up quickly. ",[209,276,279],{"href":277,"rel":278},"https://about.gitlab.com/resources/developer-survey/",[],"GitLab research"," found that DevSecOps professionals lose an average of 7 hours per week — nearly a full work day — dealing with inefficient processes.",[12,282,283,284,289],{},"The good news is that consolidation can reduce some of this overhead. If ",[209,285,288],{"href":286,"rel":287},"https://about.gitlab.com/platform/",[],"one platform replaces several tools"," without sacrificing capabilities your teams rely on, you may be able to lower licensing costs while also reducing the number of integrations and systems you have to maintain.",[32,291,293],{"id":292},"a-worksheet-to-estimate-annual-cost","A worksheet to estimate annual cost",[12,295,296],{},"Use the worksheet below to turn the cost categories we’ve examined into a working annual TCO estimate. Keep the assumptions consistent across every platform you evaluate, and capture the inputs behind each number so you can revisit the model as usage or pricing changes.",[12,298,299],{},"At a high level, annual TCO = platform costs + CI/CD compute and infrastructure + AI usage + adjacent tools + operational labor + allocated migration and change costs.",[64,301,302,318],{},[67,303,304],{},[70,305,306,309,312,315],{},[73,307,308],{},"Annual cost input",[73,310,311],{},"Quantity / usage",[73,313,314],{},"Unit cost / rate",[73,316,317],{},"Annual estimate",[84,319,320,339,357,373,390,408,426,442,459,477,492,509,527],{},[70,321,322,327,330,333],{},[89,323,324],{},[223,325,326],{},"Platform licenses",[89,328,329],{},"Number of paid seats",[89,331,332],{},"Annual price per seat",[89,334,335],{},[336,337,338],"em",{},"Seats × annual price",[70,340,341,346,349,352],{},[89,342,343],{},[223,344,345],{},"Usage-based platform charges",[89,347,348],{},"Forecast units consumed",[89,350,351],{},"Price per unit",[89,353,354],{},[336,355,356],{},"Usage × rate",[70,358,359,363,366,369],{},[89,360,361],{},[223,362,113],{},[89,364,365],{},"Forecast seats, credits, requests, or other usage units",[89,367,368],{},"Applicable seat or consumption rate",[89,370,371],{},[336,372,356],{},[70,374,375,380,383,386],{},[89,376,377],{},[223,378,379],{},"Hosted CI/CD compute",[89,381,382],{},"Forecast compute units or minutes",[89,384,385],{},"Applicable compute rate",[89,387,388],{},[336,389,356],{},[70,391,392,397,400,403],{},[89,393,394],{},[223,395,396],{},"Self-managed runner infrastructure",[89,398,399],{},"Compute, storage, networking, and monitoring required",[89,401,402],{},"Infrastructure rates",[89,404,405],{},[336,406,407],{},"Annual infrastructure spend",[70,409,410,415,418,421],{},[89,411,412],{},[223,413,414],{},"Security and compliance tools",[89,416,417],{},"Required products and usage",[89,419,420],{},"License and usage rates",[89,422,423],{},[336,424,425],{},"Annual spend",[70,427,428,433,436,438],{},[89,429,430],{},[223,431,432],{},"Other toolchain products",[89,434,435],{},"Required adjacent products",[89,437,420],{},[89,439,440],{},[336,441,425],{},[70,443,444,449,452,455],{},[89,445,446],{},[223,447,448],{},"Support, training, and services",[89,450,451],{},"Expected services",[89,453,454],{},"Contract or service rates",[89,456,457],{},[336,458,425],{},[70,460,461,466,469,472],{},[89,462,463],{},[223,464,465],{},"Platform operations labor",[89,467,468],{},"Estimated annual hours",[89,470,471],{},"Fully loaded hourly labor cost",[89,473,474],{},[336,475,476],{},"Hours × labor rate",[70,478,479,484,486,488],{},[89,480,481],{},[223,482,483],{},"Integration maintenance labor",[89,485,468],{},[89,487,471],{},[89,489,490],{},[336,491,476],{},[70,493,494,498,501,504],{},[89,495,496],{},[223,497,179],{},[89,499,500],{},"One-time migration effort",[89,502,503],{},"Total cost and allocation period",[89,505,506],{},[336,507,508],{},"Amount allocated to this year",[70,510,511,516,519,522],{},[89,512,513],{},[223,514,515],{},"Contingency",[89,517,518],{},"Uncertain usage or scope",[89,520,521],{},"Defined assumption",[89,523,524],{},[336,525,526],{},"Estimated allowance",[70,528,529,534,536,538],{},[89,530,531],{},[223,532,533],{},"TOTAL ANNUAL TCO",[89,535],{},[89,537],{},[89,539,540],{},[336,541,542],{},"Sum of annual estimates",[187,544],{},[12,546,547],{},"It’s important to put your TCO estimate in context. Dividing it by a useful unit — such as active developers or applications supported — can show how costs change as adoption grows.",[12,549,550],{},"Next, pressure-test your model. Build a few scenarios around changes in headcount, pipeline activity, AI adoption, or concurrency so you can see which costs change the most. Not every category will scale at the same rate, which is exactly why documenting your assumptions matters.",[12,552,553],{},"The same approach works for narrower product comparisons. If you’re evaluating CI/CD tools on their own, include more than platform and compute charges. Runner infrastructure, adjacent tools, and the labor required to operate them still belong in the model.",[12,555,556],{},[223,557,558,559,564],{},"Ready to run the numbers? ",[209,560,563],{"href":561,"rel":562},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/",[],"Try GitLab’s ROI calculator"," to model your current toolchain and identify potential cost or time savings.",[32,566,568],{"id":567},"how-to-reduce-your-platform-tco","How to reduce your platform TCO",[12,570,571],{},"While the ideal cost-saving strategy will depend on your unique workloads and priorities, there are several best practices that can likely help you reduce unnecessary spend.",[199,573,575],{"id":574},"right-size-licenses-before-renewal","Right-size licenses before renewal",[12,577,578],{},"Start with what you’re already paying for. Compare provisioned licenses with actual usage, then identify inactive seats or users on tiers that offer more capability than they need.",[12,580,581],{},"Renewals are also a good time to check for overlapping products. If you’re paying separately for a capability your platform already includes, compare the value of the specialized tool with its full cost (not just its license fee).",[199,583,585],{"id":584},"eliminate-cicd-work-you-dont-need","Eliminate CI/CD work you don’t need",[12,587,588],{},"Before trying to make CI/CD compute cheaper, reduce the amount of compute you consume in the first place.",[12,590,591],{},"Look for pipelines that run when they don’t need to, jobs that continue after newer pipelines make them irrelevant, or steps that consistently take longer than expected. Artifact retention and caching policies are also worth reviewing, as both can affect storage and pipeline efficiency.",[12,593,594,595,600],{},"Once unnecessary work is gone, right-size the remaining compute. The ",[209,596,599],{"href":597,"rel":598},"https://www.finops.org/framework/capabilities/usage-optimization/",[],"FinOps Foundation's usage optimization guidance"," recommends the same general sequence: remove waste first, then continue adjusting resources as demand changes.",[199,602,604],{"id":603},"build-flexibility-into-ai-spend","Build flexibility into AI spend",[12,606,607],{},"AI spend deserves the same attention. Watch how adoption and usage change rather than assuming AI costs will scale directly with headcount. When usage is difficult to predict, pricing flexibility can help reduce the risk of paying for capacity you don’t use, or having to revisit procurement every time demand grows.",[12,609,610,615],{},[209,611,614],{"href":612,"rel":613},"https://about.gitlab.com/blog/introducing-gitlab-flex/",[],"GitLab Flex"," is one example of this approach. It brings platform seats, AI usage, and other eligible usage-based capabilities under one annual commitment that can be reshaped month to month as needs change.",[199,617,619],{"id":618},"match-runner-capacity-to-demand","Match runner capacity to demand",[12,621,622],{},"As mentioned previously, runner strategy can have a big impact on CI/CD costs. Keeping self-managed capacity available for peak demand can leave infrastructure idle during quieter periods, while relying entirely on metered compute may become expensive at high volumes.",[12,624,625,626,631],{},"Choose runner capacity and pricing based on the shape of the workload. ",[209,627,630],{"href":628,"rel":629},"https://docs.gitlab.com/runner/runner_autoscale/",[],"Autoscaling"," can help self-managed runner fleets scale up and down with demand. For steady, predictable workloads, committed infrastructure or pricing models may make more economic sense.",[199,633,635],{"id":634},"consolidate-where-it-makes-sense","Consolidate where it makes sense",[12,637,638],{},"The best consolidation opportunities are often where work already has to move between tools. Bringing more of the software lifecycle into one platform can reduce handoffs and give teams a more consistent view of the work, which is especially useful when teams need to trace a change or troubleshoot a failure.",[12,640,641],{},"That doesn’t mean every point solution has to go. Keep specialized tools when they solve a distinct problem well enough to justify the added complexity. Otherwise, consolidation can simplify the toolchain and how teams work across it.",[199,643,645],{"id":644},"make-cost-optimization-continuous","Make cost optimization continuous",[12,647,648],{},"TCO changes as the business changes. A model built before a renewal may look very different six months later if pipeline volume grows, teams adopt new capabilities, or infrastructure changes.",[12,650,651],{},"Assign clear owners to the major cost drivers and review them regularly. Platform engineering might own CI/CD consumption, for example, while procurement tracks contracts and finance validates labor assumptions.",[12,653,654],{},"It’s also important that you prioritize optimization work by its likely return. A small saving may not be worth a large engineering project or added operational risk. For example, cutting a recurring compute expense with a simple pipeline change may be worth doing; re-architecting a stable workflow to save a marginal amount each month probably isn’t.",[656,657,658],"blockquote",{},[12,659,660,661,666],{},"When you're ready to run GitLab through your model, ",[209,662,665],{"href":663,"rel":664},"https://about.gitlab.com/pricing/",[],"see GitLab plans and pricing"," to fill in seats, compute minutes, and AI usage with published rates.",{"title":668,"searchDepth":669,"depth":669,"links":670},"",2,[671,672,676,677,678],{"id":34,"depth":669,"text":35},{"id":58,"depth":669,"text":59,"children":673},[674],{"id":201,"depth":675,"text":202},3,{"id":238,"depth":669,"text":239},{"id":292,"depth":669,"text":293},{"id":567,"depth":669,"text":568,"children":679},[680,681,682,683,684,685],{"id":574,"depth":675,"text":575},{"id":584,"depth":675,"text":585},{"id":603,"depth":675,"text":604},{"id":618,"depth":675,"text":619},{"id":634,"depth":675,"text":635},{"id":644,"depth":675,"text":645},"devsecops","2026-09-11","Budget pressure on your toolchain? See what goes into DevOps platform costs, from compute to security to tool sprawl, and where to cut. ","md",null,{"header":692,"groups":693},"FAQ: How to compare costs across platforms",[694],{"questions":695},[696,699,702,705,708],{"question":697,"answer":698},"What does a like-for-like comparison look like?","Start by defining the workload and the requirements each option must meet. Use the same assumptions about team size and CI/CD demand, and apply the same AI, security, storage, and support requirements to both.\n\nBecause platforms package and meter capabilities differently, comparing a single advertised rate rarely tells you much. Calculate what each option would actually cost to support the workload, then add any tooling, infrastructure, integration work, and internal labor required around it.\n\nThe goal is to compare the annual cost of meeting the same requirements, not to make different billing units look equivalent. ",{"question":700,"answer":701},"How should you compare hosted and self-managed options?","Look at where each model shifts the cost. Hosted services put more of the bill into metered consumption and reduce the infrastructure your team has to operate. Self-managed options give you more control but can introduce idle capacity and ongoing administrative overhead.\n\nApply the same performance, security, availability, and data residency requirements to both. Then include the labor required to keep the self-managed environment running. ",{"question":703,"answer":704},"Should migration costs be part of TCO?","Yes. A platform may be less expensive to operate and still require a meaningful upfront investment to adopt. Include the work required to move data and integrations, test new workflows, retrain teams, and run old and new systems in parallel. Account for any temporary impact on productivity as teams adjust, then show migration costs separately from recurring costs so stakeholders can see the difference.",{"question":706,"answer":707},"How often should you update the model?","Update your model anytime assumptions change. Renewals are an obvious checkpoint, but shifts in headcount, pipeline demand, infrastructure, or platform adoption can materially change the economics sooner.\n\nRegular reviews can also surface costs that tend to disappear into the background, such as unused licenses or steadily rising compute consumption.",{"question":709,"answer":710},"What should you present to finance leaders?","Start with the annual TCO and the few variables that have the biggest effect on it. Show one-time costs separately from recurring spend, and include an expected scenario and a higher-usage case so budget owners can see how the model behaves when demand changes.\n\nPair those numbers with the capabilities and service levels each option provides. A cheaper platform is not necessarily the better economic choice if meeting the same requirements requires more tools, infrastructure, or internal labor.\n\nA good TCO model won’t automatically make a platform decision for you, but it will make the tradeoffs visible, giving engineering, procurement, and finance a common set of assumptions to work from. ",false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1778087000/qdfsf8kz6ebfnopx9v2e.png",{},true,"/en-us/blog/how-to-calculate-devops-platform-total-cost-of-ownership",{"config":717,"title":5,"description":688},{"noIndex":711},"how-to-calculate-devops-platform-total-cost-of-ownership","en-us/blog/how-to-calculate-devops-platform-total-cost-of-ownership",[721,722],"DevSecOps platform","CI/CD","BlogPost","cNxH7NLxQ8p9l8M5qtoHLKRIZR8xC4EdW_cEh-MiOE0",{"logo":726,"freeTrial":731,"sales":736,"login":741,"items":746,"search":1076,"minimal":1107,"duo":1126,"switchNav":1135,"pricingDeployment":1146},{"config":727},{"href":728,"dataGaName":729,"dataGaLocation":730},"/","gitlab logo","header",{"text":732,"config":733},"Get free trial",{"href":734,"dataGaName":735,"dataGaLocation":730},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":737,"config":738},"Request a demo",{"href":739,"dataGaName":740,"dataGaLocation":730},"/request-a-demo/","sales",{"text":742,"config":743},"Sign in",{"href":744,"dataGaName":745,"dataGaLocation":730},"https://gitlab.com/users/sign_in/","sign in",[747,832,920,925,1000,1054],{"text":748,"left":714,"config":749,"menu":751},"Platform",{"dataNavLevelOne":750},"platform",{"type":752,"link":753,"columns":757,"feature":821},"lists",{"text":754,"config":755},"Explore the Platform",{"href":756,"dataGaName":750,"dataGaLocation":730},"/platform/",[758,780,803],{"title":759,"items":760},"Execution & Workflows",[761,765,770,775],{"text":722,"config":762},{"href":763,"dataGaLocation":730,"dataGaName":764},"/solutions/continuous-integration/","ci/cd",{"text":766,"config":767},"Source Code Management",{"href":768,"dataGaLocation":730,"dataGaName":769},"/solutions/source-code-management/","source code management",{"text":771,"config":772},"Agile Delivery",{"href":773,"dataGaLocation":730,"dataGaName":774},"/solutions/agile-delivery/","agile delivery",{"text":776,"config":777},"Artifact Management",{"href":778,"dataGaLocation":730,"dataGaName":779},"/artifact-central/","artifact management",{"title":781,"items":782},"Security & Governance",[783,788,793,798],{"text":784,"config":785},"Application Security Testing",{"href":786,"dataGaLocation":730,"dataGaName":787},"/solutions/application-security-testing/","application security testing",{"text":789,"config":790},"Governance & Compliance",{"href":791,"dataGaLocation":730,"dataGaName":792},"/solutions/software-compliance/","governance and compliance",{"text":794,"config":795},"Secrets Management",{"href":796,"dataGaLocation":730,"dataGaName":797},"/gitlab-secrets-manager/","secrets management",{"text":799,"config":800},"Supply Chain Security",{"href":801,"dataGaLocation":730,"dataGaName":802},"/solutions/supply-chain/","supply chain security",{"title":804,"items":805},"Context & AI",[806,811,816],{"text":807,"config":808},"Agentic Orchestration",{"href":809,"dataGaLocation":730,"dataGaName":810},"/gitlab-duo-agent-platform/","agentic orchestration",{"text":812,"config":813},"Context Graph",{"href":814,"dataGaLocation":730,"dataGaName":815},"/gitlab-orbit/","context graph",{"text":817,"config":818},"Visibility & Measurement",{"href":819,"dataGaLocation":730,"dataGaName":820},"/solutions/visibility-measurement/","visibility and measurement",{"config":822,"title":825,"text":826,"link":827},{"background":823,"textColor":824},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1790185102/o7dn32anqcb6z8dgd3as.jpg')","#000","Why GitLab","One platform for speed with control across your software lifecycle.",{"text":828,"config":829},"Learn more",{"href":830,"dataGaName":831,"dataGaLocation":730},"/why-gitlab/","why gitlab",{"text":833,"left":714,"config":834,"menu":836},"Solutions",{"dataNavLevelOne":835},"solutions",{"type":752,"link":837,"columns":841,"feature":911},{"text":838,"config":839},"View all Solutions",{"href":840,"dataGaName":835,"dataGaLocation":730},"/solutions/",[842,860,878],{"title":843,"items":844},"Outcomes",[845,850,855],{"text":846,"config":847},"DevOps Modernization",{"href":848,"dataGaLocation":730,"dataGaName":849},"/assessments/devops-modernization-assessment/","devops modernization",{"text":851,"config":852},"Security Modernization",{"href":853,"dataGaLocation":730,"dataGaName":854},"/assessments/security-modernization-assessment/","security modernization",{"text":856,"config":857},"AI Modernization",{"href":858,"dataGaLocation":730,"dataGaName":859},"/assessments/ai-modernization-assessment/","ai modernization",{"title":861,"items":862},"By size",[863,868,873],{"text":864,"config":865},"Enterprise",{"href":866,"dataGaLocation":730,"dataGaName":867},"/enterprise/","enterprise",{"text":869,"config":870},"Small Business",{"href":871,"dataGaLocation":730,"dataGaName":872},"/small-business/","small business",{"text":874,"config":875},"Startups",{"href":876,"dataGaLocation":730,"dataGaName":877},"/solutions/startups/","startups",{"title":879,"items":880},"Industries",[881,886,891,896,901,906],{"text":882,"config":883},"Financial Services",{"href":884,"dataGaLocation":730,"dataGaName":885},"/solutions/finance/","financial services",{"text":887,"config":888},"Public Sector",{"href":889,"dataGaLocation":730,"dataGaName":890},"/solutions/public-sector/","public sector",{"text":892,"config":893},"Telecommunications",{"href":894,"dataGaLocation":730,"dataGaName":895},"/solutions/telecommunications/","telecommunications",{"text":897,"config":898},"Automotive",{"href":899,"dataGaLocation":730,"dataGaName":900},"/solutions/automotive/","automotive",{"text":902,"config":903},"Education",{"href":904,"dataGaLocation":730,"dataGaName":905},"/solutions/education/","education",{"text":907,"config":908},"Aerospace",{"href":909,"dataGaLocation":730,"dataGaName":910},"/solutions/aerospace/","aerospace",{"config":912,"title":913,"text":914,"link":915},{"background":823,"textColor":824},"GitLab Security Standard","Learn how to harden your software factory and let AI agents earn autonomy, without trading away security.",{"text":916,"config":917},"Explore the standard",{"href":918,"dataGaName":919,"dataGaLocation":730},"/gitlab-security-standard/","gitlab security standard",{"text":921,"config":922},"Pricing",{"href":923,"dataGaName":924,"dataGaLocation":730,"dataNavLevelOne":924},"/pricing/","pricing",{"text":926,"config":927,"menu":929},"Resources",{"dataNavLevelOne":928},"resources",{"type":752,"link":930,"columns":934,"feature":991},{"text":931,"config":932},"View all resources",{"href":933,"dataGaName":928,"dataGaLocation":730},"/resources/",[935,963],{"title":936,"items":937},"Discover",[938,943,948,953,958],{"text":939,"config":940},"Docs",{"href":941,"dataGaName":942,"dataGaLocation":730},"https://docs.gitlab.com/","docs",{"text":944,"config":945},"University",{"href":946,"dataGaName":947,"dataGaLocation":730},"https://university.gitlab.com/","university",{"text":949,"config":950},"Demo Series",{"href":951,"dataGaName":952,"dataGaLocation":730},"/gitlab-technical-demo-series/","demo series",{"text":954,"config":955},"Demo Hub",{"href":956,"dataGaName":957,"dataGaLocation":730},"/demo-hub/","demo hub",{"text":959,"config":960},"Services",{"href":961,"dataGaName":962,"dataGaLocation":730},"/services/","services",{"title":964,"items":965},"Connect",[966,971,976,981,986],{"text":967,"config":968},"Blog",{"href":969,"dataGaName":970,"dataGaLocation":730},"/blog/","blog",{"text":972,"config":973},"Community",{"href":974,"dataGaName":975,"dataGaLocation":730},"/community/","community",{"text":977,"config":978},"Customers",{"href":979,"dataGaName":980,"dataGaLocation":730},"/customers/","customers",{"text":982,"config":983},"Partners",{"href":984,"dataGaName":985,"dataGaLocation":730},"/partners/","partners",{"text":987,"config":988},"Events",{"href":989,"dataGaName":990,"dataGaLocation":730},"/events/","events",{"config":992,"title":993,"text":994,"link":995},{"background":823,"textColor":824},"What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":996,"config":997},"Read the latest",{"href":998,"dataGaName":999,"dataGaLocation":730},"/whats-new/","whats new",{"text":1001,"config":1002,"menu":1004},"Company",{"dataNavLevelOne":1003},"company",{"type":752,"columns":1005},[1006],{"items":1007},[1008,1013,1019,1024,1029,1034,1039,1044,1049],{"text":1009,"config":1010},"About",{"href":1011,"dataGaName":1012,"dataGaLocation":730},"/company/","about",{"text":1014,"config":1015,"footerGa":1018},"Jobs",{"href":1016,"dataGaName":1017,"dataGaLocation":730},"/jobs/","jobs",{"dataGaName":1017},{"text":1020,"config":1021},"Press",{"href":1022,"dataGaName":1023,"dataGaLocation":730},"/press/","press",{"text":1025,"config":1026},"Handbook",{"href":1027,"dataGaName":1028,"dataGaLocation":730},"https://handbook.gitlab.com/","handbook",{"text":1030,"config":1031},"Leadership",{"href":1032,"dataGaName":1033,"dataGaLocation":730},"/company/team/e-group/","leadership",{"text":1035,"config":1036},"Investor relations",{"href":1037,"dataGaName":1038,"dataGaLocation":730},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1040,"config":1041},"Trust Center",{"href":1042,"dataGaName":1043,"dataGaLocation":730},"/security/","trust center",{"text":1045,"config":1046},"AI Transparency Center",{"href":1047,"dataGaName":1048,"dataGaLocation":730},"/ai-transparency-center/","ai transparency center",{"text":1050,"config":1051},"Newsletter",{"href":1052,"dataGaName":1053,"dataGaLocation":730},"/company/contact/#contact-forms","newsletter",{"text":1055,"config":1056,"menu":1057},"Contact us",{"dataNavLevelOne":1003},{"type":752,"columns":1058},[1059],{"items":1060},[1061,1066,1071],{"text":1062,"config":1063},"Talk to sales",{"href":1064,"dataGaName":1065,"dataGaLocation":730},"/sales/","talk to sales",{"text":1067,"config":1068},"Support portal",{"href":1069,"dataGaName":1070,"dataGaLocation":730},"https://support.gitlab.com/hc/en-us","support portal",{"text":1072,"config":1073},"Customer portal",{"href":1074,"dataGaName":1075,"dataGaLocation":730},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1077,"login":1078,"suggestions":1085},"Close",{"text":1079,"link":1080},"To search repositories and projects, login to",{"text":1081,"config":1082},"gitlab.com",{"href":744,"dataGaName":1083,"dataGaLocation":1084},"search login","search",{"text":1086,"default":1087},"Suggestions",[1088,1091,1094,1096,1100,1104],{"text":1089,"config":1090},"GitLab Duo Agent Platform",{"href":809,"dataGaName":1089,"dataGaLocation":1084},{"text":1092,"config":1093},"Code Suggestions (AI)",{"href":809,"dataGaName":1092,"dataGaLocation":1084},{"text":722,"config":1095},{"href":763,"dataGaName":722,"dataGaLocation":1084},{"text":1097,"config":1098},"GitLab on AWS",{"href":1099,"dataGaName":1097,"dataGaLocation":1084},"/partners/technology-partners/aws/",{"text":1101,"config":1102},"GitLab on Google Cloud",{"href":1103,"dataGaName":1101,"dataGaLocation":1084},"/partners/technology-partners/google-cloud-platform/",{"text":1105,"config":1106},"Why GitLab?",{"href":830,"dataGaName":1105,"dataGaLocation":1084},{"freeTrial":1108,"mobileIcon":1113,"desktopIcon":1118,"secondaryButton":1121},{"text":1109,"config":1110},"Start free trial",{"href":1111,"dataGaName":735,"dataGaLocation":1112},"https://gitlab.com/-/trials/new/","nav",{"altText":1114,"config":1115},"Gitlab Icon",{"src":1116,"dataGaName":1117,"dataGaLocation":1112},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1114,"config":1119},{"src":1120,"dataGaName":1117,"dataGaLocation":1112},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1122,"config":1123},"Get Started",{"href":1124,"dataGaName":1125,"dataGaLocation":1112},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1127,"mobileIcon":1131,"desktopIcon":1133},{"text":1128,"config":1129},"Learn more about GitLab Duo",{"href":809,"dataGaName":1130,"dataGaLocation":1112},"gitlab duo",{"altText":1114,"config":1132},{"src":1116,"dataGaName":1117,"dataGaLocation":1112},{"altText":1114,"config":1134},{"src":1120,"dataGaName":1117,"dataGaLocation":1112},{"button":1136,"mobileIcon":1141,"desktopIcon":1143},{"text":1137,"config":1138},"/switch",{"href":1139,"dataGaName":1140,"dataGaLocation":1112},"#contact","switch",{"altText":1114,"config":1142},{"src":1116,"dataGaName":1117,"dataGaLocation":1112},{"altText":1114,"config":1144},{"src":1145,"dataGaName":1117,"dataGaLocation":1112},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1147,"mobileIcon":1152,"desktopIcon":1154},{"text":1148,"config":1149},"Back to pricing",{"href":923,"dataGaName":1150,"dataGaLocation":1112,"icon":1151},"back to pricing","GoBack",{"altText":1114,"config":1153},{"src":1116,"dataGaName":1117,"dataGaLocation":1112},{"altText":1114,"config":1155},{"src":1120,"dataGaName":1117,"dataGaLocation":1112},{"title":1157,"button":1158,"config":1164},"Ship at agent speed. Prove every step. Transcend is here.",{"text":1159,"config":1160},"Watch now",{"href":1161,"dataGaName":1162,"dataGaLocation":1163},"/events/transcend/virtual/#watch-gitlab-transcend","transcend-october-2026-banner","global-banner",{"layout":1165,"disabled":711},"release",{"data":1167},{"text":1168,"source":1169,"edit":1175,"contribute":1180,"config":1185,"items":1190,"minimal":1415},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1170,"config":1171},"View page source",{"href":1172,"dataGaName":1173,"dataGaLocation":1174},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1176,"config":1177},"Edit this page",{"href":1178,"dataGaName":1179,"dataGaLocation":1174},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1181,"config":1182},"Please contribute",{"href":1183,"dataGaName":1184,"dataGaLocation":1174},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1186,"facebook":1187,"youtube":1188,"linkedin":1189},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1191,1238,1295,1342,1383],{"title":921,"links":1192,"subMenu":1207},[1193,1197,1202],{"text":1194,"config":1195},"View plans",{"href":923,"dataGaName":1196,"dataGaLocation":1174},"view plans",{"text":1198,"config":1199},"Why Premium?",{"href":1200,"dataGaName":1201,"dataGaLocation":1174},"/pricing/premium/","why premium",{"text":1203,"config":1204},"Why Ultimate?",{"href":1205,"dataGaName":1206,"dataGaLocation":1174},"/pricing/ultimate/","why ultimate",[1208],{"title":1209,"links":1210},"Contact Us",[1211,1214,1216,1218,1223,1228,1233],{"text":1212,"config":1213},"Contact sales",{"href":1064,"dataGaName":740,"dataGaLocation":1174},{"text":1067,"config":1215},{"href":1069,"dataGaName":1070,"dataGaLocation":1174},{"text":1072,"config":1217},{"href":1074,"dataGaName":1075,"dataGaLocation":1174},{"text":1219,"config":1220},"Status",{"href":1221,"dataGaName":1222,"dataGaLocation":1174},"https://status.gitlab.com/","status",{"text":1224,"config":1225},"Terms of use",{"href":1226,"dataGaName":1227,"dataGaLocation":1174},"/terms/","terms of use",{"text":1229,"config":1230},"Privacy statement",{"href":1231,"dataGaName":1232,"dataGaLocation":1174},"/privacy/","privacy statement",{"text":1234,"config":1235},"Cookie preferences",{"dataGaName":1236,"dataGaLocation":1174,"id":1237,"isOneTrustButton":714},"cookie preferences","ot-sdk-btn",{"title":748,"links":1239,"subMenu":1253},[1240,1243,1245,1247,1249,1251],{"text":1241,"config":1242},"Explore the platform",{"href":756,"dataGaName":750,"dataGaLocation":1174},{"text":807,"config":1244},{"href":809,"dataGaName":810,"dataGaLocation":1174},{"text":722,"config":1246},{"href":763,"dataGaName":764,"dataGaLocation":1174},{"text":812,"config":1248},{"href":814,"dataGaName":815,"dataGaLocation":1174},{"text":794,"config":1250},{"href":796,"dataGaName":797,"dataGaLocation":1174},{"text":825,"config":1252},{"href":830,"dataGaName":831,"dataGaLocation":1174},[1254],{"title":1255,"links":1256},"Topics",[1257,1261,1266,1271,1276,1280,1285,1290],{"text":722,"config":1258},{"href":1259,"dataGaName":1260,"dataGaLocation":1174},"/topics/ci-cd/","cicd",{"text":1262,"config":1263},"GitOps",{"href":1264,"dataGaName":1265,"dataGaLocation":1174},"/topics/gitops/","gitops",{"text":1267,"config":1268},"DevOps",{"href":1269,"dataGaName":1270,"dataGaLocation":1174},"/topics/devops/","devops",{"text":1272,"config":1273},"Version Control",{"href":1274,"dataGaName":1275,"dataGaLocation":1174},"/topics/version-control/","version control",{"text":1277,"config":1278},"DevSecOps",{"href":1279,"dataGaName":686,"dataGaLocation":1174},"/topics/devsecops/",{"text":1281,"config":1282},"Cloud Native",{"href":1283,"dataGaName":1284,"dataGaLocation":1174},"/topics/cloud-native/","cloud native",{"text":1286,"config":1287},"AI for Coding",{"href":1288,"dataGaName":1289,"dataGaLocation":1174},"/topics/devops/ai-for-coding/","ai for coding",{"text":1291,"config":1292},"Agentic AI",{"href":1293,"dataGaName":1294,"dataGaLocation":1174},"/topics/agentic-ai/","agentic ai",{"title":833,"links":1296},[1297,1300,1303,1306,1309,1312,1314,1316,1318,1320,1322,1325,1327,1330,1334,1338],{"text":1298,"config":1299},"DevOps modernization",{"href":848,"dataGaName":849,"dataGaLocation":1174},{"text":1301,"config":1302},"Security modernization",{"href":853,"dataGaName":854,"dataGaLocation":1174},{"text":1304,"config":1305},"AI modernization",{"href":858,"dataGaName":859,"dataGaLocation":1174},{"text":1307,"config":1308},"Financial services",{"href":884,"dataGaName":885,"dataGaLocation":1174},{"text":1310,"config":1311},"Public sector",{"href":889,"dataGaName":890,"dataGaLocation":1174},{"text":892,"config":1313},{"href":894,"dataGaName":895,"dataGaLocation":1174},{"text":897,"config":1315},{"href":899,"dataGaName":900,"dataGaLocation":1174},{"text":902,"config":1317},{"href":904,"dataGaName":905,"dataGaLocation":1174},{"text":907,"config":1319},{"href":909,"dataGaName":910,"dataGaLocation":1174},{"text":864,"config":1321},{"href":866,"dataGaName":867,"dataGaLocation":1174},{"text":1323,"config":1324},"Small business",{"href":871,"dataGaName":872,"dataGaLocation":1174},{"text":874,"config":1326},{"href":876,"dataGaName":877,"dataGaLocation":1174},{"text":1262,"config":1328},{"href":1329,"dataGaName":1265,"dataGaLocation":1174},"/solutions/gitops/",{"text":1331,"config":1332},"Software composition analysis",{"href":801,"dataGaName":1333,"dataGaLocation":1174},"software composition analysis",{"text":1335,"config":1336},"Value stream management",{"href":819,"dataGaName":1337,"dataGaLocation":1174},"value stream management",{"text":1339,"config":1340},"All solutions",{"href":840,"dataGaName":1341,"dataGaLocation":1174},"all solutions",{"title":926,"links":1343},[1344,1349,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1379],{"text":1345,"config":1346},"Install",{"href":1347,"dataGaName":1348,"dataGaLocation":1174},"/install/","install",{"text":1350,"config":1351},"Quick start guides",{"href":1352,"dataGaName":1353,"dataGaLocation":1174},"/get-started/","quick setup checklists",{"text":939,"config":1355},{"href":941,"dataGaName":942,"dataGaLocation":1174},{"text":944,"config":1357},{"href":946,"dataGaName":947,"dataGaLocation":1174},{"text":949,"config":1359},{"href":951,"dataGaName":952,"dataGaLocation":1174},{"text":954,"config":1361},{"href":956,"dataGaName":957,"dataGaLocation":1174},{"text":959,"config":1363},{"href":961,"dataGaName":962,"dataGaLocation":1174},{"text":967,"config":1365},{"href":969,"dataGaName":970,"dataGaLocation":1174},{"text":972,"config":1367},{"href":974,"dataGaName":975,"dataGaLocation":1174},{"text":977,"config":1369},{"href":979,"dataGaName":980,"dataGaLocation":1174},{"text":982,"config":1371},{"href":984,"dataGaName":985,"dataGaLocation":1174},{"text":987,"config":1373},{"href":989,"dataGaName":990,"dataGaLocation":1174},{"text":1050,"config":1375},{"href":1052,"dataGaName":1053,"dataGaLocation":1174},{"text":1377,"config":1378},"What's new",{"href":998,"dataGaName":999,"dataGaLocation":1174},{"text":1380,"config":1381},"All resources",{"href":933,"dataGaName":1382,"dataGaLocation":1174},"all resources",{"title":1001,"links":1384},[1385,1387,1389,1391,1393,1395,1397,1399,1401,1405,1410],{"text":1009,"config":1386},{"href":1011,"dataGaName":1003,"dataGaLocation":1174},{"text":1014,"config":1388},{"href":1016,"dataGaName":1017,"dataGaLocation":1174},{"text":1020,"config":1390},{"href":1022,"dataGaName":1023,"dataGaLocation":1174},{"text":1025,"config":1392},{"href":1027,"dataGaName":1028,"dataGaLocation":1174},{"text":1030,"config":1394},{"href":1032,"dataGaName":1033,"dataGaLocation":1174},{"text":1035,"config":1396},{"href":1037,"dataGaName":1038,"dataGaLocation":1174},{"text":1040,"config":1398},{"href":1042,"dataGaName":1043,"dataGaLocation":1174},{"text":1045,"config":1400},{"href":1047,"dataGaName":1048,"dataGaLocation":1174},{"text":1402,"config":1403},"Sustainability",{"href":1404,"dataGaName":1402,"dataGaLocation":1174},"/sustainability/",{"text":1406,"config":1407},"Diversity, inclusion and belonging (DIB)",{"href":1408,"dataGaName":1409,"dataGaLocation":1174},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1411,"config":1412},"Modern Slavery Transparency Statement",{"href":1413,"dataGaName":1414,"dataGaLocation":1174},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1416},[1417,1420,1423],{"text":1418,"config":1419},"Terms",{"href":1226,"dataGaName":1227,"dataGaLocation":1174},{"text":1421,"config":1422},"Cookies",{"dataGaName":1236,"dataGaLocation":1174,"id":1237,"isOneTrustButton":714},{"text":1424,"config":1425},"Privacy",{"href":1231,"dataGaName":1232,"dataGaLocation":1174},[1427],{"id":1428,"title":1429,"body":690,"config":1430,"content":1432,"description":690,"extension":1435,"meta":1436,"navigation":714,"path":1437,"seo":1438,"stem":1439,"__hash__":1440},"blogAuthors/en-us/blog/authors/gitlab.yml","Gitlab",{"template":1431},"BlogAuthor",{"name":7,"config":1433},{"headshot":1434,"ctfId":7},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","yml",{},"/en-us/blog/authors/gitlab",{},"en-us/blog/authors/gitlab","XCBKIcPoCs6zi2oHG7o-bAp52Jhaw8_zGhIJ2jNrEjU",[1442,1449,1457],{"title":1443,"description":1444,"heroImage":1445,"category":686,"date":1446,"authors":1447,"slug":1448,"externalUrl":690},"How to design GitLab for enterprise scale","Plan an enterprise rollout with clear choices for deployment, runner capacity, availability, disaster recovery, and pipeline performance. ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058602/epl3sinfezlzxnppxak6.png","2026-09-22",[7],"how-to-design-gitlab-for-enterprise-scale",{"title":1450,"description":1451,"heroImage":1452,"category":686,"date":1453,"authors":1454,"slug":1456,"externalUrl":690},"Consolidate your GitLab stack with Gitaly on Kubernetes","Discover how to install Gitaly on Kubernetes, which is now generally available.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756500636/wmey6kqzzuhirk88w2de.png","2026-05-07",[1455],"Olivier Campeau","gitaly-on-kubernetes-generally-available",{"title":1458,"description":1459,"heroImage":1460,"category":686,"date":1461,"authors":1462,"slug":1464,"externalUrl":690},"Teaching software development the easy way using GitLab","Learn how University of Washington lecturer Stephen G. Dame uses GitLab for Education to manage student assignments, distribute course materials, and provide inline code feedback at scale.\n","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659537/Blog/Hero%20Images/display-article-image-0679-1800x945-fy26.png","2026-04-29",[1463],"Rod Burns","teaching-software-development-the-easy-way-using-gitlab",{"header":1466,"text":1467,"button":1471,"disclaimer":1474},"Start your free\n\n30-day GitLab trial\n",[1468,1469,1470],"GitLab Duo Agent Platform access","Try our most advanced features","Automate complex tasks with AI",{"text":732,"config":1472},{"href":1473,"dataGaName":735,"dataGaLocation":970},"https://gitlab.com/-/trials/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/blog/","No credit card required.",{"header":1476,"blurb":1477,"button":1478,"secondaryButton":1483},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1479,"config":1480},"Get your free trial",{"href":1481,"dataGaName":735,"dataGaLocation":1482},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1212,"config":1484},{"href":1064,"dataGaName":740,"dataGaLocation":1482},1791944916997]