[{"data":1,"prerenderedAt":837},["ShallowReactive",2],{"/en-us/blog/synchronous-collaboration-as-a-remote-designer-at-gitlab":3,"navigation-en-us":48,"banner-en-us":448,"footer-en-us":458,"blog-post-authors-en-us-Alexis Ginsberg|Becka Lippert|Matej Latin|Holly Reynolds":700,"blog-related-posts-en-us-synchronous-collaboration-as-a-remote-designer-at-gitlab":748,"assessment-promotions-en-us":788,"next-steps-en-us":827},{"id":4,"title":5,"authorSlugs":6,"body":11,"categorySlug":12,"config":13,"content":17,"description":11,"extension":34,"isFeatured":15,"meta":35,"navigation":36,"path":37,"publishedDate":26,"seo":38,"stem":42,"tagSlugs":43,"__hash__":47},"blogPosts/en-us/blog/synchronous-collaboration-as-a-remote-designer-at-gitlab.yml","Synchronous Collaboration As A Remote Designer At Gitlab",[7,8,9,10],"alexis-ginsberg","becka-lippert","matej-latin","holly-reynolds",null,"unfiltered",{"slug":14,"featured":15,"template":16},"synchronous-collaboration-as-a-remote-designer-at-gitlab",false,"BlogPost",{"title":18,"description":19,"authors":20,"heroImage":25,"date":26,"body":27,"category":12,"tags":28},"Synchronous collaboration as a remote designer at GitLab","Find out how GitLab Designers collaborate synchronously within an all-remote company!",[21,22,23,24],"Alexis Ginsberg","Becka Lippert","Matej Latin","Holly Reynolds","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669715/Blog/Hero%20Images/synchronous-collaboration-as-a-remote-designer.jpg","2020-04-01","\n\n{::options parse_block_html=\"true\" /}\n\n\n\nMany designers out there may find themselves new to the remote life within the past couple of months. This post just scratches the surface of how designers collaborate at Gitlab, and some ideas may work a bit differently in a post-COVID world, but hopefully you can find some inspiration for your day-to-day work.\n\nWorking as a designer at GitLab means being a Remote Designer with a capital R. GitLab has no “main” office. We have teammates working from their home office or coworking spaces all around the globe. Some of us don’t even have one home base, preferring to travel the world while working.\n\nAs designers at GitLab, we may not be able to physically get together near the Nespresso machine to chat about our days, or grab a conference room for a quick whiteboard session around the latest design challenge we are solving, but we still find ways to stay in sync. Are you thinking about NSYNC now? Good.\n\nFinding creative ways to collaborate synchronously with all teammates across GitLab is a worthy challenge to be solved, and we are always experimenting and iterating on the best ways to do this! We have found that [synchronous collaboration](https://handbook.gitlab.com/handbook/company/culture/all-remote/collaboration-and-whiteboarding/) has to be a bit more intentional, but if time and space is made for it, it can be just as––if not more––fun and productive! Here are some ways the GitLab design team has worked to create that space for synchronous collaboration...\n\n\n## 👯 Pair designers\n\nEvery six months or so, each individual designer is paired with another GitLab designer who is intentionally dedicated to a different[ stage group](https://handbook.gitlab.com/handbook/product/categories/). We are given the freedom to coordinate how we choose and can collaborate as much or as little as we feel comfortable with. The trend seems to be 30 minutes to an hour either each week or every other week.\n\n**_Alexis:_** I personally look forward to my weekly Zoom meeting with my pair, and we usually aim for an hour but sometimes go over time since we love chatting with each other. We have an agenda of items both of us hope to cover, but also make sure we have time to catch up as people and coworkers, which is especially important to me as a remote designer (sometimes you just want to show off your dog or talk about the latest Netflix show you are binging!).\n\nThe agenda items are usually split evenly between us so that we can dedicate half of the time to a design, research, or process challenge we are working through, and the other half giving feedback. We are encouraged to work in the tools we feel most productive in so sometimes we will be walking through a design in Sketch, Figma, Axure, Mural, or even a quick sketch on paper or iPad.\n\nAs our team grows larger, getting this time to really dive into the design challenges of another stage group is very important. It helps me focus on the holistic journey users have within GitLab, rather than just “my” specific corner of the product. Every designer at GitLab shines in their own way, and this is just another way for us to learn from each other!\n\n\n## ☕ Coffee chats, 1-1s with other designers, and stage specific syncs\n\nWe've already touched on the importance of remembering that although we are remote designers, we have the support of an entire team around the world. In no other place is this more apparent at GitLab than in coffee chats, one-on-one syncs, and syncs with stage specific teams.\n\n**_Alexis:_** We can opt in to random coffee chats with anyone at GitLab, but as a designer magic happens often when just chatting through challenges with other designers. Working remotely means more time to focus, and the formal process of asking to schedule time with others can sometimes feel like you are asking permission to steal focus time away from their day. If all designers agree to set aside time each week that is dedicated to chatting with each other, it helps take that guilty feeling out of the equation and feels more like an informal time to chat and explore designs (that \"turn around in your chair to chat with the coworker next to you\" feeling), rather than another faceless Google Calendar invite.\n\nWe do this in a few ways, either through recurring 1-1s with other designers (including the pair system), recurring small group syncs with other designers in our stage group, and somewhat larger recurring syncs with designers in our [section](https://handbook.gitlab.com/handbook/product/categories/#hierarchy). They are all useful and full of collaboration to varying degrees.\n\nThe smaller and more specific the syncs get, the more day-to-day-design and feedback-specific the collaboration gets, which is great, because designers in one product area need to be able to support each other frequently on related work.\n\nLarger syncs are perfect for getting a broader understanding of what other designers outside of your stage are up to and for aligning on broader GitLab Design priorities affecting our section.\n\n**_Becka:_** The larger syncs also help discover overlap that you may not know exists, such as similar challenges or new use cases for a component in the [design system](https://design.gitlab.com/).\n\n**_Matej:_** Based on my experience so far, having a recurring 1-1 call with other designers from my stage group can be even better than the option to do it spontaneously in an office environment. And that’s mostly because of how we do it.\n\nThese calls are always at the same time on the same day of the week. We have a Google Doc for the agenda, so we can prepare in advance. Often, when I work on something, I remember that my fellow designer from my group probably knows more about the topic, so I just open that agenda doc and add an item to it so that we talk about it the next time we meet. This way, I don’t interrupt them with Slack messages or ad-hoc calls.\n\nAll this combined, it leads to scheduled, time-boxed calls where participants are prepared in advance and everyone gets so much value out of it. We borrow ideas, prototypes, pieces of UI. We can go into details of why our teams are working on the things that they’re working on. If we relied solely on group status update calls we wouldn’t be able to do that.\n\nIt’s also a great way to socialize and build relationships with other designers, as we often talk about stuff that isn’t work related. We’ve only been doing this for two months in the [Growth](https://handbook.gitlab.com/handbook/product/categories/#growth-stage) group, but I've already saved hours of wasted time working on things others already did. I also got to know the designers much better, which makes collaboration easier, more likely, and also more enjoyable.\n\nWhen it comes down to it, we are all GitLab Designers and need to not only understand and empathize for each other's work, but also for each other as people who like each other and are working toward the same goals!\n\n\n## 🎬 UX Showcase and UX Weekly\n\nOur largest opportunities for synchronous collaboration are our UX Weekly meeting and the UX Showcase. These syncs aim to capture as many designers across time zones as possible, which is a great chance to interact with faces you may not see on your screen often.\n\n**_Alexis:_** Our team has grown substantially over the last year, so having a weekly time to catch up with each other at a department level has also grown more important. The UX Weekly is a time for any and all GitLab designers to discuss any updates they have made to Pajamas (our design system), process changes, OKRs, exciting ideas, or [workshops](https://about.gitlab.com/blog/async-sketching/) designers are tinkering on that they think may benefit others – basically any team updates in general.\n\nGrowth of our department (and GitLab as a whole) has also inspired us to find new ways to stay transparent and visible about the work we are doing. This promotes cross-team collaboration both inside and outside of design.\n\nEvery two weeks product designers are encouraged to dive deeply into problems they are solving at the [UX Showcase](https://www.youtube.com/playlist?list=PL05JrBw4t0Kq89nFXtkVviaIfYQPptwJz), making sure to touch on things like business goals, customer goals, and constraints. Four stage groups present per session for fifteen minutes at a time, giving us an hour to highlight work we are excited about sharing broadly on [GitLab Unfiltered](https://www.youtube.com/channel/UCMtZ0sc1HHNtGGWZFDRTh5A/videos) for anyone to watch! What we present and the format in which we share is not prescribed, so designers can get creative about how to use that fifteen minutes allotted to their stage group (or at least as creative as sharing a screen on Zoom will allow!).\n\nThe part of the UX Showcase I enjoy the most is understanding the journeys my fellow designers go through and what processes they find most beneficial when creating solutions alongside their teammates in Product and Engineering. I also love the Slacks I get from other GitLabbers after presenting, asking to learn more about the work I am doing because they have feedback or to collaborate on something they are working on that is similar. The most exciting pings I get are from coworkers I am unfamiliar with, because that means we are empowering everyone to learn about and contribute feedback to our user experience!\n\n\n## 🤝 Collaboration with Product Managers\n\nA strong relationship with our partners in Product Management is important for any designer, and this is no different even for those of us who don’t have to walk into an office every day.\n\n**_Alexis:_** One of my favorite weekly meetings is when my team’s product designers and product managers all get together in the middle of the week for a 45-minute sync on Zoom. The first item on our agenda is for each of us to go over our goal of the week. These goals can be very personal or something we are hoping to accomplish professionally that week. I personally really enjoy learning more about what my teammates hopes and dreams are, even if those hopes are just to finish the repairs on their guest bathroom (this seems to be a big priority on our team for some reason!).\n\nWe spend the rest of the time going over our agenda items, such as in-flight research, issues that need collaboration, questions that we need clarification on, and then the good ole’ board walking time (going through our Kanban board of open issues in the current milestone) where we see how prioritized work is going. Usually we don’t get to the last agenda item, because we are busy walking through a design together or collaborating on some research items in Mural. This is fine though, because we have other times set aside to talk about priorities, and this is something that is easy to do asynchronously as well.\n\nA recurring theme I hear from product managers is that working with designers is one of their favorite parts of their jobs, and that they would never want to lose that just because we aren’t co-located. Luckily for all of us, most designers at GitLab are now aligned to one group with one dedicated product manager, so we can really focus on making that working relationship great!\n\nMy product manager and I take an hour out of our busy schedules each week to hop on Zoom and sync up. We use our agenda (are you sensing a theme here?) as our guide to walk through priority design issues that require collaboration or scope clarification. I prefer to drop sketches and mocks into a Mural board that we share, so that I can share my screen and allow him to follow along and make comments as I walk through ideas. Sometimes he will even share sketches with me, which I will then add and build on. This time helps us collaborate and get to know each other outside of regular conversations in Slack and [issues](https://docs.gitlab.com/ee/user/project/issues/).\n\n\n## 💻 Collaboration with Engineering\n\nAnother very important relationship for product designers to nurture is with our friends in Engineering. Designers and engineers at GitLab usually work together asynchronously, often in issues or [merge requests](https://docs.gitlab.com/ee/user/project/merge_requests/). Many of the usual touchpoints between these teams - like stand up, retros, brainstorms, and reviews - are effortlessly asynchronous. Instead of distancing us as designers from the engineers we team up with, this just allows us to make the time we do set aside for synchronous work more focused and intentional. Sometimes we may even sneak in a board game or two.\n\n**_Alexis:_** My team has weekly syncs between designers and Engineering Managers to discuss ideas for experience improvements and gather feedback or known constraints around designs. Product managers will also join and help facilitate any pivots or tradeoffs we may need to make while walking through our planned priority work. We also have a larger meeting to discuss big picture updates or retro type items, like processes we think could improve our workflow.\n\nThese (at least) weekly syncs are important in keeping our teams running smoothly, but my favorite engineering syncs are the impromptu one-on-one review and pair sessions I have with teammates. If asynchronous reviews or ideation seem to be going back and forth for a long time, nothing is better for unblocking a teammate than a quick synchronous Zoom call. Usually, what starts with one of us being confused by something the other is working on ends up in us chatting on a call and learning from each other as we share our screens and work through tough challenges together. The best part of these is that if our time zones are very different, we get to say, “Go have some coffee and have a great morning!” and “Get out of the office and have a good night!” at the end of the same meeting.\n\n\n## 🔬 Collaborating with users and the UX Research team\n\nHaving a solid understanding of users and being able to empathize with their frustrations and desires is so important to us. In fact, we even have a team dedicated just to UX Research! As with most organizations, though, GitLab Product Designers also need to have a passion for research and will often wear that “research hat” themselves.\n\n**_Alexis:_** Conducting research as a remote designer has surprisingly not differed as much as I expected from my time as a designer working in an office. Usually we start everything with a synchronous kickoff chat between the person requesting research, the researcher, and anyone else interested in the research project to capture objectives. This is also documented more formally in an issue, so we can iterate together asynchronously and have a single source of truth to refer back to. The planning and scripting can either be done in GitLab itself, or in a Google Document where we collaborate asynchronously.\n\nPrototyping or setting up testing environments is done in GitLab or any tool we feel comfortable will be most effective for the user. We schedule time with participants and conduct the interviews themselves through Zoom, which is something many would be familiar with. Those who join the call take notes and chime in as needed. If anything, this may feel less intimidating to participants, as we are all just friendly faces in a small Zoom box,  rather than people staring at them in person. Many times, users will remark on something going on in our home office, and that acts as an icebreaker and takes pressure off of the situation (I always get comments on my yellow chair and terrible wall art for example).\n\nThe synthesis aspect of research is where things get interesting, although I would imagine organizations that aren’t remote are also catching on to some of the remote techniques I am about to describe. We take the insights captured in Google Docs and GitLab issues and map them out in Mural. These synchronous sessions in Mural help us feel like we are all together at a whiteboard doing some good old fashioned affinity mapping - even more so if we are all doing this on a Zoom call and chatting as we work. Add a few stakeholders to the call, and it is a remote research synthesis party!\n\n## ⚖️ Why synchronous vs asynchronous?\n\nThis post highlights and focuses on some of the ways the GitLab team collaborates synchronously across time zones and teams, but the flipside of this is asynchronous collaboration, which is how we Get Things Done™️ a majority of the time. It is even one of our [values](https://handbook.gitlab.com/handbook/values/#bias-towards-asynchronous-communication). There are of course pros and cons to each way of collaborating!\n\n**_Holly_**: One of the challenges of being a remote organization is that we all simply can’t be available at the same time. In addition to collaboration, inclusion is also one of our values. Asynchronous communication allows us to ensure that [everyone has a chance](https://handbook.gitlab.com/handbook/values/#bias-towards-asynchronous-communication) to have a say, regardless of their schedule or timezone.\n\nHowever, we recognize that asynchronous communication is not without its challenges. Because async conversations happen in a page or document rather than a real-time setting, they can slip off the radar of participants. This can result in a stall in productivity. We have to be intentional about managing conversations we want and need to be a part of. This may include using [To-Dos](https://docs.gitlab.com/ee/user/todos.html), tagging others when we need feedback, applying group labels, and assigning items to ourselves, so that we are notified when a change occurs.\n\nAsynchronous communication also gives everyone a chance to pause, reflect and respond to ideas proactively, rather than reactively. This is great, particularly for introverts such as myself, but can at times lead to overthinking in discussions. We strongly believe that everyone can contribute and should feel empowered to do so, but we also recognize the need to move the work forward. Some of the ways we manage this are through asking questions and seeking to understand one another’s views, but also setting timelines (as needed) and goals for what we want to accomplish within a certain time frame.\n\nFinally, asynchronous communication allows the history of our collaboration to be preserved. We’ve grown exponentially this past year in a very short period of time. With so many new faces and great ideas coming in, it’s more important than ever for us to be able to refer to the historical conversations surrounding why certain decisions have been made. This enables us to move forward with insights starting from the original idea all the way through to production.\n\nWith all of these great benefits, though, sometimes problems can be particularly complex and need a quick answer or require real-time visual collaboration. We have a rule that if a conversation goes back and forth asynchronously more than 3 times, we move to a synchronous conversation, usually in Zoom or Slack. We record as many of our meetings and video chats as possible, so that others can still have an opportunity to catch up and provide feedback. And we recognize that as human beings, we are social creatures. Sometimes we simply need to hear someone’s voice, see their body language to fully understand a situation, or to just have a human connection. In these cases, we embrace the benefits of synchronous communication.\n\nFor more details on how we collaborate remotely in general, feel free to add [this blog](https://about.gitlab.com/blog/designing-in-an-all-remote-company/) to your reading list!\n\n\n## 💡 Tips and things to keep in mind when meeting\n\nYou may have a friend of a friend who has a horror story about video calls with coworkers. Mishaps can happen to the best of us (especially those of us with cats), and we understand that at GitLab. Here are a few of the things we keep in mind to make synchronous collaboration as seamless an experience as possible:\n\n**_Becka_**: Keep an agenda! One of the coolest things about GitLab meetings is that there’s always an agenda attached, so you can see what will be covered. Anyone on the call is empowered and encouraged to add items to the agenda, whether it’s to draw attention to an issue, invite feedback, or discuss something process oriented as a group. We can always add “Read-only” items at the top if there are a lot of agenda items, if the discussion can take place asynchronously, or if it’s more of an FYI (“Thank you so much to Alexis for starting this awesome blog post [linked to doc] about remote work!”).\n\nHaving a meeting agenda completed in advance (and often elaborated upon during the meeting), lets attendees come prepared and gives everyone a chance to be heard. If you decide that the other agenda items are higher priority, you can always add yours to the bottom of the list and feel good knowing that if time runs up, it will automatically be moved up as higher priority in the following meeting.\n\nFinally, agenda items are a great place to revisit to-dos from weeks prior, to find links to issues that were discussed, and a great single source of truth for meeting notes that all can contribute to.\n\n**_Becka:_** Mute your mic when you aren’t speaking to avoid frustration and perhaps embarrassment. 👀\n\n**_Holly:_** Remote work can blur the lines between personal and professional, but we are all human and things just happen sometimes! If anything, this can create bonding moments.\n\n**_Alexis:_** Many of our [collaboration values](https://handbook.gitlab.com/handbook/values/#collaboration) are around being kind to each other. This can translate to video calls and collaborative workspaces, too! Build any sessions with easy collaboration in mind. Give each other space to respond, and listen to each other. Pause often to allow other people to chime in with thoughts or ideas without interruption. Read the room as you typically would in person. One thing that really helps with this is turning your camera on during meetings, so that others can see your face and read your body language. I know sometimes it is tempting to join with your camera off, but trust me - it helps!\n\nAnother way you can be kind to others is by scheduling meetings with a 5-minute buffer at the end. So, for example, instead of blocking 30 minutes of time with someone, schedule them for 25 minutes. There is nothing worse having back-to-back meetings without time for making coffee, taking a bio break, or just walking around and stretching (hopefully toward some place that has a snack you can bring with you to the next meeting).\n\n**_Matej:_** If you need to collaborate often with the same teammates, schedule your syncs as recurring in a consistent cadence and have an agenda. This allows participants to be intentional in advance about what they’d like to cover during that set time, so they can understand expectations and be prepared - which enables everyone to collaborate on more items!\n\n**_Alexis and Holly:_** Lean into the fact that most coworkers may only be seeing your upper half and anything behind you, and fill that space with your personality (we like to wear outrageously silly sweaters or put our favorite art behind us)! Dogs or family walking behind you or interacting with the camera to say hi to colleagues is not only accepted at GitLab but encouraged. Working outside of an office means that coworkers can get to know you outside of the office “version” of you, if that is something you feel comfortable with.\n\n\n## 🦊 How do you do remote?\n\nFeel free to ping us on Twitter at [@gitlab](https://twitter.com/gitlab?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor) with any remote synchronous collaboration tips and tricks in your toolbox that you think our team could learn from. See you in GitLab!\n\n###### [Alexis Ginsberg](https://gitlab.com/uhlexsis) (Chicago, IL, USA GMT-5), [Holly Reynolds](https://gitlab.com/hollyreynolds) (Roswell, Georgia, USA GMT-4), [Becka Lippert](https://gitlab.com/beckalippert) (Austin, TX, USA - and looking forward to working outside of the States when possible and responsible -  GMT-5), [Matej Latin](https://gitlab.com/matejlatin) (Ljubljana, Slovenia GMT+2)\n\nCover image by [Sincerely Media](https://unsplash.com/photos/ylveRpZ8L1s) on [Unsplash](https://www.unsplash.com)\n",[29,30,31,32,33],"design","UX","UI","remote work","collaboration","yml",{},true,"/en-us/blog/synchronous-collaboration-as-a-remote-designer-at-gitlab",{"title":18,"description":19,"ogTitle":18,"ogDescription":19,"noIndex":15,"ogImage":25,"ogUrl":39,"ogSiteName":40,"ogType":41,"canonicalUrls":39},"https://about.gitlab.com/blog/synchronous-collaboration-as-a-remote-designer-at-gitlab","https://about.gitlab.com","article","en-us/blog/synchronous-collaboration-as-a-remote-designer-at-gitlab",[29,44,45,46,33],"ux","ui","remote-work","HJ_UjWxpZ2ifUH01AvO8q08i3EWs8HW9-IOzqFVT20Y",{"data":49},{"logo":50,"freeTrial":55,"sales":60,"login":65,"items":70,"search":378,"minimal":409,"duo":428,"pricingDeployment":438},{"config":51},{"href":52,"dataGaName":53,"dataGaLocation":54},"/","gitlab logo","header",{"text":56,"config":57},"Get free trial",{"href":58,"dataGaName":59,"dataGaLocation":54},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":61,"config":62},"Talk to sales",{"href":63,"dataGaName":64,"dataGaLocation":54},"/sales/","sales",{"text":66,"config":67},"Sign in",{"href":68,"dataGaName":69,"dataGaLocation":54},"https://gitlab.com/users/sign_in/","sign in",[71,98,193,198,299,359],{"text":72,"config":73,"cards":75},"Platform",{"dataNavLevelOne":74},"platform",[76,82,90],{"title":72,"description":77,"link":78},"The intelligent orchestration platform for DevSecOps",{"text":79,"config":80},"Explore our Platform",{"href":81,"dataGaName":74,"dataGaLocation":54},"/platform/",{"title":83,"description":84,"link":85},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":86,"config":87},"Meet GitLab Duo",{"href":88,"dataGaName":89,"dataGaLocation":54},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":91,"description":92,"link":93},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":94,"config":95},"Learn more",{"href":96,"dataGaName":97,"dataGaLocation":54},"/why-gitlab/","why gitlab",{"text":99,"left":36,"config":100,"link":102,"lists":106,"footer":175},"Product",{"dataNavLevelOne":101},"solutions",{"text":103,"config":104},"View all Solutions",{"href":105,"dataGaName":101,"dataGaLocation":54},"/solutions/",[107,131,154],{"title":108,"description":109,"link":110,"items":115},"Automation","CI/CD and automation to accelerate deployment",{"config":111},{"icon":112,"href":113,"dataGaName":114,"dataGaLocation":54},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[116,120,123,127],{"text":117,"config":118},"CI/CD",{"href":119,"dataGaLocation":54,"dataGaName":117},"/solutions/continuous-integration/",{"text":83,"config":121},{"href":88,"dataGaLocation":54,"dataGaName":122},"gitlab duo agent platform - product menu",{"text":124,"config":125},"Source Code Management",{"href":126,"dataGaLocation":54,"dataGaName":124},"/solutions/source-code-management/",{"text":128,"config":129},"Automated Software Delivery",{"href":113,"dataGaLocation":54,"dataGaName":130},"Automated software delivery",{"title":132,"description":133,"link":134,"items":139},"Security","Deliver code faster without compromising security",{"config":135},{"href":136,"dataGaName":137,"dataGaLocation":54,"icon":138},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[140,144,149],{"text":141,"config":142},"Application Security Testing",{"href":136,"dataGaName":143,"dataGaLocation":54},"Application security testing",{"text":145,"config":146},"Software Supply Chain Security",{"href":147,"dataGaLocation":54,"dataGaName":148},"/solutions/supply-chain/","Software supply chain security",{"text":150,"config":151},"Software Compliance",{"href":152,"dataGaName":153,"dataGaLocation":54},"/solutions/software-compliance/","software compliance",{"title":155,"link":156,"items":161},"Measurement",{"config":157},{"icon":158,"href":159,"dataGaName":160,"dataGaLocation":54},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[162,166,170],{"text":163,"config":164},"Visibility & Measurement",{"href":159,"dataGaLocation":54,"dataGaName":165},"Visibility and Measurement",{"text":167,"config":168},"Value Stream Management",{"href":169,"dataGaLocation":54,"dataGaName":167},"/solutions/value-stream-management/",{"text":171,"config":172},"Analytics & Insights",{"href":173,"dataGaLocation":54,"dataGaName":174},"/solutions/analytics-and-insights/","Analytics and insights",{"title":176,"items":177},"GitLab for",[178,183,188],{"text":179,"config":180},"Enterprise",{"href":181,"dataGaLocation":54,"dataGaName":182},"/enterprise/","enterprise",{"text":184,"config":185},"Small Business",{"href":186,"dataGaLocation":54,"dataGaName":187},"/small-business/","small business",{"text":189,"config":190},"Public Sector",{"href":191,"dataGaLocation":54,"dataGaName":192},"/solutions/public-sector/","public sector",{"text":194,"config":195},"Pricing",{"href":196,"dataGaName":197,"dataGaLocation":54,"dataNavLevelOne":197},"/pricing/","pricing",{"text":199,"config":200,"link":202,"lists":206,"feature":286},"Resources",{"dataNavLevelOne":201},"resources",{"text":203,"config":204},"View all resources",{"href":205,"dataGaName":201,"dataGaLocation":54},"/resources/",[207,240,258],{"title":208,"items":209},"Getting started",[210,215,220,225,230,235],{"text":211,"config":212},"Install",{"href":213,"dataGaName":214,"dataGaLocation":54},"/install/","install",{"text":216,"config":217},"Quick start guides",{"href":218,"dataGaName":219,"dataGaLocation":54},"/get-started/","quick setup checklists",{"text":221,"config":222},"Learn",{"href":223,"dataGaLocation":54,"dataGaName":224},"https://university.gitlab.com/","learn",{"text":226,"config":227},"Product documentation",{"href":228,"dataGaName":229,"dataGaLocation":54},"https://docs.gitlab.com/","product documentation",{"text":231,"config":232},"Best practice videos",{"href":233,"dataGaName":234,"dataGaLocation":54},"/getting-started-videos/","best practice videos",{"text":236,"config":237},"Integrations",{"href":238,"dataGaName":239,"dataGaLocation":54},"/integrations/","integrations",{"title":241,"items":242},"Discover",[243,248,253],{"text":244,"config":245},"Customer success stories",{"href":246,"dataGaName":247,"dataGaLocation":54},"/customers/","customer success stories",{"text":249,"config":250},"Blog",{"href":251,"dataGaName":252,"dataGaLocation":54},"/blog/","blog",{"text":254,"config":255},"Remote",{"href":256,"dataGaName":257,"dataGaLocation":54},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":259,"items":260},"Connect",[261,266,271,276,281],{"text":262,"config":263},"GitLab Services",{"href":264,"dataGaName":265,"dataGaLocation":54},"/services/","services",{"text":267,"config":268},"Community",{"href":269,"dataGaName":270,"dataGaLocation":54},"/community/","community",{"text":272,"config":273},"Forum",{"href":274,"dataGaName":275,"dataGaLocation":54},"https://forum.gitlab.com/","forum",{"text":277,"config":278},"Events",{"href":279,"dataGaName":280,"dataGaLocation":54},"/events/","events",{"text":282,"config":283},"Partners",{"href":284,"dataGaName":285,"dataGaLocation":54},"/partners/","partners",{"backgroundColor":287,"textColor":288,"text":289,"image":290,"link":294},"#2f2a6b","#fff","Insights for the future of software development",{"altText":291,"config":292},"the source promo card",{"src":293},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":295,"config":296},"Read the latest",{"href":297,"dataGaName":298,"dataGaLocation":54},"/the-source/","the source",{"text":300,"config":301,"lists":303},"Company",{"dataNavLevelOne":302},"company",[304],{"items":305},[306,311,317,319,324,329,334,339,344,349,354],{"text":307,"config":308},"About",{"href":309,"dataGaName":310,"dataGaLocation":54},"/company/","about",{"text":312,"config":313,"footerGa":316},"Jobs",{"href":314,"dataGaName":315,"dataGaLocation":54},"/jobs/","jobs",{"dataGaName":315},{"text":277,"config":318},{"href":279,"dataGaName":280,"dataGaLocation":54},{"text":320,"config":321},"Leadership",{"href":322,"dataGaName":323,"dataGaLocation":54},"/company/team/e-group/","leadership",{"text":325,"config":326},"Team",{"href":327,"dataGaName":328,"dataGaLocation":54},"/company/team/","team",{"text":330,"config":331},"Handbook",{"href":332,"dataGaName":333,"dataGaLocation":54},"https://handbook.gitlab.com/","handbook",{"text":335,"config":336},"Investor relations",{"href":337,"dataGaName":338,"dataGaLocation":54},"https://ir.gitlab.com/","investor relations",{"text":340,"config":341},"Trust Center",{"href":342,"dataGaName":343,"dataGaLocation":54},"/security/","trust center",{"text":345,"config":346},"AI Transparency Center",{"href":347,"dataGaName":348,"dataGaLocation":54},"/ai-transparency-center/","ai transparency center",{"text":350,"config":351},"Newsletter",{"href":352,"dataGaName":353,"dataGaLocation":54},"/company/contact/#contact-forms","newsletter",{"text":355,"config":356},"Press",{"href":357,"dataGaName":358,"dataGaLocation":54},"/press/","press",{"text":360,"config":361,"lists":362},"Contact us",{"dataNavLevelOne":302},[363],{"items":364},[365,368,373],{"text":61,"config":366},{"href":63,"dataGaName":367,"dataGaLocation":54},"talk to sales",{"text":369,"config":370},"Support portal",{"href":371,"dataGaName":372,"dataGaLocation":54},"https://support.gitlab.com","support portal",{"text":374,"config":375},"Customer portal",{"href":376,"dataGaName":377,"dataGaLocation":54},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":379,"login":380,"suggestions":387},"Close",{"text":381,"link":382},"To search repositories and projects, login to",{"text":383,"config":384},"gitlab.com",{"href":68,"dataGaName":385,"dataGaLocation":386},"search login","search",{"text":388,"default":389},"Suggestions",[390,392,396,398,402,406],{"text":83,"config":391},{"href":88,"dataGaName":83,"dataGaLocation":386},{"text":393,"config":394},"Code Suggestions (AI)",{"href":395,"dataGaName":393,"dataGaLocation":386},"/solutions/code-suggestions/",{"text":117,"config":397},{"href":119,"dataGaName":117,"dataGaLocation":386},{"text":399,"config":400},"GitLab on AWS",{"href":401,"dataGaName":399,"dataGaLocation":386},"/partners/technology-partners/aws/",{"text":403,"config":404},"GitLab on Google Cloud",{"href":405,"dataGaName":403,"dataGaLocation":386},"/partners/technology-partners/google-cloud-platform/",{"text":407,"config":408},"Why GitLab?",{"href":96,"dataGaName":407,"dataGaLocation":386},{"freeTrial":410,"mobileIcon":415,"desktopIcon":420,"secondaryButton":423},{"text":411,"config":412},"Start free trial",{"href":413,"dataGaName":59,"dataGaLocation":414},"https://gitlab.com/-/trials/new/","nav",{"altText":416,"config":417},"Gitlab Icon",{"src":418,"dataGaName":419,"dataGaLocation":414},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":416,"config":421},{"src":422,"dataGaName":419,"dataGaLocation":414},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":424,"config":425},"Get Started",{"href":426,"dataGaName":427,"dataGaLocation":414},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/compare/gitlab-vs-github/","get started",{"freeTrial":429,"mobileIcon":434,"desktopIcon":436},{"text":430,"config":431},"Learn more about GitLab Duo",{"href":432,"dataGaName":433,"dataGaLocation":414},"/gitlab-duo/","gitlab duo",{"altText":416,"config":435},{"src":418,"dataGaName":419,"dataGaLocation":414},{"altText":416,"config":437},{"src":422,"dataGaName":419,"dataGaLocation":414},{"freeTrial":439,"mobileIcon":444,"desktopIcon":446},{"text":440,"config":441},"Back to pricing",{"href":196,"dataGaName":442,"dataGaLocation":414,"icon":443},"back to pricing","GoBack",{"altText":416,"config":445},{"src":418,"dataGaName":419,"dataGaLocation":414},{"altText":416,"config":447},{"src":422,"dataGaName":419,"dataGaLocation":414},{"title":449,"button":450,"config":455},"See how agentic AI transforms software delivery",{"text":451,"config":452},"Watch GitLab Transcend now",{"href":453,"dataGaName":454,"dataGaLocation":54},"/events/transcend/virtual/","transcend event",{"layout":456,"icon":457},"release","AiStar",{"data":459},{"text":460,"source":461,"edit":467,"contribute":472,"config":477,"items":482,"minimal":689},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":462,"config":463},"View page source",{"href":464,"dataGaName":465,"dataGaLocation":466},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":468,"config":469},"Edit this page",{"href":470,"dataGaName":471,"dataGaLocation":466},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":473,"config":474},"Please contribute",{"href":475,"dataGaName":476,"dataGaLocation":466},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":478,"facebook":479,"youtube":480,"linkedin":481},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[483,530,584,628,655],{"title":194,"links":484,"subMenu":499},[485,489,494],{"text":486,"config":487},"View plans",{"href":196,"dataGaName":488,"dataGaLocation":466},"view plans",{"text":490,"config":491},"Why Premium?",{"href":492,"dataGaName":493,"dataGaLocation":466},"/pricing/premium/","why premium",{"text":495,"config":496},"Why Ultimate?",{"href":497,"dataGaName":498,"dataGaLocation":466},"/pricing/ultimate/","why ultimate",[500],{"title":501,"links":502},"Contact Us",[503,506,508,510,515,520,525],{"text":504,"config":505},"Contact sales",{"href":63,"dataGaName":64,"dataGaLocation":466},{"text":369,"config":507},{"href":371,"dataGaName":372,"dataGaLocation":466},{"text":374,"config":509},{"href":376,"dataGaName":377,"dataGaLocation":466},{"text":511,"config":512},"Status",{"href":513,"dataGaName":514,"dataGaLocation":466},"https://status.gitlab.com/","status",{"text":516,"config":517},"Terms of use",{"href":518,"dataGaName":519,"dataGaLocation":466},"/terms/","terms of use",{"text":521,"config":522},"Privacy statement",{"href":523,"dataGaName":524,"dataGaLocation":466},"/privacy/","privacy statement",{"text":526,"config":527},"Cookie preferences",{"dataGaName":528,"dataGaLocation":466,"id":529,"isOneTrustButton":36},"cookie preferences","ot-sdk-btn",{"title":99,"links":531,"subMenu":540},[532,536],{"text":533,"config":534},"DevSecOps platform",{"href":81,"dataGaName":535,"dataGaLocation":466},"devsecops platform",{"text":537,"config":538},"AI-Assisted Development",{"href":432,"dataGaName":539,"dataGaLocation":466},"ai-assisted development",[541],{"title":542,"links":543},"Topics",[544,549,554,559,564,569,574,579],{"text":545,"config":546},"CICD",{"href":547,"dataGaName":548,"dataGaLocation":466},"/topics/ci-cd/","cicd",{"text":550,"config":551},"GitOps",{"href":552,"dataGaName":553,"dataGaLocation":466},"/topics/gitops/","gitops",{"text":555,"config":556},"DevOps",{"href":557,"dataGaName":558,"dataGaLocation":466},"/topics/devops/","devops",{"text":560,"config":561},"Version Control",{"href":562,"dataGaName":563,"dataGaLocation":466},"/topics/version-control/","version control",{"text":565,"config":566},"DevSecOps",{"href":567,"dataGaName":568,"dataGaLocation":466},"/topics/devsecops/","devsecops",{"text":570,"config":571},"Cloud Native",{"href":572,"dataGaName":573,"dataGaLocation":466},"/topics/cloud-native/","cloud native",{"text":575,"config":576},"AI for Coding",{"href":577,"dataGaName":578,"dataGaLocation":466},"/topics/devops/ai-for-coding/","ai for coding",{"text":580,"config":581},"Agentic AI",{"href":582,"dataGaName":583,"dataGaLocation":466},"/topics/agentic-ai/","agentic ai",{"title":585,"links":586},"Solutions",[587,589,591,596,600,603,607,610,612,615,618,623],{"text":141,"config":588},{"href":136,"dataGaName":141,"dataGaLocation":466},{"text":130,"config":590},{"href":113,"dataGaName":114,"dataGaLocation":466},{"text":592,"config":593},"Agile development",{"href":594,"dataGaName":595,"dataGaLocation":466},"/solutions/agile-delivery/","agile delivery",{"text":597,"config":598},"SCM",{"href":126,"dataGaName":599,"dataGaLocation":466},"source code management",{"text":545,"config":601},{"href":119,"dataGaName":602,"dataGaLocation":466},"continuous integration & delivery",{"text":604,"config":605},"Value stream management",{"href":169,"dataGaName":606,"dataGaLocation":466},"value stream management",{"text":550,"config":608},{"href":609,"dataGaName":553,"dataGaLocation":466},"/solutions/gitops/",{"text":179,"config":611},{"href":181,"dataGaName":182,"dataGaLocation":466},{"text":613,"config":614},"Small business",{"href":186,"dataGaName":187,"dataGaLocation":466},{"text":616,"config":617},"Public sector",{"href":191,"dataGaName":192,"dataGaLocation":466},{"text":619,"config":620},"Education",{"href":621,"dataGaName":622,"dataGaLocation":466},"/solutions/education/","education",{"text":624,"config":625},"Financial services",{"href":626,"dataGaName":627,"dataGaLocation":466},"/solutions/finance/","financial services",{"title":199,"links":629},[630,632,634,636,639,641,643,645,647,649,651,653],{"text":211,"config":631},{"href":213,"dataGaName":214,"dataGaLocation":466},{"text":216,"config":633},{"href":218,"dataGaName":219,"dataGaLocation":466},{"text":221,"config":635},{"href":223,"dataGaName":224,"dataGaLocation":466},{"text":226,"config":637},{"href":228,"dataGaName":638,"dataGaLocation":466},"docs",{"text":249,"config":640},{"href":251,"dataGaName":252,"dataGaLocation":466},{"text":244,"config":642},{"href":246,"dataGaName":247,"dataGaLocation":466},{"text":254,"config":644},{"href":256,"dataGaName":257,"dataGaLocation":466},{"text":262,"config":646},{"href":264,"dataGaName":265,"dataGaLocation":466},{"text":267,"config":648},{"href":269,"dataGaName":270,"dataGaLocation":466},{"text":272,"config":650},{"href":274,"dataGaName":275,"dataGaLocation":466},{"text":277,"config":652},{"href":279,"dataGaName":280,"dataGaLocation":466},{"text":282,"config":654},{"href":284,"dataGaName":285,"dataGaLocation":466},{"title":300,"links":656},[657,659,661,663,665,667,669,673,678,680,682,684],{"text":307,"config":658},{"href":309,"dataGaName":302,"dataGaLocation":466},{"text":312,"config":660},{"href":314,"dataGaName":315,"dataGaLocation":466},{"text":320,"config":662},{"href":322,"dataGaName":323,"dataGaLocation":466},{"text":325,"config":664},{"href":327,"dataGaName":328,"dataGaLocation":466},{"text":330,"config":666},{"href":332,"dataGaName":333,"dataGaLocation":466},{"text":335,"config":668},{"href":337,"dataGaName":338,"dataGaLocation":466},{"text":670,"config":671},"Sustainability",{"href":672,"dataGaName":670,"dataGaLocation":466},"/sustainability/",{"text":674,"config":675},"Diversity, inclusion and belonging (DIB)",{"href":676,"dataGaName":677,"dataGaLocation":466},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":340,"config":679},{"href":342,"dataGaName":343,"dataGaLocation":466},{"text":350,"config":681},{"href":352,"dataGaName":353,"dataGaLocation":466},{"text":355,"config":683},{"href":357,"dataGaName":358,"dataGaLocation":466},{"text":685,"config":686},"Modern Slavery Transparency Statement",{"href":687,"dataGaName":688,"dataGaLocation":466},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":690},[691,694,697],{"text":692,"config":693},"Terms",{"href":518,"dataGaName":519,"dataGaLocation":466},{"text":695,"config":696},"Cookies",{"dataGaName":528,"dataGaLocation":466,"id":529,"isOneTrustButton":36},{"text":698,"config":699},"Privacy",{"href":523,"dataGaName":524,"dataGaLocation":466},[701,714,725,737],{"id":702,"title":21,"body":11,"config":703,"content":705,"description":11,"extension":34,"meta":709,"navigation":36,"path":710,"seo":711,"stem":712,"__hash__":713},"blogAuthors/en-us/blog/authors/alexis-ginsberg.yml",{"template":704},"BlogAuthor",{"name":21,"config":706},{"headshot":707,"ctfId":708},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","lmDIchpcDx48jKuke2B4l",{},"/en-us/blog/authors/alexis-ginsberg",{},"en-us/blog/authors/alexis-ginsberg","CyILUsYFARian5wM-q6--5wHevE5tKUksdaGr754bGs",{"id":715,"title":22,"body":11,"config":716,"content":717,"description":11,"extension":34,"meta":720,"navigation":36,"path":721,"seo":722,"stem":723,"__hash__":724},"blogAuthors/en-us/blog/authors/becka-lippert.yml",{"template":704},{"name":22,"config":718},{"headshot":707,"ctfId":719},"7wX6Hbvb3AbKwa6NnClvBX",{},"/en-us/blog/authors/becka-lippert",{},"en-us/blog/authors/becka-lippert","JqPVWY1sS5tdu0gQCz5FWr0mWK_BkgOJBD6o-RZ-UjU",{"id":726,"title":23,"body":11,"config":727,"content":728,"description":11,"extension":34,"meta":732,"navigation":36,"path":733,"seo":734,"stem":735,"__hash__":736},"blogAuthors/en-us/blog/authors/matej-latin.yml",{"template":704},{"name":23,"config":729},{"headshot":730,"ctfId":731},"","matejlatin",{},"/en-us/blog/authors/matej-latin",{},"en-us/blog/authors/matej-latin","U19HLsh0tqTRT_tDjZHONfKgfdmtiMQgzx0fKt9ySPU",{"id":738,"title":24,"body":11,"config":739,"content":740,"description":11,"extension":34,"meta":743,"navigation":36,"path":744,"seo":745,"stem":746,"__hash__":747},"blogAuthors/en-us/blog/authors/holly-reynolds.yml",{"template":704},{"name":24,"config":741},{"headshot":730,"ctfId":742},"hollyreynolds",{},"/en-us/blog/authors/holly-reynolds",{},"en-us/blog/authors/holly-reynolds","4RPNkh--uyg8tOK3WIT2Sb3NAJdhmERqRP6TcgjOBto",[749,760,774],{"content":750,"config":758},{"title":751,"description":752,"authors":753,"heroImage":755,"date":756,"body":757,"category":12},"CEO Shadow Takeaways from Jacie","Recap of my experience in the CEO Shadow Program.",[754],"Jacie Bandur","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664102/Blog/Hero%20Images/gitlab-values-cover.png","2021-05-18","\n\n{::options parse_block_html=\"true\" /}\n\n\nHi! I’m Jacie Bandur. I completed GitLab’s CEO Shadow program from 2021-04-26 through 2021-05-07. It was a really enlightening experience. I generally work in Learning and Development and consider myself a lifelong learner. I can’t even explain how much I learned in such a short about of time. I learned a lot about the business. I learned a lot about the product. But learned even more about the importance of iteration in everything we do.\n\n### Qualifications to Participate\n\nI wanted to start this off with touching on qualifications to participate in the program.\n\nI am the type of person that has gone through most of my life thinking I’m not qualified for things. I’m not qualified for that job, that promotion, that program. The list goes on and on.\n\nWhen I saw the [CEO Shadow program](/blog/ceo-shadow-impressions-takeaways/) kick off in 2019, I really wanted to participate. I was a little intimidated. Who wouldn’t be, spending 2 weeks with the CEO of any company? But time passed and all the sudden it was 2021 and I had not taken any steps to participating in the program.\n\nIf you are sitting there waiting for someone to tell you that you are qualified to participate in this program, I’m not big on giving “pep talks,” but here’s me telling you - You are qualified for this program. There’s never going to be a good or perfect time to do it. Tell your manager you want to do the CEO Shadow program. Stop waiting. Sign up today.\n\nNote: Take a look at the [eligibility](https://handbook.gitlab.com/handbook/ceo/shadow/#eligibility) section of the CEO Shadow page for more information on signing up.\n\n### Pre-Program Tips\n\nThere are many things recommended for shadows to do pre-program outlined on the CEO Shadow handbook page. As I was going through the program there were things that I thought helped me (or would have helped me).\n\nHere are my top 6 recommendations:\n\n1. Make sure your team knows you will be unavailable for 2 weeks. This isn’t a program that can or should be done alongside your normal day to day work. I found catching up from the 2 weeks away kind of difficult because I was trying to keep up on what was going on and I had a bunch of half done things.\n1. Talk with people who have done the shadow program - schedule at least 3 coffee chats with CEO Shadow Alumni.\n1. Have food that is easy to eat quickly. Sid’s meetings are back to back most days, so you will have small amounts of time to eat throughout the day. Sid does eat during calls, which you are welcome to do, too, but if you are taking notes, it is difficult to eat. And this will make you realize why speedy meetings are so important!\n1. Listen to the [Executive Leadership LinkedIn Learning course](https://www.linkedin.com/learning/executive-leadership/).\n1. Be prepared to ask questions. When doing the program virtually, there isn’t a ton of time for asking questions, so when one would come up, I would add it to a note on my computer and ask if there was ever time with just the shadows and Sid.\n1. Take at least 1 day off after the program. Take even a couple of days off if you can! This is recommended on the handbook page, but I can’t stress this enough.\n\n\n### Takeaways\n\n**Group Conversations**\n\nI’ve been at GitLab for almost 4 years. When I joined, I made it a point to attend as many GC’s as I could. I had gotten out of the habit of attending Group Conversations. After attending them again for 2 weeks, I realized how important they are to understand better what is going on across the business. Everything in the organization is so intertwined. It’s helpful to understand what other teams are working on and succeeding in.\n\n**Feedback**\n\nWe should all be giving and receiving feedback often. We have a whole [handbook page on giving and receiving feedback](https://handbook.gitlab.com/handbook/people-group/guidance-on-feedback/). Read the handbook page and watch the videos, as well. Practice giving feedback. I recommend using the [1-1 agenda](https://handbook.gitlab.com/handbook/leadership/1-1/suggested-agenda-format/) Sid uses, because Feedback is an essential piece of that agenda, and it makes feedback more of a routine thing.\n\n**Biggest Takeaway**\n\nWe have an incredible team here at GitLab, from Engineering to Product to Sales to People and all the groups in between. There are so many great ideas. I observed the constant reinforcement by Sid to start with something small and build on it. You can ALWAYS make something more complex. It’s hard to go back to something more simple when you start with something complex.\n\nA couple of quotes that I heard from Sid during the program that reinforced this point:\n\n- “Every complex system evolves from a simple system that worked.”\n- “It’s very clear what is the simple solution. We can always make it more complicated as we go on.”\n\nI know they are very similar, but they happened in different meetings on different days, so the point was reinforced repeatedly.\n\nDuring the program, I reflected on the projects that I’am working on. How many of them am I trying to do too much on before releasing. Probably all of them. When I’m working on projects in the future, I will break them down into smaller, more doable chunks. Iteration is hard - it’s a skill to be practicing constantly.\n\n\n### Overall\n\nOverall, the program was really insightful and impactful. If you haven’t participated in it yet, I cannot encourage you enough to do so!\n",{"slug":759,"featured":15,"template":16},"ceo-shadow-recap",{"content":761,"config":772},{"title":762,"description":763,"authors":764,"heroImage":766,"date":767,"body":768,"category":12,"tags":769},"Why I love contributing to GitLab","Making small meaningful changes is what it's all about.",[765],"Austin Regnery","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679501/Blog/Hero%20Images/new-feature.png","2021-05-11","It was mid-morning on a Tuesday in February, and I had 10 minutes in between meetings. So I decided to try and solve a pain point of mine.\nYou see, I had to memorize this HTML snippet to create a collapsible section in GitLab Issue descriptions and comments, but I kept forgetting it. Was it `summary` or `section`? I could never remember.\n```html\n\u003Cdetails>\n\u003Csummary>Insert Title\u003C/summary>\nHidden content\n\u003C/details>\n```\nEven though it is not vanilla Markdown, GitLab knows how to interpret some HTML. I used this formatting trick fairly often since full-page screenshots can occupy a lot of screen space, which leads to excessive scrolling.\nSo I decided to poke around our codebase to see how the other Markdown shortcuts worked. To my surprise, it was pretty straightforward. Each shortcut had a simple text input that mapped to each button. This implementation was simple to replicate since I just needed to copy/paste and replace a few words.\n![Image of Vue and Haml files with editor shortcuts](https://about.gitlab.com/images/blogimages/why-i-love-contributing-to-gitlab/vue-haml.png){: .shadow}\nThe Vue and Haml files with the new shortcut\n\nI started a branch and began hacking away at the code. Now, I would never call myself a Software Engineer, but I like to try and make things from time to time. I was able to add a new shortcut to the toolbar to insert this code snippet for me in less than 10 minutes. No more memorizing! Making contributions like this is what makes working at GitLab so special.\nNow, it wasn't ready for production, but I at least had something that worked. I shared it with my UX colleagues in Slack, and it started to gain traction with several up-votes and few constructive comments on how to make it better.\nWith the functionality flushed out, a few other designers helped me get a better icon added to our SVG library. Using clear iconography is critical for communicating information more clearly.\n| Initial Icon | Final Icon |\n| - | - |\n| ![SVG of chevron right icon](https://about.gitlab.com/images/blogimages/why-i-love-contributing-to-gitlab/chevron-right.svg) | ![SVG of details block icon](https://about.gitlab.com/images/blogimages/why-i-love-contributing-to-gitlab/details-block.svg) |\n\nThe last thing to do was resolve my failing tests, and I had several teammates help me do that.\n![Gif of the shortcut being used](https://about.gitlab.com/images/blogimages/why-i-love-contributing-to-gitlab/demo.gif)\n\nToday [this change](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/54938) merged! Now I solved a pain point for me and others. It took a few months to go from idea to production, but the effort was super low. I'd say the return on my initial investment, 10 minutes, is super high.\n> Having a direct impact on a product was never an option for me before joining GitLab.\n\n![Image of participants in the Merge Request](https://about.gitlab.com/images/blogimages/why-i-love-contributing-to-gitlab/participants.png)\n\n\nThank you to everyone that helped me deploy this\n",[30,770,771],"product","AWS",{"slug":773,"featured":15,"template":16},"why-i-love-contributing-to-gitlab",{"content":775,"config":786},{"title":776,"description":777,"authors":778,"heroImage":780,"date":767,"body":781,"category":12,"tags":782},"Placebo Lines on the Pipeline Graph","Have you noticed the connecting lines missing on your pipelines lately? Here's why",[779],"Sam Beckham","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679507/Blog/Hero%20Images/ci-cd.png","\n\n{::options parse_block_html=\"true\" /}\n\n\n\nHave you ever pressed the close door button on the elevator, in the hope that you'll save a few precious seconds?\nOr got frustrated at the person stood next to you at the cross-walk, neglecting to press the button?\nWell, maybe they know something you don't, or perhaps you know this already.\nMany buttons in our society lie to us.\n[David McRaney](https://youarenotsosmart.com/2010/02/10/placebo-buttons/) dubbed these, \"Placebo buttons\" and they're everywhere.\nThose elevator doors won't close any faster and the cross-walk button has no effect on the lights.\nThe only lights they control are the lights on the buttons themselves.\nThey give you the feedback you crave, but that's all they're doing.\n\nThese placebos aren't constrained to the physical world, they're prevalent in [UI design](/blog/the-evolution-of-ux-at-gitlab/) too.\nFrom literal placebo buttons like [YouTube's downvote](https://www.quora.com/Does-downvoting-a-comment-on-YouTube-even-do-anything), to more subtle effects like Instagram always [pretending to work](https://www.fastcompany.com/1669788/the-3-white-lies-behind-instagrams-lightning-speed), or progress bars that have a [fixed animation](https://www.theatlantic.com/technology/archive/2017/02/why-some-apps-use-fake-progress-bars/517233/).\nThey're everywhere if you know where to look.\n\nAt GitLab, we created a placebo of our own in one of our core features; the pipeline graph.\n\nThose of you who have used our pipeline graph, will be familiar with its appearance.\nThere's a series of jobs, grouped by stages, connected by a series of lines depicting the relationships between the jobs.\nBut these lines might be lying to you.\nThese lines are indiscriminately drawn between each job in a stage, regardless of their relationship.\nThese lines are placebos.\n\n![The old pipeline rendering with lines connecting every job in a stage](https://about.gitlab.com/images/blogimages/placebo-lines_old-graph.png)\n\nThis wasn't a problem to begin with.\nA basic pipeline has several jobs across a handful of stages.\nJobs in each stage would run parallel to each other, but each stage would run sequentially.\nIn the image shown above, all the jobs in the test stage would trigger at the same time. Once those jobs had finished, all the jobs in the build stage would trigger.\nWe used rudimentary CSS to draw lines connecting each job in one stage to each job in the next.\nThese lines weren't calculated based on their connections, but still reflected the story they were telling.\n\nSince the introduction of `needs` relationships in [v12.2](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/47063), pipelines got a bit more complicated.\nNow you could configure a job in a later stage to trigger as soon as a job in an earlier stage completed.\nLooking at our old example, we could set the API deployment to run as soon as our spec tests passed.\nThis skips the remaining tests and the entire build stage, turning our lines into pretty little liars.\n\nWe had many internal discussions about these lines, and how to show the relationships between jobs.\nThere's the [`needs` visualization](https://docs.gitlab.com/ee/ci/directed_acyclic_graph/#needs-visualization), which does an excellent job of displaying these relationships, but the main pipeline graph was still inaccurate.\nFor the past few months, we've been [refactoring the pipeline graph](https://gitlab.com/gitlab-org/gitlab/-/issues/276949), giving it a new lease of life and fixing some of its issues along the way.\nOne of those issues were the faked lines.\nIn the new version, we can accurately draw lines between jobs.\nLines that actually depict the relationships jobs have with each other.\nNow the lines no-longer lie!\n\n![The newer pipeline graph showing the correct needs links between jobs](https://about.gitlab.com/images/blogimages/placebo-lines_new-graph.png)\n\nThe above image shows an unreleased version of the pipeline graph.\nYou can see the lines drawn between the jobs to show that the `deploy:API` job can start as soon as the `rspec` job is successful.\nSomething the old lines (shown earlier in this post) would have been unable to depict.\n\nOne unfortunate downside of this is that these lines can be quite expensive to calculate.\nThey're actual DOM nodes, drawn deliberately and placed precisely.\nOn smaller graphs this isn't a problem, but some of our initial tests have found pipelines with a potential 8000+ job connections.\nThat kind of calculation would grind the browser to a halt, and nobody wants that.\n\nAt GitLab, we believe in boring solutions.\nWe make the simple change that sets us on the path towards where we want to be.\nShip it, get feedback, and iterate.\nSo that's what we did.\nIn the first phase of this rollout, we shipped the new pipeline graph with no lines connecting the jobs.\nWe don't have to worry about the expensive calculations, and we still get to roll out the refactored pipeline graph.\n\n![The current (v13.11) pipeline graph showing no links between jobs](https://about.gitlab.com/images/blogimages/placebo-lines_current-graph.png)\n\nWe know some of you will miss them, but fear not.\nBoring solutions are just technical debt if you don't iterate on them.\nSo the [improved lines are coming](https://gitlab.com/groups/gitlab-org/-/epics/4509) in a future release, along with several other improvements to the pipeline graph.\nWe're already starting to roll out the new [Job Dependencies](https://gitlab.com/gitlab-org/gitlab/-/issues/298973) view which shows the jobs in a (much closer to) execution order.\nStay tuned for more updates, and watch [Sarah Groff Hennigh Palermo's talk](https://www.youtube.com/watch?v=R2EKqKjB7OQ) for the technical side of this effort and a deeper dive into some of the decisions we made.\n",[783,784,785,29],"CI","frontend","agile",{"slug":787,"featured":15,"template":16},"placebo-lines-on-the-pipeline-graph",{"promotions":789},[790,804,815],{"id":791,"categories":792,"header":794,"text":795,"button":796,"image":801},"ai-modernization",[793],"ai-ml","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":797,"config":798},"Get your AI maturity score",{"href":799,"dataGaName":800,"dataGaLocation":252},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":802},{"src":803},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":805,"categories":806,"header":807,"text":795,"button":808,"image":812},"devops-modernization",[770,568],"Are you just managing tools or shipping innovation?",{"text":809,"config":810},"Get your DevOps maturity score",{"href":811,"dataGaName":800,"dataGaLocation":252},"/assessments/devops-modernization-assessment/",{"config":813},{"src":814},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":816,"categories":817,"header":819,"text":795,"button":820,"image":824},"security-modernization",[818],"security","Are you trading speed for security?",{"text":821,"config":822},"Get your security maturity score",{"href":823,"dataGaName":800,"dataGaLocation":252},"/assessments/security-modernization-assessment/",{"config":825},{"src":826},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"header":828,"blurb":829,"button":830,"secondaryButton":835},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":831,"config":832},"Get your free trial",{"href":833,"dataGaName":59,"dataGaLocation":834},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":504,"config":836},{"href":63,"dataGaName":64,"dataGaLocation":834},1772652088836]