2020 The Guide to Remote DevOps How to build or transition to successful remote DevOps • Remote DevOps for all • Fundamentals of remote DevOps • Tips for building a DevOps culture remotely 2 Table of contents 03 INTRODUCTION 04 COMMUNICATION: A KEY DIFFERENTIATOR FOR REMOTE DEVOPS 05 FOUNDATIONS OF REMOTE DEVOPS Culture Communication Documentation Cycle time 07 STAGES OF REMOTE DEVOPS Not remote – until now Hybrid remote All-remote Watch GitLab for Remote Teams Demo 09 BUILDING A DEVOPS CULTURE REMOTELY It’s about the people Document roles and responsibilities Designate an official communication channel Bring structure to every meeting 11 APPLY DEVOPS PRINCIPLES REMOTELY USING GITLAB Agile planning Automation (use CI/CD to keep everyone informed) Security 15 HOW GITLAB DOES REMOTE DEVSECOPS Built-in security A complete DevSecOps platform 17 REMOTE TEAMS BRING DEVOPS TO THE NEXT LEVEL Follow us: #AllRemote 3 Introduction DevOps and remote work go hand in hand: Communication, collaboration, and asynchronous work are key for both practices. At GitLab, we practice remote work daily. GitLab’s culture is communicated through our publicly accessible handbook; our teams livestream their monthly release kick offs and retrospectives; and we designate GitLab issues as the official source of communication on all projects. Remote work can be an invaluable asset to any company. For DevOps, these benefits are multiplied when you’re able to align the foundations of remote work with the underpinnings of DevOps. According to GitLab’s 2018 Global Developer Report, remote teams trend higher in DevOps satisfaction compared to in-office teams. Remote workplace culture can aid DevOps adoption. As shown by the data to the right, remote teams report better visibility, more ingrained practices, better-established culture, and stronger team member buy-in than in-office teams. If DevOps practices came before remote work for your team, it’s likely that working remote will help your team further their DevOps skills. Conversely, if remote came before DevOps, your team may have an easier time adopting DevOps, as it will feel like an extension of remote work practices. This guide will help teams build strong remote DevOps practices and culture. Explore the benefits of remote DevOps, find best practices, and learn how GitLab has adopted DevSecOps as a remote company. As we continue to work from our kitchen tables, home offices, and sunny deck chairs during COVID-19 and potentially beyond, we hope that this guide will help you get the best remote DevOps experience possible. of remote teams say they have visibility into what others are working on compared to 57% of in-office teams of in-office teams cite replacing ingrained practices as their number one challenge compared to 49% of remote teams of remote teams agree they have a well-established DevOps culture compared to 34% of in-office teams of in-office teams disagree that their organization has a strong DevOps culture, compared to 27% of remote teams Watch GitLab for Remote Teams Demo Follow us: #AllRemote 4 Communication: A key differentiator for remote DevOps Remote work requires deliberate communication. While there are social advantages to in-person meetings, recording and documenting virtual meetings guarantees that all parties are on the same page. Employees sometimes take mutual understanding for granted during in-person meetings. People may feel like they agreed on the same decision when, in reality, they left with different impressions of what was discussed and decided. Furthermore, those who couldn't attend the meeting are out of the loop. For teams that hold daily standups and rely on in-person meetings, the likelihood of confusion and misunderstanding can increase dramatically without proper documentation. Remote work also means fewer interrupted tasks, which is especially important to employees who are part of the software development lifecycle (SDLC). According to a study conducted by former Georgia Tech PhD candidate Chris Parnin, programmers are likely to have only one 2-hour block of uninterrupted time during the day. After interruptions, it takes 10 to 15 minutes to get back on track. Watch GitLab for Remote Teams Demo In an office, interruptions can be more frequent. The benefit one feels from walking over to talk to a colleague at random may be a detriment for the other person. In a remote setting, employees can disconnect from communication while focusing on an important task. Over the course of a week, the time saved by efficient communication could add up to several extra hours for each employee. Remote DevOps provides valuable benefits to teams that can get it right. In the following sections, we’ll cover ways to succeed with DevOps in a remote setting. Follow us: #AllRemote 5 Foundations of remote DevOps Communication and collaboration are extremely important in remote organizations. Transparency and highly detailed documentation are central tenets to all remote work, and are also essential to DevOps. Culture Communication When building a remote team from the ground up, it’s easier to ingrain culture in new hires as they’re onboarded. But for teams that have suddenly become remote, it’s extremely important for managers to remind team members of the company’s values and cultures, and to be intentional about displaying and recognizing those values in everyday work. Team members must be able to trust one another and communicate clearly without malintent or fear of judgement. Managers need to trust that their teams will complete work. A sudden shift to remote work might entice some to micromanage, but in a distributed, remote environment, managers should track results, not hours. In remote work, communication is not saved or delayed for meetings — it needs to be done immediately and with clarity. Team leaders should choose formal and informal methods for communication. For example, teams could use chat or forums for informal communication, and a collaborative software tool for official communication. Team leadership needs to be connected and partnered with engineering, product, and security teams to ensure alignment with the organization and department. Quarterly reviews of key objectives with senior leadership will help to further the company strategy. Not only does this help business initiatives, it also helps DevOps teams work more efficiently, keeping everyone on the same page and informed on a project status. Watch GitLab for Remote Teams Demo Teams must learn to balance synchronous and asynchronous communication and work. We recommend starting with a brief, synchronous communication at the beginning of a project — like a project launch meeting, recorded for any team members whose time zones prevent them from attending. This way, the team can align on expectations, understand scope, and iterate on possible ideas. Follow us: #AllRemote 6 Documentation Cycle time Documentation is another key tenet of both remote work and DevOps. Without it, teams will struggle to achieve transparency and will be doomed to inefficiency. Strong documentation practices enable self-sufficient problem solving and boost transparency. This is especially important for remote DevOps teams: In an all-remote setting, mutual understanding should be intentionally achieved, and never assumed. For DevOps in particular, documentation will improve understanding and reduce the need for extraneous meetings. Standups can then be used to discuss persistent problems rather than tactical updates. Good culture, communication, and documentation all foster efficiency. Remote work allows you to get tasks done faster if culture, documentation, and communication are in place. Asynchronous communication enables continuous forward progress, rather than waiting for synchronous meetings that can function like bottlenecks. Remote work encourages a self-service mindset; combined with transparency, this allows employees to get work done without waiting for sign-offs and to communicate that work with other team members immediately. Recorded meetings are a helpful resource to refer back to later on. Creating a single document to house all notes and decisions is another way to effectively work asynchronously. If team members are unable to join a meeting, they can easily retrieve information by accessing the project documentation. Google docs is one documentation platform that maintains and saves real-time notes. DevOps tools are another way to collaborate and share useful information. Automation in DevOps can accelerate further speed up the feedback cycle by providing regular reports on project elements. For example, in GitLab, code can be scanned upon every commit, allowing developers to remediate in real-time rather than waiting for a code review further down the road. Using the SAST (static application security testing) template or Auto SAST, GitLab checks the SAST report, compares the found vulnerabilities between the source and target branches, and shows the information right on the merge request. Watch GitLab for Remote Teams Demo Follow us: #AllRemote 7 Stages of remote DevOps There are different levels of remote DevOps and every organization has unique needs. It’s important to know the stages of remote DevOps when considering what’s best for both the short and long term, as there are advantages and disadvantages to each. Not remote — until now Some enterprises (or even individual teams) don’t allow for any remote work. This could be due to a leadership mandate, the nature of the business itself, or an overall production preference. Teams are entirely colocated — meetings and standups are always face-to-face and physical location helps project teams collaborate effectively. Part of the business workflow includes being in the same time zone, working within the same location, and Dev and Ops teams participating within the same guidelines. However, some enterprises have recently found themselves forced into remote settings. Luckily, DevOps teams are built on solid collaboration and communication, and likely have the software tools to support going fully remote. Here are five steps to succeed in a newly remote workflow: 01 Keep your best practices through remote enablement. What has worked well for your DevOps practices? Whether it’s a communication process, standups, reviews, etc., take the time to document those things and ensure that team members know how to do them in a remote environment. 02 Assess your tech stack for maximum efficiency. Endless chat and email questions are not the best way to find information. Streamline information sharing for remote employees by adopting a single source of truth so that everyone knows exactly where to go for what they need. Watch GitLab for Remote Teams Demo 03 Allow time to adjust. This applies to everyone at all levels of an organization: Give each other time to adjust to this new way of working. Remote work may come naturally for some, and may be difficult for others. Let fellow team members know where they can find information, hold leadership office hours, and allow time for questions at the end of meetings. 04 Use video conferencing for every meeting. Newly remote employees may feel isolated or distant from their teammates. It’s important to set a standard for video meetings so that team members can still interact face-to-face and feel a sense of connection with their peers. 05 Encourage meetings that aren’t about work. At GitLab, we call these coffee chats. Coffee chats are the virtual equivalent of water cooler conversations, allowing employees to connect and build relationships beyond their day-to-day work. Casual chats help to alleviate feelings of burnout and isolation. Follow us: #AllRemote 8 Hybrid remote Hybrid remote companies include employees who work in the office and employees who work remote, either part or full-time. Coordination and communication ensure that business processes are efficient with people both in and out of the office. In many instances, employers will define a set working schedule, and regardless of where employees are, they’ll work within that time frame, in their own time zone. Overlapping time zones give teams the ability to have synchronous meetings. In a setting where remote work is allowed, DevOps teams need to plan in advance if face-to-face time is a requirement for specific projects. In partially remote DevOps teams, the goals must be clear and a level of trust between team members needs to be established. Async work empowers people to work independently, while working towards a common goal. Watch GitLab for Remote Teams Demo All-remote An all-remote company means there is no office where teams work and people can live all over the world. Asynchronous communication encourages documentation, discourages synchronous meetings as a default for collaboration, and provides flexibility for each member to determine the working hours that best suit their lifestyle. DevOps teams depend on asynchronous standups over synchronous meetings. Discussions and decisions are regularly documented (formally or informally). Software projects have the ability to move faster with people working at all hours of the day. In a remote setting, the end result tends to be more important than the hours worked Follow us: #AllRemote 9 Building a DevOps culture remotely Building culture remotely is similar to building culture in-person, except everything is communicated in a direct manner, and nothing is left to ambiguity. This is especially helpful to DevOps teams, where defined roles, responsibilities, and expectations help teams thrive. Managers must be intentional about creating shared understanding between development, security, and operations — thereby building a culture of trust. Of course, it’s easier said than done, and there are many things to focus on. Here are a few suggestions to get you started. It’s about the people There are plenty of tools, methods, and tips to share when it comes to building culture. But before we get carried away, we have to remember one thing: Culture is about people and the relationships between them. Trust and camaraderie between teams is core to successful DevOps. In a remote setting, it’s important to make space for building connections in fun ways. That space could come in the form of coffee chats, virtual team trivia sessions, hobby and interest-themed Slack channels, or virtual happy hours. Try to schedule fun meetups regularly, and make sure that employees in all time zones have the opportunity to socialize. Document roles and responsibilities DevOps brings teams together and can sometimes jumble workloads, making it important to set clear expectations for who does what (and when that “what” gets done). The best way to do this is to document it in a location that everyone has access to – similar to GitLab’s Handbook. Invite team members to contribute to these expectations if they find gaps or want to make adjustments to the guidelines. Document this information to help employees resolve conflict and build trust between teams that may traditionally be siloed. Watch GitLab for Remote Teams Demo Follow us: #AllRemote 10 Designate an official communication channel Slack is fine for casual communication and discussion, but teams should choose an official channel to serve as a resource for all project communications and updates. This ensures that all team members receive the same information, and everyone is kept on the same page. At GitLab, we do this via issues. Any important information, regardless of whether it originates in Slack or a video call, ultimately is documented in the appropriate issue. Bring structure to every meeting Meetings should be intentional. Provide an agenda before every meeting so that attendees can come prepared and know what to expect. With strong communication outside of personto-person interactions, tactical planning and discussion can be kept to a minimum, and meeting times can be used to discuss strategic issues or persistent problems, or to make a group decision. If there is a complex topic or an idea that requires significant explanation, consider explaining the idea in a video or presentation and providing it to attendees in advance of the meeting. An example of a GitLab issue. Watch GitLab for Remote Teams Demo Follow us: #AllRemote 11 Apply DevOps principles remotely using GitLab Remote work naturally facilitates collaboration between teams in a DevOps model. Remote environments break down barriers so that development and operations teams are no longer siloed. Because teams can’t work together in a single location, they’re forced to document information to ensure that others have all the facts. A reliance on documentation and other methods increases visibility across all teams, resulting in a decrease in handoff friction, which delays the delivery of software releases and negatively impacts business results. In addition to documentation, there are a few specific ways remote teams — across development, operations, and security — can build a strong foundation on which to collaborate. Remote environments break down barriers so that development and operations teams are no longer siloed. Agile planning Agile is an iterative approach to software delivery in which teams build software incrementally at the beginning of a project rather than ship it at once upon completion. When remote teams embrace Agile planning, they identify the smallest changes that can be done now to obtain immediate feedback. All communication and collaboration is focused on small iterations, so the scope of a typical problem is manageable. By using Milestones (sprints), Issues (user stories), weights (points and estimation), and other common Agile artifacts, teams can quickly break down a large project over the course of several releases. This method of planning work encourages team members to participate in a small problem, since it only takes a few minutes to read through an issue description, instead of being forced to attend a two-hour slide presentation explaining a big problem. With Agile planning, the problem is made transparent by default, so the pool of contributors is high — from the earliest stages of development. Team members can quickly view issue boards and track issues rather than wait until dedicated, ongoing, synchronous meetings to obtain progress reports. Watch GitLab for Remote Teams Demo Milestones are a way to track issues and merge requests created to achieve a broader goal in a certain period of time. Follow us: #AllRemote 12 Automation (use CI/CD to keep everyone informed) DevOps automation allows teams to improve performance through more efficient and effective use of time and resources. To simplify automated development, high performing teams select a CI/CD workflow, which accelerates how quickly teams can deliver results to customers and stakeholders. Continuous integration (CI) is a software development practice in which you build and test software every time a developer pushes code to the application, and can happen several times a day. Continuous Deployment (CD) is a software development practice in which every code change goes through the entire pipeline and is put into production automatically, resulting in many production deployments every day. The process is fully automated, without any human intervention at all. Issue Boards are used to plan, organize, and visualize a workflow for a feature or product release. They can be used as a Kanban or a Scrum board. Watch GitLab for Remote Teams Demo Follow us: #AllRemote 13 Once teams push commits to a feature branch in a remote repository, the CI/CD pipeline set for a project is triggered, building and testing the app, then previewing the changes in a review app. Once the code is reviewed and approved, teams can merge the feature branch into master, which deploys change automatically to a production environment. Teams can easily roll back changes if something goes wrong. CI helps teams catch and reduce bugs early in the development cycle, and CD moves verified code to applications faster. Automation brings teams together because they’re no longer bogged down by tedious tasks that sipher time and energy. Using a CI/CD workflow, teams can spend less time on manual tasks that can lead to silos and more time collaborating to develop innovative solutions. This workflow exemplifies GitLab’s ability to track the entire process, without the need for an external tool to deliver software. You can easily revert changes if problems arise. Watch GitLab for Remote Teams Demo Follow us: #AllRemote 14 Security Iterative development workflows can make security a release bottleneck, especially if there aren’t enough people or the right tools to test every line of code. Oftentimes, teams only test major releases or limit testing to certain apps, leaving weak spots hackers can exploit. In a DevOps workflow, security shifts left. Rather than waiting to do testing at the end of the development process, security is embedded within the workflow. Shared responsibility is critical to the success of security in a remote environment. It starts with establishing goals that are aligned with the organization, supported by leadership, communicated to stakeholders, and understood by all. Education and awareness of security policies that promote an environment of safe, secure practices — while not inhibiting, but enabling the business to succeed — is key to a project’s success. Shared responsibility is critical to the success of security in a remote environment. Shared responsibility is further emphasized in a remote environment, which requires organizations to plan and execute a distributed security strategy. Automation, in the form of a CI/CD workflow, can help developers and security professionals work together to create secure code. When every piece of code is tested upon commit for security threats, a developer can remediate immediately while they’re still working in that code or create an issue to alert the security team. Developers immediately see the cause and effect of specific changes so they can iteratively address security flaws alongside code flaws. For security teams, dashboards can organize all remaining vulnerabilities that developers didn’t resolve on their own. Developers and security professionals can then collaborate to determine next steps or do pair programming to identify a solution. Watch GitLab for Remote Teams Demo Follow us: #AllRemote 15 How GitLab does remote DevSecOps At GitLab, we have six core values that we lean on to make decisions: Collaboration, Results, Efficiency, Diversity/Inclusion, Iteration, and Transparency (CREDIT). Every team member is encouraged to contribute to any project, making cross-team collaboration part of our daily life. We exemplify our Results value by measuring the impact of what gets done rather than the time it takes to accomplish it. We live by the last four values when using our own product, also known as Dogfooding. Every team member knows where to find up-to-date information on every project, and we’re able to get diverse input by making a majority of projects visible to the general public. If something breaks, doesn't work well, or needs improvement, we are more likely to iterate and address it before it impacts our larger community. We release new features on the 22 nd of every month, and often test these new features for ourselves. Built-in security Security done at the end of a development cycle can be a roadblock, so we started our DevSecOps journey by embedding security into our CI/CD pipelines: • Static Application Security Testing (SAST) • Dynamic Application Security Testing (DAST) • Container Scanning • Dependency Scanning Developers identify vulnerabilities and remove them early on with integrated security capabilities. This helps us fix problems quickly when they’re fresh, not after a developer has committed code and moved on to their next project. By reducing context switching, we deliver better results. We iterated our DevSecOps process by adding the Security Dashboard, with later releases enabling security dashboards at the pipeline project group and instance levels. The security dashboard helps teams analyze risks and provides an overview of security vulnerabilities that shows the project and file location of each. The GitLab Security Dashboard. Watch GitLab for Remote Teams Demo Follow us: #AllRemote 16 A complete DevSecOps platform GitLab’s product vision is to replace complicated toolchains with a single application that works by default across the entire DevOps lifecycle. To achieve this goal, we are always iterating on our existing features and listening to contributions from the community. The GitLab Maturity Model lists our hierarchy of features and groups them by lifecycle stage. From there, we assess their maturity model on a scale from Planned, which means it is on our roadmap but not yet implemented, to Lovable, meaning it is an elevated experience that users love. The GitLab Maturity Model Watch GitLab for Remote Teams Demo Our goal is for every feature in every category to be lovable and best-in-class. As a single application that offers end-to-end visibility, we’re able to look at the software development lifecycle as a whole. We use our product and improve our product with the goals of a complete platform in mind. DevSecOps is the natural next iteration of DevOps, and GitLab brings developers, security, and operations together in one interface. Follow us: #AllRemote 17 Remote teams bring DevOps to the next level Remote work tenets like communication, transparency, and trust build a stronger DevOps team. Employees feel more culturally aligned and are empowered by self-sufficiency. Once you’ve achieved remote DevOps, the next step is to unite teams with a single tool for the entire application lifecycle. This guarantees end-to-end visibility, streamlines communication, and serves as a single source of truth on all projects. Watch GitLab for Remote Teams Demo Follow us: #AllRemote 18 Using GitLab for remote collaboration GitLab is a collaboration tool designed to help people work better together whether they are in the same location or spread across multiple time zones. Originally, GitLab let software developers collaborate on writing code and packaging it up into software applications. Today, GitLab has a wide range of capabilities that are used by people in all kinds of companies and all kinds of roles from sales and marketing to legal and customer support. DOCUMENT WHILE YOU WORK TRACK WORK FROM DREAM TO DONE Instead of critical information getting lost in email or chat, writing down what’s happening inside of GitLab Issues means the plan, process, and execution are automatically documented. Other users can be tagged to comment and collaborate. Since Issues are a many-to-many channel, it’s easy to loop in more folks without the clutter of a reply-all thread. Adding labels to GitLab Issues lets you categorize work into different stages, such as planning, in-progress, and complete. GitLab Boards give you visibility and control over how work is being done. It’s like moving digital post-it notes across an online whiteboard that everyone can use, not just the folks in the conference room. Watch GitLab for Remote Teams Demo Follow us: #AllRemote 19 CONNECT STRATEGY TO EXECUTION VERSION EVERY WORD GitLab Epics and Roadmaps provide a way to organize and visualize your entire portfolio of work over the long term. While Issues represent everyday tasks, Epics represent entire features or projects. Roadmaps let you plan work by seeing which work is competing for space and track progress against an assigned completion date. One of the advanced uses for GitLab is to treat copy like code. You can store, version, review, and approve not only software code, but any text at all. Using GitLab’s version control and “code review” capabilities for your text-based copywriting, you’ll be able to track versions, know who changed what when, make multiple proposals to the same document, and easily manage approvals. Watch GitLab for Remote Teams Demo Follow us: #AllRemote 20 GET THE REMOTE WORK EMERGENCY PLAN If suddenly remote work is the only option, how can you make that happen? We’ve got all the answers here thanks to a long successful history with remote work. From tools to procedures and BTDT advice, you’ll find what you need to dive right in to working remotely. Learn more GET THE REMOTE NEWSLETTER Do you want more remote (and less office) in your life? Sign-up for a biweekly dose of tips, tricks and new remote opportunities. Sign up Try GitLab Free All GitLab features — free for 30 days. GitLab is more than just source code management or CI/CD. It is a full software development lifecycle & DevOps tool in a single application. Learn more Watch GitLab for Remote Teams Demo GET THE REMOTE WORK REPORT We asked and over 3,000 of you answered. Created to foster innovation, collaboration, and evolution in the future of work, GitLab’s Remote Work Report drills down into where we are today and what’s needed for tomorrow. Start your trial Follow us: #AllRemote 21 About GitLab GitLab is a DevOps platform built from the ground up as a single application for all stages of the DevOps lifecycle enabling Product, Development, QA, Security, and Operations teams to work concurrently on the same project. GitLab provides teams a single data store, one user interface, and one permission model across the DevOps lifecycle allowing teams to collaborate and work on a project from a single conversation, significantly reducing cycle time and focus exclusively on building great software quickly. Built on Open Source, GitLab leverages the community contributions of thousands of developers and millions of users to continuously deliver new DevOps innovations. More than 100,000 organizations from startups to global enterprise organizations, including Ticketmaster, Jaguar Land Rover, NASDAQ, Dish Network and Comcast trust GitLab to deliver great software at new speeds. GitLab is the world's largest all-remote company, with more than 1,200 team members in over 65 countries. Watch GitLab for Remote Teams Demo Follow us: #AllRemote