[{"data":1,"prerenderedAt":1070},["ShallowReactive",2],{"/blog/remote-pair-programming-tips":3,"navigation-en-us":284,"banner-en-us":711,"footer-en-us":721,"blog-post-authors-en-us-Rebecca Dodd":966,"blog-related-posts-en-us-remote-pair-programming-tips":981,"blog-promotions-en-us":1006,"next-steps-en-us":1060},{"id":4,"title":5,"authors":6,"body":8,"category":263,"date":264,"description":265,"extension":266,"externalUrl":267,"faq":267,"featured":268,"heroImage":269,"meta":270,"navigation":271,"path":272,"seo":273,"slug":277,"stem":278,"tags":279,"template":282,"updatedDate":267,"__hash__":283},"blogPosts/en-us/blog/remote-pair-programming-tips.md","4 tips for agile remote pair programming",[7],"Rebecca Dodd",{"type":9,"value":10,"toc":243},"minimark",[11,24,27,35,40,43,46,50,53,56,59,63,66,69,72,76,79,82,85,89,92,101,105,108,111,127,130,138,141,144,147,151,156,159,162,165,169,178,181,184,188,191,195,198,202,211,214,229,238],[12,13,14],"p",{},[15,16,17,18,23],"em",{},"This is the second post in our ongoing series about remote work and engineering. Check out our first post,\n",[19,20,22],"a",{"href":21},"/blog/tips-for-managing-engineering-teams-remotely/","Tips for engineering managers learning to lead remotely",".",[12,25,26],{},"As more companies shift to remote-first or all-remote work, engineers may be feeling the loss\nof their teammates' company. The good news is that unlike other forms of in-person collaboration,\npair programming translates really well to remote work, and in some cases is even more effective.",[12,28,29,30,34],{},"Our support engineers do regular\npair programming on tickets, and many speak of it as a highlight of their work weeks due to the\nsocial element of the calls, as well as it proving more efficient for some troublesome tickets.\n(We'll dive into why, but feel free to jump to our ",[19,31,33],{"href":32},"#how-to-get-the-most-out-of-remote-pairing","tips for effective remote pair programming","\nif you prefer!)",[36,37,39],"h2",{"id":38},"what-is-pair-programming","What is pair programming?",[12,41,42],{},"Pair programming (sometimes referred to as paired programming)  is an agile, collaborative software development method done between a team of two developers that each take on an individual role. These roles are called the driver and the navigator. The driver works directly at the computer while the navigator concentrates on the overall programming direction.",[12,44,45],{},"The purpose of pair programming is to design, code, and test user stories all on one computer. Although the driver is the primary teammate at the keyboard, this system requires that each developer role have equal time and responsibility to complete their part of the development. The driver writes the code and the navigator reviews it, and these roles can be switched between the two teammates as needed.",[36,47,49],{"id":48},"its-more-than-just-work","It's more than just work",[12,51,52],{},"Ronald van Zon, senior support engineer, explained that pair programming provides an opportunity for team members to chat about their lives outside of work, instead of focusing solely on outstanding tickets.",[12,54,55],{},"\"You see someone face to face, so you might ask them, 'Hey, how was Christmas? How are you doing?'\nIf they have something going on in their private life, the next time I see them I will ask about it, so there's a social aspect to it.\"",[12,57,58],{},"\"It's a lot of fun. In cases where you're really focused on work and you have a very difficult ticket, it's actually very nice to have someone there just to throw your ideas at.\"",[36,60,62],{"id":61},"you-see-the-problem-more-clearly","You see the problem more clearly",[12,64,65],{},"Instead of relying solely on your judgment, programming in pairs means your teammate might ask you questions about something, introducing ideas you hadn't necessarily thought of, and identifying gaps you would otherwise miss.",[12,67,68],{},"\"For example, we had one very long-running ticket, where we'd tried a hundred thousand things already,\nand weren't sure what to do next,\" Ronald says. \"Just by talking with a group and explaining what the situation\nwas helped me realize what the next steps should be. I could have looked at that ticket the entire\nday and wouldn't have come up with it on my own.\"",[12,70,71],{},"Senior support\nengineer Arihant Godha explains another scenario where pair programming paid off in a big way. \"In one of our pairings we worked\non a complex customer issue related to merge trains, where we did a multi-cross-team pairing\nand identified the crucial issue which was a blocker for one of our biggest customers.\nWe didn't just identify the problem, we also found the workaround for it until our developers\nwere able to deliver a fix.\"",[36,73,75],{"id":74},"you-can-pool-your-knowledge","You can pool your knowledge",[12,77,78],{},"As the saying goes, two heads are better than one. Pair programming allows engineers who may be experts on different things to come together to tackle a single problem.",[12,80,81],{},"\"Pairing on tickets is a great way to collaborate on problem solving,\" says Cynthia Ng,\nsenior support engineer. \"It’s especially useful at GitLab, where we have a single product that\ncovers a wide variety of areas, because each person has expertise on different parts.\nSeeing how others approach and solve problems can also greatly inform your own work as well.\"",[12,83,84],{},"Support engineer Anton Smith agrees: \"I find that I learn and absorb so much knowledge just from conversing with another support engineer in a pairing call.\"",[36,86,88],{"id":87},"you-get-to-the-best-solution","You get to the best solution",[12,90,91],{},"\"A problem can have multiple solutions and multiple approaches to solve,\" says Arihant.\n\"Sometimes ticket pairing gives you the best approach to solve a ticket. It also helps you in learning\nand sharing knowledge. For example: If you can ask for all the required information in one\nticket response rather than having lots of back and forth, then it’s a great user experience.\"",[12,93,94,95,100],{},"Cynthia shares a specific example from her past experience with pair programming. \"Davin Walker and I paired a couple of times on getting trials\nand their expiry dates showing on the admin side of GitLab’s Customers Portal.\nThe ",[19,96,99],{"href":97,"rel":98},"https://gitlab.com/gitlab-org/customers-gitlab-com/-/merge_requests/2096",[],"merge request","\nis meant to help improve our team’s efficiency in handling SaaS trial-related requests.\nPairing really helped to work out the scope of the issue and what we could ship as the first iteration.\"",[36,102,104],{"id":103},"benefits-of-pair-programming","Benefits of pair programming",[12,106,107],{},"The benefit of pair programming is that there are two sets of eyes to help review the code being produced to ensure that it is as good as it possibly can be. This is commonly known as the four-eyes principle.",[12,109,110],{},"This leads to other benefits, like…",[112,113,114,118,121,124],"ul",{},[115,116,117],"li",{},"Reducing the number of coding mistakes",[115,119,120],{},"Becoming a better coder overall",[115,122,123],{},"Learning from another experienced developer as well as learning from the mistakes made during a project",[115,125,126],{},"Building better collaboration skills",[12,128,129],{},"This system also breaks up the development project into smaller, specifically defined tasks under the agile project structure.",[36,131,133,134,137],{"id":132},"why-remote-pair-programming-works","Why ",[15,135,136],{},"remote"," pair programming works",[12,139,140],{},"In speaking to our remote pairing fans, it's clear that pair programming is a form of collaboration that\ndoesn't lose anything by being conducted remotely.",[12,142,143],{},"\"It's no different from sitting next to the person. In fact it gives you a better view to look at and\nfind better approaches simultaneously without wasting any time,\" says Arihant.",[12,145,146],{},"\"I’ve done pair programming in person and I actually find it easier remote because of screen sharing,\" explains Cynthia. \"You have more control over what you’re looking at and how, whereas in person, often the main thing you’re working on together is on one person’s screen.\"",[36,148,150],{"id":149},"how-to-get-the-most-out-of-remote-pairing","How to get the most out of remote pairing",[152,153,155],"h3",{"id":154},"_1-know-when-to-pair","1. Know when to pair",[12,157,158],{},"We've focused on tickets so far because our support engineers at GitLab are our biggest remote pairing advocates.\nSupport engineering often involves debugging a customer problem, so it tracks that pairing would be\nuseful (compared to developers who are usually focused on building something). But really, any developer can\nbenefit from pairing when stuck on a problem.",[12,160,161],{},"Ronald worked as a developer for more than 15 years before joining the Support team at GitLab,\nincluding a year spent as the only developer for an entire company. \"One thing I learned really\nquickly was that if I was stuck on a problem, essentially, I had no one to talk to, which made things difficult.\"",[12,163,164],{},"Working in isolation, without the distractions of the office, is great when you're in the zone. \"It works until you run into a difficult problem to solve,\" says Ronald. \"Spending three days on a problem, before getting to the single line of code that solves it, sucks.\" If you find yourself not making any progress on a challenge, it's probably time to pair.",[152,166,168],{"id":167},"_2-go-in-with-a-clear-agenda","2. Go in with a clear agenda",[12,170,171,172,177],{},"Out of ",[19,173,176],{"href":174,"rel":175},"https://handbook.gitlab.com/handbook/values/#be-respectful-of-others-time",[],"respect for everyone's time",", we recommend that every meeting start with an agenda, and scheduling a pair programming session is no exception.",[12,179,180],{},"\"I think it’s important to set expectations or goals for the session. It can be fairly general like, 'explore what options we have,' but the key is to make sure you’re on the same page about what you want to do during the session,\" says Cynthia.",[12,182,183],{},"Arihant agrees: \"The agenda should be set beforehand so you have enough time to understand the problem statement.\"\nOtherwise you might spend 20 minutes reading through tickets or bug reports before landing on something to work on together.",[152,185,187],{"id":186},"_3-tackle-bugs-one-at-a-time","3. Tackle bugs one at a time",[12,189,190],{},"\"Take one problem at a time and try to reproduce if you are trying to solve a bug,\" Arihant recommends. It might be tempting to try to solve more than one problem if you think they're connected, but you really won't know that until you fix the first thing.",[152,192,194],{"id":193},"_4-speak-up","4. Speak up!",[12,196,197],{},"This goes for remote or in-person pairing: speaking freely helps to get to the root of the problem more quickly.\n\"Don’t be afraid to voice your opinion,\" advises Anton. \"Even if something is wrong, it helps eliminate the cause of a problem and it might spark alternative ideas.\"",[36,199,201],{"id":200},"how-we-do-remote-pairing","How we do remote pairing",[12,203,204,205,210],{},"At GitLab, we have a mix of ad hoc and scheduled pairing sessions. \"Pairings are required as\npart of the Support team onboarding, and we also have a support ",[19,206,209],{"href":207,"rel":208},"https://www.donut.com/",[],"Donut app","\nchannel that people can join to decide who to pair with,\" explains Cynthia.",[12,212,213],{},"Having recurring pairing sessions can help engineers stay connected with their teammates, says Anton, but spontaneity can be helpful if you're swamped or get stuck on a problem: \"If I am working in the queue to stop tickets from breaching, sometimes I will publicly post my Zoom room link in Slack and allow anyone to join.\"",[12,215,216,217,222,223,228],{},"Arihant says, \"If I want to pair with someone I simply ask them in team chat or simply send them a calendar invite. If it is for a specific topic or group, then I check the ",[19,218,221],{"href":219,"rel":220},"https://gitlab-com.gitlab.io/support/team/areas-of-focus.html",[],"area of focus"," or ",[19,224,227],{"href":225,"rel":226},"https://gitlab-com.gitlab.io/support/team/skills-by-person.html",[],"skills by person"," pages to find the best person to partner with.\"",[12,230,231,232,237],{},"We also have a ",[19,233,236],{"href":234,"rel":235},"https://gitlab.com/gitlab-com/support/support-pairing/-/issues",[],"dedicated issue tracker for support pairings","\nso team members can track who they've paired with and on what.",[12,239,240],{},[15,241,242],{},"Keep an eye out for the next post in our series, where we'll be sharing more remote collaboration practices for engineers.",{"title":244,"searchDepth":245,"depth":245,"links":246},"",2,[247,248,249,250,251,252,253,255,262],{"id":38,"depth":245,"text":39},{"id":48,"depth":245,"text":49},{"id":61,"depth":245,"text":62},{"id":74,"depth":245,"text":75},{"id":87,"depth":245,"text":88},{"id":103,"depth":245,"text":104},{"id":132,"depth":245,"text":254},"Why remote pair programming works",{"id":149,"depth":245,"text":150,"children":256},[257,259,260,261],{"id":154,"depth":258,"text":155},3,{"id":167,"depth":258,"text":168},{"id":186,"depth":258,"text":187},{"id":193,"depth":258,"text":194},{"id":200,"depth":245,"text":201},"culture","2021-02-04","Pair programming is great for remote collaboration. Our remote pairing enthusiasts share how to make the most of it.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749677856/Blog/Hero%20Images/collaboration.png",{},true,"/en-us/blog/remote-pair-programming-tips",{"title":5,"description":265,"ogTitle":5,"ogDescription":265,"noIndex":268,"ogImage":269,"ogUrl":274,"ogSiteName":275,"ogType":276,"canonicalUrls":274},"https://about.gitlab.com/blog/remote-pair-programming-tips","https://about.gitlab.com","article","remote-pair-programming-tips","en-us/blog/remote-pair-programming-tips",[280,281],"collaboration","remote work","BlogPost","PsuVmYmn6kJMZua0rvjfv6KVuc6ShfUH8-Y5IMtOEeA",{"logo":285,"freeTrial":290,"sales":295,"login":300,"items":305,"search":631,"minimal":662,"duo":681,"switchNav":690,"pricingDeployment":701},{"config":286},{"href":287,"dataGaName":288,"dataGaLocation":289},"/","gitlab logo","header",{"text":291,"config":292},"Get free trial",{"href":293,"dataGaName":294,"dataGaLocation":289},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":296,"config":297},"Request a demo",{"href":298,"dataGaName":299,"dataGaLocation":289},"/sales/?contact-topic=request-demo","sales",{"text":301,"config":302},"Sign in",{"href":303,"dataGaName":304,"dataGaLocation":289},"https://gitlab.com/users/sign_in/","sign in",[306,335,435,440,553,609],{"text":307,"config":308,"menu":310},"Platform",{"dataNavLevelOne":309},"platform",{"type":311,"columns":312},"cards",[313,319,327],{"title":307,"description":314,"link":315},"The intelligent orchestration platform for DevSecOps",{"text":316,"config":317},"Explore our Platform",{"href":318,"dataGaName":309,"dataGaLocation":289},"/platform/",{"title":320,"description":321,"link":322},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":323,"config":324},"Meet GitLab Duo",{"href":325,"dataGaName":326,"dataGaLocation":289},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":328,"description":329,"link":330},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":331,"config":332},"Learn more",{"href":333,"dataGaName":334,"dataGaLocation":289},"/why-gitlab/","why gitlab",{"text":336,"left":271,"config":337,"menu":339},"Product",{"dataNavLevelOne":338},"solutions",{"type":340,"link":341,"columns":345,"feature":414},"lists",{"text":342,"config":343},"View all Solutions",{"href":344,"dataGaName":338,"dataGaLocation":289},"/solutions/",[346,370,393],{"title":347,"description":348,"link":349,"items":354},"Automation","CI/CD and automation to accelerate deployment",{"config":350},{"icon":351,"href":352,"dataGaName":353,"dataGaLocation":289},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[355,359,362,366],{"text":356,"config":357},"CI/CD",{"href":358,"dataGaLocation":289,"dataGaName":356},"/solutions/continuous-integration/",{"text":320,"config":360},{"href":325,"dataGaLocation":289,"dataGaName":361},"gitlab duo agent platform - product menu",{"text":363,"config":364},"Source Code Management",{"href":365,"dataGaLocation":289,"dataGaName":363},"/solutions/source-code-management/",{"text":367,"config":368},"Automated Software Delivery",{"href":352,"dataGaLocation":289,"dataGaName":369},"Automated software delivery",{"title":371,"description":372,"link":373,"items":378},"Security","Deliver code faster without compromising security",{"config":374},{"href":375,"dataGaName":376,"dataGaLocation":289,"icon":377},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[379,383,388],{"text":380,"config":381},"Application Security Testing",{"href":375,"dataGaName":382,"dataGaLocation":289},"Application security testing",{"text":384,"config":385},"Software Supply Chain Security",{"href":386,"dataGaLocation":289,"dataGaName":387},"/solutions/supply-chain/","Software supply chain security",{"text":389,"config":390},"Software Compliance",{"href":391,"dataGaName":392,"dataGaLocation":289},"/solutions/software-compliance/","software compliance",{"title":394,"link":395,"items":400},"Measurement",{"config":396},{"icon":397,"href":398,"dataGaName":399,"dataGaLocation":289},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[401,405,409],{"text":402,"config":403},"Visibility & Measurement",{"href":398,"dataGaLocation":289,"dataGaName":404},"Visibility and Measurement",{"text":406,"config":407},"Value Stream Management",{"href":408,"dataGaLocation":289,"dataGaName":406},"/solutions/value-stream-management/",{"text":410,"config":411},"Analytics & Insights",{"href":412,"dataGaLocation":289,"dataGaName":413},"/solutions/analytics-and-insights/","Analytics and insights",{"title":415,"type":340,"items":416},"GitLab for",[417,423,429],{"text":418,"config":419},"Enterprise",{"icon":420,"href":421,"dataGaLocation":289,"dataGaName":422},"Building","/enterprise/","enterprise",{"text":424,"config":425},"Small Business",{"icon":426,"href":427,"dataGaLocation":289,"dataGaName":428},"Work","/small-business/","small business",{"text":430,"config":431},"Public Sector",{"icon":432,"href":433,"dataGaLocation":289,"dataGaName":434},"Organization","/solutions/public-sector/","public sector",{"text":436,"config":437},"Pricing",{"href":438,"dataGaName":439,"dataGaLocation":289,"dataNavLevelOne":439},"/pricing/","pricing",{"text":441,"config":442,"menu":444},"Resources",{"dataNavLevelOne":443},"resources",{"type":340,"link":445,"columns":449,"feature":542},{"text":446,"config":447},"View all resources",{"href":448,"dataGaName":443,"dataGaLocation":289},"/resources/",[450,483,509],{"title":451,"items":452},"Getting started",[453,458,463,468,473,478],{"text":454,"config":455},"Install",{"href":456,"dataGaName":457,"dataGaLocation":289},"/install/","install",{"text":459,"config":460},"Quick start guides",{"href":461,"dataGaName":462,"dataGaLocation":289},"/get-started/","quick setup checklists",{"text":464,"config":465},"Learn",{"href":466,"dataGaLocation":289,"dataGaName":467},"https://university.gitlab.com/","learn",{"text":469,"config":470},"Product documentation",{"href":471,"dataGaName":472,"dataGaLocation":289},"https://docs.gitlab.com/","product documentation",{"text":474,"config":475},"Best practice videos",{"href":476,"dataGaName":477,"dataGaLocation":289},"/getting-started-videos/","best practice videos",{"text":479,"config":480},"Integrations",{"href":481,"dataGaName":482,"dataGaLocation":289},"/integrations/","integrations",{"title":484,"items":485},"Discover",[486,491,496,501,505],{"text":487,"config":488},"Customer success stories",{"href":489,"dataGaName":490,"dataGaLocation":289},"/customers/","customer success stories",{"text":492,"config":493},"Blog",{"href":494,"dataGaName":495,"dataGaLocation":289},"/blog/","blog",{"text":497,"config":498},"Demo Hub",{"href":499,"dataGaName":500,"dataGaLocation":289},"/demo-hub/","demo hub",{"text":502,"config":503},"The Source",{"href":504,"dataGaName":495,"dataGaLocation":289},"/the-source/",{"text":506,"config":507},"Remote",{"href":508,"dataGaName":136,"dataGaLocation":289},"https://handbook.gitlab.com/handbook/company/culture/all-remote/",{"title":510,"items":511},"Connect",[512,517,522,527,532,537],{"text":513,"config":514},"GitLab Services",{"href":515,"dataGaName":516,"dataGaLocation":289},"/services/","services",{"text":518,"config":519},"Contribute",{"href":520,"dataGaName":521,"dataGaLocation":289},"https://contributors.gitlab.com","contribute",{"text":523,"config":524},"Community",{"href":525,"dataGaName":526,"dataGaLocation":289},"/community/","community",{"text":528,"config":529},"Forum",{"href":530,"dataGaName":531,"dataGaLocation":289},"https://forum.gitlab.com/","forum",{"text":533,"config":534},"Events",{"href":535,"dataGaName":536,"dataGaLocation":289},"/events/","events",{"text":538,"config":539},"Partners",{"href":540,"dataGaName":541,"dataGaLocation":289},"/partners/","partners",{"config":543,"title":546,"text":547,"link":548},{"background":544,"textColor":545},"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":549,"config":550},"Read the latest",{"href":551,"dataGaName":552,"dataGaLocation":289},"/whats-new/","whats new",{"text":554,"config":555,"menu":557},"Company",{"dataNavLevelOne":556},"company",{"type":340,"columns":558},[559],{"items":560},[561,566,572,574,579,584,589,594,599,604],{"text":562,"config":563},"About",{"href":564,"dataGaName":565,"dataGaLocation":289},"/company/","about",{"text":567,"config":568,"footerGa":571},"Jobs",{"href":569,"dataGaName":570,"dataGaLocation":289},"/jobs/","jobs",{"dataGaName":570},{"text":533,"config":573},{"href":535,"dataGaName":536,"dataGaLocation":289},{"text":575,"config":576},"Leadership",{"href":577,"dataGaName":578,"dataGaLocation":289},"/company/team/e-group/","leadership",{"text":580,"config":581},"Handbook",{"href":582,"dataGaName":583,"dataGaLocation":289},"https://handbook.gitlab.com/","handbook",{"text":585,"config":586},"Investor relations",{"href":587,"dataGaName":588,"dataGaLocation":289},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":590,"config":591},"Trust Center",{"href":592,"dataGaName":593,"dataGaLocation":289},"/security/","trust center",{"text":595,"config":596},"AI Transparency Center",{"href":597,"dataGaName":598,"dataGaLocation":289},"/ai-transparency-center/","ai transparency center",{"text":600,"config":601},"Newsletter",{"href":602,"dataGaName":603,"dataGaLocation":289},"/company/contact/#contact-forms","newsletter",{"text":605,"config":606},"Press",{"href":607,"dataGaName":608,"dataGaLocation":289},"/press/","press",{"text":610,"config":611,"menu":612},"Contact us",{"dataNavLevelOne":556},{"type":340,"columns":613},[614],{"items":615},[616,621,626],{"text":617,"config":618},"Talk to sales",{"href":619,"dataGaName":620,"dataGaLocation":289},"/sales/","talk to sales",{"text":622,"config":623},"Support portal",{"href":624,"dataGaName":625,"dataGaLocation":289},"https://support.gitlab.com/hc/en-us","support portal",{"text":627,"config":628},"Customer portal",{"href":629,"dataGaName":630,"dataGaLocation":289},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":632,"login":633,"suggestions":640},"Close",{"text":634,"link":635},"To search repositories and projects, login to",{"text":636,"config":637},"gitlab.com",{"href":303,"dataGaName":638,"dataGaLocation":639},"search login","search",{"text":641,"default":642},"Suggestions",[643,645,649,651,655,659],{"text":320,"config":644},{"href":325,"dataGaName":320,"dataGaLocation":639},{"text":646,"config":647},"Code Suggestions (AI)",{"href":648,"dataGaName":646,"dataGaLocation":639},"/solutions/code-suggestions/",{"text":356,"config":650},{"href":358,"dataGaName":356,"dataGaLocation":639},{"text":652,"config":653},"GitLab on AWS",{"href":654,"dataGaName":652,"dataGaLocation":639},"/partners/technology-partners/aws/",{"text":656,"config":657},"GitLab on Google Cloud",{"href":658,"dataGaName":656,"dataGaLocation":639},"/partners/technology-partners/google-cloud-platform/",{"text":660,"config":661},"Why GitLab?",{"href":333,"dataGaName":660,"dataGaLocation":639},{"freeTrial":663,"mobileIcon":668,"desktopIcon":673,"secondaryButton":676},{"text":664,"config":665},"Start free trial",{"href":666,"dataGaName":294,"dataGaLocation":667},"https://gitlab.com/-/trials/new/","nav",{"altText":669,"config":670},"Gitlab Icon",{"src":671,"dataGaName":672,"dataGaLocation":667},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":669,"config":674},{"src":675,"dataGaName":672,"dataGaLocation":667},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":677,"config":678},"Get Started",{"href":679,"dataGaName":680,"dataGaLocation":667},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":682,"mobileIcon":686,"desktopIcon":688},{"text":683,"config":684},"Learn more about GitLab Duo",{"href":325,"dataGaName":685,"dataGaLocation":667},"gitlab duo",{"altText":669,"config":687},{"src":671,"dataGaName":672,"dataGaLocation":667},{"altText":669,"config":689},{"src":675,"dataGaName":672,"dataGaLocation":667},{"button":691,"mobileIcon":696,"desktopIcon":698},{"text":692,"config":693},"/switch",{"href":694,"dataGaName":695,"dataGaLocation":667},"#contact","switch",{"altText":669,"config":697},{"src":671,"dataGaName":672,"dataGaLocation":667},{"altText":669,"config":699},{"src":700,"dataGaName":672,"dataGaLocation":667},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":702,"mobileIcon":707,"desktopIcon":709},{"text":703,"config":704},"Back to pricing",{"href":438,"dataGaName":705,"dataGaLocation":667,"icon":706},"back to pricing","GoBack",{"altText":669,"config":708},{"src":671,"dataGaName":672,"dataGaLocation":667},{"altText":669,"config":710},{"src":675,"dataGaName":672,"dataGaLocation":667},{"title":712,"titleMobile":713,"button":714,"config":719},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":331,"config":715},{"href":716,"dataGaName":717,"dataGaLocation":718},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":720,"disabled":268},"release",{"data":722},{"text":723,"source":724,"edit":730,"contribute":735,"config":740,"items":745,"minimal":955},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":725,"config":726},"View page source",{"href":727,"dataGaName":728,"dataGaLocation":729},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":731,"config":732},"Edit this page",{"href":733,"dataGaName":734,"dataGaLocation":729},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":736,"config":737},"Please contribute",{"href":738,"dataGaName":739,"dataGaLocation":729},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":741,"facebook":742,"youtube":743,"linkedin":744},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[746,793,847,891,923],{"title":436,"links":747,"subMenu":762},[748,752,757],{"text":749,"config":750},"View plans",{"href":438,"dataGaName":751,"dataGaLocation":729},"view plans",{"text":753,"config":754},"Why Premium?",{"href":755,"dataGaName":756,"dataGaLocation":729},"/pricing/premium/","why premium",{"text":758,"config":759},"Why Ultimate?",{"href":760,"dataGaName":761,"dataGaLocation":729},"/pricing/ultimate/","why ultimate",[763],{"title":764,"links":765},"Contact Us",[766,769,771,773,778,783,788],{"text":767,"config":768},"Contact sales",{"href":619,"dataGaName":299,"dataGaLocation":729},{"text":622,"config":770},{"href":624,"dataGaName":625,"dataGaLocation":729},{"text":627,"config":772},{"href":629,"dataGaName":630,"dataGaLocation":729},{"text":774,"config":775},"Status",{"href":776,"dataGaName":777,"dataGaLocation":729},"https://status.gitlab.com/","status",{"text":779,"config":780},"Terms of use",{"href":781,"dataGaName":782,"dataGaLocation":729},"/terms/","terms of use",{"text":784,"config":785},"Privacy statement",{"href":786,"dataGaName":787,"dataGaLocation":729},"/privacy/","privacy statement",{"text":789,"config":790},"Cookie preferences",{"dataGaName":791,"dataGaLocation":729,"id":792,"isOneTrustButton":271},"cookie preferences","ot-sdk-btn",{"title":336,"links":794,"subMenu":803},[795,799],{"text":796,"config":797},"DevSecOps platform",{"href":318,"dataGaName":798,"dataGaLocation":729},"devsecops platform",{"text":800,"config":801},"AI-Assisted Development",{"href":325,"dataGaName":802,"dataGaLocation":729},"ai-assisted development",[804],{"title":805,"links":806},"Topics",[807,812,817,822,827,832,837,842],{"text":808,"config":809},"CICD",{"href":810,"dataGaName":811,"dataGaLocation":729},"/topics/ci-cd/","cicd",{"text":813,"config":814},"GitOps",{"href":815,"dataGaName":816,"dataGaLocation":729},"/topics/gitops/","gitops",{"text":818,"config":819},"DevOps",{"href":820,"dataGaName":821,"dataGaLocation":729},"/topics/devops/","devops",{"text":823,"config":824},"Version Control",{"href":825,"dataGaName":826,"dataGaLocation":729},"/topics/version-control/","version control",{"text":828,"config":829},"DevSecOps",{"href":830,"dataGaName":831,"dataGaLocation":729},"/topics/devsecops/","devsecops",{"text":833,"config":834},"Cloud Native",{"href":835,"dataGaName":836,"dataGaLocation":729},"/topics/cloud-native/","cloud native",{"text":838,"config":839},"AI for Coding",{"href":840,"dataGaName":841,"dataGaLocation":729},"/topics/devops/ai-for-coding/","ai for coding",{"text":843,"config":844},"Agentic AI",{"href":845,"dataGaName":846,"dataGaLocation":729},"/topics/agentic-ai/","agentic ai",{"title":848,"links":849},"Solutions",[850,852,854,859,863,866,870,873,875,878,881,886],{"text":380,"config":851},{"href":375,"dataGaName":380,"dataGaLocation":729},{"text":369,"config":853},{"href":352,"dataGaName":353,"dataGaLocation":729},{"text":855,"config":856},"Agile development",{"href":857,"dataGaName":858,"dataGaLocation":729},"/solutions/agile-delivery/","agile delivery",{"text":860,"config":861},"SCM",{"href":365,"dataGaName":862,"dataGaLocation":729},"source code management",{"text":808,"config":864},{"href":358,"dataGaName":865,"dataGaLocation":729},"continuous integration & delivery",{"text":867,"config":868},"Value stream management",{"href":408,"dataGaName":869,"dataGaLocation":729},"value stream management",{"text":813,"config":871},{"href":872,"dataGaName":816,"dataGaLocation":729},"/solutions/gitops/",{"text":418,"config":874},{"href":421,"dataGaName":422,"dataGaLocation":729},{"text":876,"config":877},"Small business",{"href":427,"dataGaName":428,"dataGaLocation":729},{"text":879,"config":880},"Public sector",{"href":433,"dataGaName":434,"dataGaLocation":729},{"text":882,"config":883},"Education",{"href":884,"dataGaName":885,"dataGaLocation":729},"/solutions/education/","education",{"text":887,"config":888},"Financial services",{"href":889,"dataGaName":890,"dataGaLocation":729},"/solutions/finance/","financial services",{"title":441,"links":892},[893,895,897,899,902,904,907,909,911,913,915,917,919,921],{"text":454,"config":894},{"href":456,"dataGaName":457,"dataGaLocation":729},{"text":459,"config":896},{"href":461,"dataGaName":462,"dataGaLocation":729},{"text":464,"config":898},{"href":466,"dataGaName":467,"dataGaLocation":729},{"text":469,"config":900},{"href":471,"dataGaName":901,"dataGaLocation":729},"docs",{"text":492,"config":903},{"href":494,"dataGaName":495,"dataGaLocation":729},{"text":905,"config":906},"What's new",{"href":551,"dataGaName":552,"dataGaLocation":729},{"text":487,"config":908},{"href":489,"dataGaName":490,"dataGaLocation":729},{"text":506,"config":910},{"href":508,"dataGaName":136,"dataGaLocation":729},{"text":513,"config":912},{"href":515,"dataGaName":516,"dataGaLocation":729},{"text":518,"config":914},{"href":520,"dataGaName":521,"dataGaLocation":729},{"text":523,"config":916},{"href":525,"dataGaName":526,"dataGaLocation":729},{"text":528,"config":918},{"href":530,"dataGaName":531,"dataGaLocation":729},{"text":533,"config":920},{"href":535,"dataGaName":536,"dataGaLocation":729},{"text":538,"config":922},{"href":540,"dataGaName":541,"dataGaLocation":729},{"title":554,"links":924},[925,927,929,931,933,935,939,944,946,948,950],{"text":562,"config":926},{"href":564,"dataGaName":556,"dataGaLocation":729},{"text":567,"config":928},{"href":569,"dataGaName":570,"dataGaLocation":729},{"text":575,"config":930},{"href":577,"dataGaName":578,"dataGaLocation":729},{"text":580,"config":932},{"href":582,"dataGaName":583,"dataGaLocation":729},{"text":585,"config":934},{"href":587,"dataGaName":588,"dataGaLocation":729},{"text":936,"config":937},"Sustainability",{"href":938,"dataGaName":936,"dataGaLocation":729},"/sustainability/",{"text":940,"config":941},"Diversity, inclusion and belonging (DIB)",{"href":942,"dataGaName":943,"dataGaLocation":729},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":590,"config":945},{"href":592,"dataGaName":593,"dataGaLocation":729},{"text":600,"config":947},{"href":602,"dataGaName":603,"dataGaLocation":729},{"text":605,"config":949},{"href":607,"dataGaName":608,"dataGaLocation":729},{"text":951,"config":952},"Modern Slavery Transparency Statement",{"href":953,"dataGaName":954,"dataGaLocation":729},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":956},[957,960,963],{"text":958,"config":959},"Terms",{"href":781,"dataGaName":782,"dataGaLocation":729},{"text":961,"config":962},"Cookies",{"dataGaName":791,"dataGaLocation":729,"id":792,"isOneTrustButton":271},{"text":964,"config":965},"Privacy",{"href":786,"dataGaName":787,"dataGaLocation":729},[967],{"id":968,"title":7,"body":267,"config":969,"content":971,"description":267,"extension":975,"meta":976,"navigation":271,"path":977,"seo":978,"stem":979,"__hash__":980},"blogAuthors/en-us/blog/authors/rebecca-dodd.yml",{"template":970},"BlogAuthor",{"name":7,"config":972},{"headshot":973,"ctfId":974},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Rebecca-Dodd","yml",{},"/en-us/blog/authors/rebecca-dodd",{},"en-us/blog/authors/rebecca-dodd","Fqnz-zC5Rsc_ZMULQNrNPzwFh8Smy8g5utEqKK0NjJE",[982,990,998],{"title":983,"description":984,"heroImage":985,"category":263,"date":986,"authors":987,"slug":989,"externalUrl":267},"Developer Relations at GitLab: What we've learned since our start","DevRel is key to success for many tech companies. Find out how GitLab's DevRel program has evolved to stay aligned with the industry and our customers.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672008/Blog/Hero%20Images/AdobeStock_204527293.jpg","2024-03-13",[988],"John Coghlan","developer-relations-at-gitlab-what-weve-learned-since-our-start",{"title":991,"description":992,"heroImage":993,"category":263,"date":994,"authors":995,"slug":997,"externalUrl":267},"Visualizing 11 years of GitLab contributions","Check out this animated video, which beautifully visualizes every contribution since our start.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682555/Blog/Hero%20Images/gitlabeveryonecontributesdna.png","2022-12-19",[996],"Darwin Sanoy","everyone-who-has-contributed",{"title":999,"description":1000,"heroImage":1001,"category":263,"date":1002,"authors":1003,"slug":1005,"externalUrl":267},"The many routes to a tech career","GitLab team members of different ages and backgrounds share their entry into this industry.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667236/Blog/Hero%20Images/Learn-at-GL.jpg","2022-10-04",[1004],"Heather Simpson","the-many-routes-to-a-tech-career",{"promotions":1007},[1008,1022,1034,1046],{"id":1009,"categories":1010,"header":1012,"text":1013,"button":1014,"image":1019},"ai-modernization",[1011],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1015,"config":1016},"Get your AI maturity score",{"href":1017,"dataGaName":1018,"dataGaLocation":495},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1020},{"src":1021},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1023,"categories":1024,"header":1026,"text":1013,"button":1027,"image":1031},"devops-modernization",[1025,831],"product","Are you just managing tools or shipping innovation?",{"text":1028,"config":1029},"Get your DevOps maturity score",{"href":1030,"dataGaName":1018,"dataGaLocation":495},"/assessments/devops-modernization-assessment/",{"config":1032},{"src":1033},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1035,"categories":1036,"header":1038,"text":1013,"button":1039,"image":1043},"security-modernization",[1037],"security","Are you trading speed for security?",{"text":1040,"config":1041},"Get your security maturity score",{"href":1042,"dataGaName":1018,"dataGaLocation":495},"/assessments/security-modernization-assessment/",{"config":1044},{"src":1045},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1047,"paths":1048,"header":1051,"text":1052,"button":1053,"image":1058},"github-azure-migration",[1049,1050],"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":1054,"config":1055},"See how GitLab compares to GitHub",{"href":1056,"dataGaName":1057,"dataGaLocation":495},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1059},{"src":1033},{"header":1061,"blurb":1062,"button":1063,"secondaryButton":1068},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1064,"config":1065},"Get your free trial",{"href":1066,"dataGaName":294,"dataGaLocation":1067},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":767,"config":1069},{"href":619,"dataGaName":299,"dataGaLocation":1067},1786803764951]