Development team leaders are increasingly managing fully distributed teams as organisations embrace remote work. This presents new challenges and opportunities to maximise a team’s potential by enabling them to code, collaborate and deliver efficiently and securely from any location.
In this article we explore how to empower your distributed development team with the right tools, skills and culture for remote development. Get guidance and practical examples to learn how to:
- Build and maintain a strong team culture in an online environment.
- Provide your developers with processes and tools to streamline remote coding while enhancing team collaboration.
- Apply automation principles and track application health across the entire development life cycle in a remote, distributed organisation.
What is DevOps?
DevOps is the combination of cultural philosophies, practices, and tools that increases an organization's ability to deliver applications and services at high velocity: evolving and improving products at a faster pace than organizations using traditional software development and infrastructure management processes.
In simpler terms, DevOps is the practice of operations and development engineers participating together in the entire service lifecycle, from design through the development process to production support.
DevOps unites software development (Dev) and IT operations (Ops) into teams aligned to business, product and customer needs. This is a major departure from traditional IT practices, which are based on technical specialists – developers, testers, database administrators and systems administrators – being viewed as their own independently operating silos. The end-goal of DevOps is to enable organisations to get product ideas to market faster, without sacrificing the stability or security of their production systems.
Microsoft defines DevOps as: “The union of people, process and technology to enable continuous delivery of value to customers.”
Culture - Take your developer culture online
Building and maintaining a strong developer culture is one of the most important tasks for a technical leader. This can be a challenge when everyone is co-located, but it can be even harder when the people on your team are physically apart. However, with the right leadership and tooling, your remote developer team culture can thrive.
If you’ve ever worked in a remote role, you’ve probably experienced some of the challenges it can create in terms of not feeling connected to individuals on your team or plugged into a meaningful culture. People tend to have a strong social response to routines and rituals, casual conversations and after-hours gatherings that naturally arise within co-located environments. Without those interactions, a healthy team culture can be difficult to establish because every touch point is work-focused. Team members run the risk of never really getting to know one another, and they may not be able to reach a comfort level where communication flourishes. This can be a much bigger problem than people realise.
Tooling - Enable your team to code on-demand, from anywhere
Common productivity inhibitors and roadblocks, such as facilitating onboarding, environment set-up and providing required training can have an outsized impact on a distributed team. Everything from troubleshooting issues to procuring new hardware and configuring new environments can become exponentially more difficult remotely. Should your highly skilled developers spend time and energy worrying about hardware, software or location when they could be laserfocused on contributing to the success of the project?
Streamline the set-up process for new developer environments
The most important step you can take to eliminate or at least mitigate the impact of these roadblocks when they inevitably arise is to streamline and automate the set-up and onboarding process.
You don’t want your team dealing with the tedious details of setting up a virtual machine (VM) and code editor, or checking out code when they could be problem-solving or coding. Worse than this, new team members may have to wait until another team member is online before they can start or complete this process, which, depending on time zones, could cause further delays.
One way to start is by providing VM images that your team can use to quickly set up new local development environments. Ensure these VMs are kept up-to-date with the team’s favourite tools installed and preconfigured, including setting up code editors with team coding conventions. It’s also a good idea to invest in a script that automates the project set-up given an empty environment.
Example tasks might include checking out code, setting up a default database or creating a local configuration file for development. By streamlining and automating these steps you’ll not only dramatically reduce downtime in the event of some major hardware or software issue, but you’ll also enable team members to rapidly create new local development environments wherever they are, providing extreme flexibility to relocate or use multiple machines.
Enable your team to spin up pre-configured developer environments in just a few clicks
While streamlining and automating local set-up has its benefits, a more modern approach is to use new cloud-hosted environments and tools that can dramatically speed up this process for your team. Even when using VMs, developers often spend endless hours configuring environments for new projects – just to do it all over again once that project is complete.
Visual Studio Codespaces brings your development environment into the cloud, removing local dependencies and manual configuration. Developers can set up fully configured cloud-hosted development environments in just a few clicks. Codespaces’ cloud-hosted environments are then accessible in minutes from any device via a browser-based editor, making it a powerful resource for distributed or mobile teams that can’t depend on routine access to a single location or machine. And Visual Studio Codespaces isn’t limited by its simplicity and ease-of-access – its environments are fully-configured with all the tools developers need to be productive for any type of project.
Developers can set up fully
in just a few clicks.
They’re fast to create and disposable, featuring Git repo support, extensions and a built-in command line interface where your developers can edit, run and debug applications.
One final point to keep in mind is that streamlining the local development environment set-up process or removing it entirely with cloud-hosted environments will do more than just help your existing team. You’ll also automate the onboarding process for new team members, which will keep their energy high by letting them avoid the boring stuff right when they are most excited to dive into the work you hired them to do. Pair automated onboarding with strong team checklists and resources and they’ll be able to immediately jump into tasks like making small changes to code, so they feel productive, along with dedicating more time to learning about the product, tools and technologies via free, interactive learning courses, such as those on Microsoft Learn.
Practices - Give your developers choice and flexibility
Once you have an established baseline of standardised environments and tools that your team can rely on, a way to optimise team performance further is to provide your developers with the flexibility and freedom to fine-tune their toolset.
This may seem counter-intuitive given that standardisation and continuity can be important to team productivity and collaboration – imposing a single vendor tool, for example, will ensure there aren’t barriers to the team working together, speaking the same language and following the same methodology. But individual preferences don’t need to be sacrificed. Moreover, attempting to limit developers’ choices can have unintended effects, such as incentivising people on the team to create their own mini-ecosystems of unapproved tools that can lead to security and governance vulnerabilities (also known as ‘shadow IT’). This risk increases when your team is fully distributed, as developers are confronted each minute with an unsupervised decision on whether to use the tool or device they prefer, or the one that’s being forced on them. The answer? Balance your security and governance concerns with the needs of both the team and individual contributors. Have open discussions with your team, as they will likely point you to a variety of tools they already see as beneficial. You may be surprised at the flexibility you have to satisfy everyone.
Balance team productivity with individual autonomy
When determining your overall strategy, start by delineating between the areas where it’s in everyone’s interest to have tool continuity, relative to the areas where there’s opportunity and reason to provide more flexibility. For example, it’s important that your team is using the same communication and collaboration tools, including video conferencing, chat and any important dashboards, such as a Kanban board. You’ll also want to ensure that you and your remote project manager have a single source of truth spanning key project information and overall project status. But for development workflows, you may want to be more flexible. Those closest to a given workflow will likely have the best idea of what they need to get the job done, and that can be your baseline. From there, you can work with your team to evaluate the broader ecosystem of tooling that’s either already interoperable or could be easily integrated. In some cases, it may be better in the long run to invest in developing the right ecosystem for your team rather than the approach of conformity to a single tool. Or, you may find the best of both worlds.
Choosing the right foundation
The Visual Studio family of tools is a common favourite of developer teams first and foremost because it provides a versatile and extensible platform for different workflows and environments. For example, Visual Studio Codespaces was mentioned in Tip 2 due to its ability to provide full-featured, cloud-hosted development environments, which are simple to use and accessible to distributed teams from different locations and devices. But within the Visual Studio family, teams also have the option of using other environment types, and accessing those environments via the web or a local IDE and editor that’s available on Windows, Linux or Mac devices:
● Visual Studio: a powerful, full-featured IDE for everything from coding, debugging, testing and deployment.
● Visual Studio Code: an open-source code editor for editing and debugging apps on any OS. It can run locally or via a browser and features AI-assisted development spanning statement completion and refactoring.
● Visual Studio Live Share: a feature integrated into Visual Studio, Code and Codespaces that’s used for sharing, reviewing and collaborating across code and projects in real time.
Think at a systems level to identify opportunities for integration across the stack
It is important to also consider how easy it will be to add or integrate additional tools from a larger ecosystem into your workflows. Visual Studio is deeply integrated with GitHub, so your team can tap into the GitHub Marketplace and a healthy ecosystem of quality plugins that can further enhance development and automate activities (this will be covered in-depth in a subsequent tip). Visual Studio is also integrated with many Azure services, which can be immensely beneficial as your organisation shifts to hybrid or public cloud environments and cloud-native applications.
Regardless of the platform and tools you adopt, the idea here is to take a sandbox approach, where you have firmly defined boundaries that maintain a strong foundation of tools and standards for consistency, collaboration and security, yet within those boundaries your team can make individual choices on how to best achieve their goals. This flexibility and choice will also give your developer team the ability to stay on top of emerging tools and techniques as the technology landscape evolves – whether that’s Docker, Kubernetes, the next great GitHub community plugin, microservices or adopting a DevOps culture and practices.
Taken a step further, you might even want to deliberately create secure sandbox environments for your team to experiment with new ideas in a setting that is secure and has no impact to production applications. Again, with Codespaces, it’s extremely easy to spin up and discard new secure environments where your team can experiment with different tools or libraries, learn a new framework or even build a quick prototype to test out in a production-like environment
Enhance remote collaboration and reduce coding friction
Ongoing collaboration and feedback are critical to keeping distributed developer teams productive. In co-located environments, even the best developers can fall into coding silos that negatively impact productivity, particularly when code reviews are more than a few days apart. It’s easy to imagine how this could get worse when each team member is remote. In distributed environments there are fewer informal connection points for developers to share information with others on their team. Silos can grow larger, and small issues such as getting stuck on a bug or building a feature that’s different from team conventions have a higher chance of spiralling into more costly and disruptive productivity inhibitors. It’s important for your developer team to remember that software is a team sport. They’re trying to solve business problems quickly, but they also need to do so as a team – not as a group of individuals.
Accelerating feedback loops
To facilitate agile collaboration, start by helping to put structure in place that will accelerate feedback loops. For example, break projects up into smaller chunks and encourage people to work together in pairs. This will create additional opportunities for code reviews while putting team members in touch more frequently, helping catch issues early on for an easier and cheaper fix. This will also have the added benefit of improving code quality (and likely team morale) as developers are able to better adapt to incremental feedback and guidance.
Another way to accelerate feedback loops is by streamlining asynchronous code reviews. GitHub is a great resource for this. Its inherently distributed nature, which comes from using the distributed version control system (DVCS) Git as its foundation, is practically tailor-made to support remote, asynchronous code reviews. Your team is likely familiar with key features like pull requests in GitHub and its seamless commit process. By using these features and adopting best practices from the open source GitHub community – such as providing sufficient context in a pull request description, providing quality commentary in pull request reviews, pushing an alternative commit to articulate a different approach, and more – your team can take full advantage of its distributed nature to enhance cross-team collaboration and increase productivity. Even working across different time zones can be turned into an advantage. For example, large, globally distributed development teams have created very efficient 24-hour development pipelines through these practices and tools.
You may have heard the term ‘innersourcing’, which is technically what’s being advocated here: fostering open, collaborative development by applying best practices from open source culture to proprietary projects and code. Innersourcing can improve the efficiency and productivity of not only your team, but the entire organisation. The power of innersourcing is how it can break down the hierarchies and roadblocks that hold back the potential economies of scale that can result from widespread cross-team knowledge sharing, more rigorous peer reviews and mass collaboration. In short, innersourcing can lead to exponentially higher quality code and productivity across large and complex software engineering organisations. You may not be able to drive widespread adoption of innersourcing initially, but you can help set an example by showing the value of innersourcing to your organisation through your team, while they get to enjoy the benefits of innersourcing across their own workflows in the meantime.
Encourage virtual pair programming
The one thing all these best practices for remote code reviews have in common is they’re finding ways to replicate the efficiencies we find in a co-located environment. In some cases – such as with innersourcing and widespread asynchronous collaboration – the digital medium actually provides a benefit over physical collaboration. There’s one area in particular where technology has given developers a virtual leg up over the physical world, which may come as a surprise: pair programming. With today’s latest collaboration tools, such as Visual Studio Live Share, it’s entirely possible for your distributed team to take advantage of pair programming and real-time code reviews. Visual Studio Live Share enables teams to share, edit and debug projects together with chat and audio in real time, regardless of the programming language, application being built or even software variations such as editor versions. Visual Studio Live Share also brings unique benefits over co-located pair programming via features such as the ability for each contributor to work within their own editor preferences, track each other’s work from their own individual terminal, pull helpful context and even explore other files or ideas within the project independently while remaining plugged into the session.
Strengthen and automate app security
Tip 3 briefly touched on the benefit of using a sandbox approach and giving your team access to the GitHub Marketplace and community to explore new tools and plugins. Who wouldn’t want to tap into a huge repository of community tools and infrastructure to improve their application’s capabilities and team’s development workflows? But you’ll want to implement proper security safeguards along the way, ensuring your team can access this goldmine of community tools while staying focused on productivity instead of spending resources on managing security concerns or hurdles. As you’d expect with the GitHub community, there are already a number of strong tools that can scan code for security vulnerabilities.
Regardless of the tool you use, automating app security will remove a potential headache for your team and release the enormous potential of the GitHub community, not least of which are all the ways you can automate the development lifecycle.
Automate, automate, automate
With a distributed team you’ll want to automate as much of the development lifecycle as possible, both to remove collaboration bottlenecks and accelerate your team’s ability to distribute code.
As with any flexible ecosystem, there are many popular tools you can use not only to enhance development, but also to create an end-to-end, highly automated continuous integration/continuous deployment (CI/CD) pipeline. It’s worth exploring the GitHub Marketplace to find what works for your specific projects, programming languages and workflows, but there are a few popular choices worth mentioning. First, while the specific code editor you choose will likely be based on how it’s optimised for the particular programming language you’re using, there are many powerful AI-assisted editors out there that apply machine learning to writing code – making autocomplete suggestions for syntactically valid options and even anticipating what a developer will write next.
Some of these AI-assisted editors use open-source projects and popular libraries and frameworks for training, which means they can even learn more about your project over time and refine the training set. As an example, Visual Studio Code has a capability, called IntelliCode, that makes real-time recommendations for completing statements and arguments, helps maintain coding styles and formatting conventions, facilitates automated refactoring across your code base and shares team model recommendations by translating patterns from open-source GitHub repos to your team’s code. Another area to focus on are power tools, which can give developers more time and increase productivity by automating the basics. Examples might include picking the right data structure or algorithm or deciding on a more readable name for a variable. One such power tool is Semmle, which was highlighted in Tip 5 for its security enhancements, but is also a static code analyser. It will debug your code by examining it against a set of coding rules, all while it’s flagging security vulnerabilities.
One of the most useful tools you can use, due to not only its power, but its flexibility, is GitHub Actions. It can be used to automate nearly any workflow throughout the development lifecycle spanning build, test, package, release and deployment. There are thousands of plug-and-play automated actions already built and maintained by the community, such as deploying a web service, automating code reviews, automatically running static analysis or triggering events based on a pull request. There are also many existing automations for building that CI/CD pipeline. Or your team can build custom automations based on workflow templates matching any language and tooling they want to use. GitHub Actions gives your team the ability to customise and automate their workflows, from idea to production. GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD.
● Simple: Build, test and deploy your code right from GitHub. Make code reviews, branch management and issue triaging work the way you want.
● Customisable: Run a workflow on any GitHub event. Build automations around a push, issue creation or a new release.
● Flexible: Combine and configure actions for the tools and services you use, such as building a container, deploying a web service or automate welcoming new users to a project.
● Hosted your way: Run on Linux, macOS, Windows or ARM, on a VM or inside a container and in the cloud or on-prem.
● Supporting any language: GitHub Actions supports Node.js, Python, Java, Ruby, PHP, Go, Rust, .NET, and more.
Embed signals to track app health and performance
Lastly, establishing a productive distributed team means you’ll need to ensure they’re able to track and respond to issues quickly throughout the development, testing and delivery pipeline, along with properly monitoring and managing application health and performance out in the wild.
Distributed teams can’t rely on a war room or physical signals to flag if an application goes down in production or there’s a performance issue, so you’ll need to accomplish this by building strong signals into your team’s virtual workflows and environments. Going back to the GitHub community, there are powerful tools for embedding signals across the application lifecycle and production environment. You can even look into using automation tools like GitHub Actions to trigger alerts. But in the end, to ensure your team is highly responsive, you’ll likely want to invest in a centralised solution, which will populate not only key data for your dashboards, but also maintain full observability into your applications, infrastructure and network.
Let’s take Azure Monitor as an example, which delivers a comprehensive solution for collecting, analysing and acting on data across your applications. This includes data on everything from the performance and functionality of the application code to system and resource monitoring data. It can be used to detect and diagnose application and dependency issues, drill into monitoring data for performance troubleshooting and deep diagnostics, support operations with alerts and automated actions and even create dashboards and other visualisations for your team. Having a comprehensive solution will enable you to enhance the entire distributed development lifecycle, and most importantly, maximise the availability and performance of your applications and services. One final point on maximising availability, which can be an area of elevated risk for a distributed team. You’ll likely have alerts set up to proactively notify your team of critical situations, but it’s also important to ensure your team is set up to triage the issue quickly and effectively. Does your designated administrator or whoever is responsible for investigating an issue have immediate access to the right subject matter expert (SME)? Are there emergency protocols in place for reaching that person if they’re unavailable? Are there stopgaps in place, such as standby SMEs who can support? Is critical information locked up in a silo, or have you ensured it’s documented and accessible to the broader team as part of your contingency planning? Pausing on the importance of documentation: you’ll find numerous playbooks with best practices for documentation, so we won’t go in-depth here, but keep in mind it’s a fundamentally important concern. Like many of these tips and best practices, what might be a minor issue among a co-located team can have a disproportionate impact on a distributed team when weak points are pressure tested and the team doesn’t have the necessary speed and agility to respond.
What is Azure DevOps?
Azure DevOps is a Software as a service (SaaS) platform from Microsoft that provides an end-to-end DevOps toolchain for developing and deploying software. It also integrates with most leading tools on the market and is a great option for orchestrating a DevOps toolchain.
Deliver value to your users faster using proven agile tools to plan, track and discuss work across your teams.
Agile planning tools
Track work with configurable Kanban boards, interactive backlogs and powerful planning tools. Unparalleled traceability and reporting make boards the perfect home for all your ideas – big and small.
Build, test and deploy with CI/CD that works with any language, platform and cloud. Connect to GitHub or any other Git provider and deploy continuously.
CI/CD for any platform
Build, test and deploy in any language, to any cloud – or on-premises. Run in parallel on Linux, macOS and Windows, and deploy containers to individual hosts or Kubernetes.
Get unlimited, cloud-hosted private Git repos and collaborate to build better code with pull requests and advanced file management.
Unlimited free private repos
Get flexible, powerful Git hosting with effective code reviews and unlimited free repositories for all your ideas – from a one-person project to the world’s largest repository.
Azure Test Plans
Test and ship with confidence using manual and exploratory testing tools.
Manual and exploratory testing
Test often and release with confidence. Improve your overall code quality with manual and exploratory testing tools for your apps.
Create, host and share packages with your team, and add artifacts to your CI/CD pipelines with a single click.
Universal package repository
Share Maven, npm, NuGet and Python packages from public and private sources with your entire team. Integrate package sharing into your CI/CD pipelines in a way that’s simple and scalable.
Leading a developer team is not easy. Beyond managing a set of unique individuals, each with their own talents and aspirations, you’re likely working across the business to meet outcomes with good technical solutions and working hard with peers to ensure those technical solutions work well with each other. You’re also likely trying to keep on top of a changing environment. Most of all, you’re likely acutely aware that time is always hard to find.
Many enterprise organisations going through digital transformations are adopting DevOps as their new operating model for IT because their existing IT departments have proven unable to scale with business and customer needs.
It can be tempting to think you can save time by running distributed developer teams just like co-located ones. You may assume the initial challenges that naturally arise will work themselves out or can be solved later. You may see the effort required to change tools and processes as not being worth the investment of time and resources – especially if you’ll need to build the case internally. But keep in mind that the earlier you start, the easier it will be to implement effective change, and the greater your return on investment will be in the end.
Many of the steps you can take to optimise the productivity of your remote developer team are simply process changes or can be implemented with the tools you already have. Where new tools or methodology shifts are required, you can pilot those changes with your team and continue in an incremental, organic way that’s matched to your resources. As you and your team realise the benefits that come from improving individual and team workflows, you’ll naturally secure more buy-in, and momentum will build both within your team and across the organisation.
Optimising the productivity of your remote developer team will be a unique journey. Not every recommended approach will be a direct fit, and there are no universal tools. But these tips will point you in the right direction while equipping you with the information and resources you’ll need to navigate change, working through all the roadblocks and bottlenecks along the way.
Turn distributed development into an advantage. Tap into the full potential of your development talent. Get back to focusing on what matters: driving innovation and business performance with the power of code.
Azure DevOps enables you to easily set up automated pipelines to build, test and deploy your code to any platform.
How Assemblysoft can help
Cutting-edge development is about building and running applications differently. To help, Assemblysoft offers a selection of tools and services to help all developer teams be more productive, independent of language, framework or cloud.
Visual Studio: Try Visual Studio Codespaces, Live Share, IntelliCode and the other tools that help your team build and collaborate more productively.
Microsoft Azure: Turn ideas into solutions with more than 100 services to build, deploy and manage applications – in the cloud, on-premises and at the edge – using the tools and frameworks of your choice. Try Azure free. Free training with
Microsoft Learn: Help your developer teams gain new skills and certifications with interactive online learning to ensure developer teams become and stay proficient in their domain. Find training. Talk to our sales team: Talk to our team of specialists to see how Microsoft can help you optimise your developer team productivity. Contact sales.
The Developer Velocity Self-Assessment Tool: Identify opportunities for your team to accelerate velocity based on a customised analysis of your current situation.
7 Tips to Optimise Remote Developer Team Productivity