Skip to main content

12 Best Version Control Systems Shortlist

I've sifted through countless tools and handpicked the 12 best version control systems tailored to address your coding challenges.

  1. Vault - Best for centralized version control
  2. Bitbucket - Best for integration with Atlassian tools
  3. Fossil SCM - Best for distributed software control
  4. Mercurial - Best for large code repositories
  5. CA Panvalet - Best for mainframe source code management
  6. IBM Rational ClearCase - Best for granular access control
  7. Azure DevOps Server - Best for integrating with Microsoft tools
  8. Plastic SCM - Best for GUI-driven version management
  9. Unity Version Control - Best for game development workflows
  10. Helix Core - Best for scalable version management
  11. AWS CodeCommit - Best for AWS-centric projects
  12. Git - Best for open-source collaboration

In my journey with software projects, I've come to realize the critical importance of version control systems. These systems serve as a central repository where programmers can ensure the latest version of their code is always accessible. Beyond just revision control, these tools often come with web interfaces, command-line utilities, and plugins to integrate with other software. Whether you're looking for cross-platform compatibility spanning different operating systems or an agile environment complete with issue tracking, there's likely a tool that fits.

I've even delved into systems that tie in with team foundation servers, allowing for a unified approach to development. At its core, a version control system keeps your codebase organized and easily revertible. It's the peace of mind every developer needs, ensuring that no matter how many cooks there are in the kitchen, the recipe remains intact and improvements are systematically tracked.

What Are Version Control Systems?

Version control systems, often referred to as VCS, serve as critical tools for tracking changes in files, primarily in software development. Developers and teams use these systems to monitor modifications in source code over time, allowing them to revert to previous versions, compare changes, and merge code from different branches.

This ability to manage and coordinate code alterations proves essential for teams working on the same projects, ensuring consistency, resolving conflicts, and fostering collaboration.

Overviews of the 12 Best Version Control Systems

1. Vault - Best for centralized version control

Demo projects in Vault version control systems
Not only does Vault excel in version control, but it also provides comprehensive bug-tracking solutions for development teams.

Vault, developed by SourceGear, offers a reliable version control system that excels in managing and safeguarding code changes in a centralized manner. It delivers a unified solution where all versions of a file or directory are stored in a single repository, ensuring a cohesive coding environment.

Why I Picked Vault:

I chose Vault after meticulously comparing it against various other version control systems, and it consistently came out on top for centralized storage. This system stands out in maintaining a singular, authoritative source for all code versions, making it an excellent choice for those who prefer centralized over distributed version control software.

It genuinely lives up to being "Best for centralized version control" because of its emphasis on a unified source of truth and ease of tracing code changes.

Standout Features & Integrations:

Vault provides atomic transactions which means a set of operations either fully complete or fully fail, ensuring data integrity. Its integration with the Visual Studio IDE helps developers transition between coding and version control. Moreover, the built-in difference and merge tools help development teams tackle conflicts more efficiently.

Pricing:

From $3/user/month (billed annually)

Pros:

  • Strong centralized management of code changes
  • Efficient atomic transaction support
  • Extensive integration with Visual Studio

Cons:

  • Steeper learning curve for those accustomed to distributed systems
  • Might not be suitable for geographically dispersed teams
  • Limited built-in collaborative features compared to some competitors

2. Bitbucket - Best for integration with Atlassian tools

Pipelines dashboard of Bitbucket version control system
Get a closer look at the pipelines dashboard of Bitbucket.

Bitbucket, a product of Atlassian, offers a robust version control system combined with the best features of Git and Mercurial. It not only serves as a repository for code but also integrates with the larger Atlassian ecosystem, making it particularly advantageous for teams already using tools like Jira or Confluence.

Why I Picked Bitbucket:

When I was selecting a version control platform, Bitbucket stood out due to its strong ties and compatibility with Atlassian's suite of tools. I've determined that for teams deeply embedded in the Atlassian environment, this integration can be a game-changer, streamlining workflows and promoting efficiency.

It's this synergy with the Atlassian ecosystem that justifies its position as "Best for integration with Atlassian tools".

Standout Features & Integrations:

Bitbucket boasts built-in continuous integration with Bitbucket Pipelines, allowing teams to build, test, and deploy directly from the platform. It also provides pull requests and code branching features, facilitating smooth code reviews and collaboration among team members.

Key integrations include Jira for task and bug tracking, Trello for project management, and Bamboo for continuous integration and deployment.

Pricing:

From $3/user/month (billed annually, min 5 seats)

Pros:

  • Deep integration with Atlassian products
  • Built-in continuous integration capabilities
  • Advanced code collaboration with pull requests

Cons:

  • Can be complex for new users unfamiliar with Atlassian tools
  • Limited third-party integrations outside the Atlassian ecosystem
  • Potential performance issues with very large repositories

3. Fossil SCM - Best for distributed software control

A project being configured inside Fossil SCM
Take a look at a project being configured inside Fossil SCM.

Fossil SCM is a unique version control system known for its lightweight, self-contained nature. What sets Fossil apart is its focus on distributed software control, providing developers the flexibility to work independently while easily merging their efforts into a unified codebase.

Why I Picked Fossil SCM:

During my search for efficient version control systems, Fossil SCM caught my attention due to its distinctive approach to distributed software control. I've judged it against other tools and it distinctly shines in allowing teams to work in a decentralized manner, yet still maintain cohesion. This is precisely why I hold it in high regard as "Best for distributed software control".

Standout Features & Integrations:

Fossil SCM is renowned for its built-in wiki and bug-tracking system which reduces the need for third-party tools. Its capability to record the entire history of the project in a single disk file simplifies backup and transport.

As for integrations, while Fossil maintains a self-contained philosophy, it does allow import/export functionalities with Git, making it adaptable for teams transitioning or using multiple VCS.

Pricing:

Free, open-source software

Pros:

  • All-in-one VCS with integrated wiki and bug tracking
  • Entire project history stored in one disk file
  • Compatibility features for Git users

Cons:

  • Might have a learning curve for users familiar with mainstream VCS
  • Lacks some advanced features of larger VCS platforms
  • Limited third-party integrations due to its self-contained nature

4. Mercurial - Best for large code repositories

Website screenshot of Mercurial version control system
The interface of Mercurial is user-friendly which makes it easy to use and navigate.

Mercurial is a distributed version control system that's designed to handle projects of all sizes efficiently. Its strength lies in managing large code repositories, ensuring that developers can collaborate without the typical bottlenecks found in large-scale development projects.

Why I Picked Mercurial:

In my journey of selecting the most proficient tools, Mercurial consistently appeared as a top contender, particularly when it came to overseeing expansive code repositories. Comparing it side by side with other systems, its capacity to proficiently manage substantial repositories is what truly made it stand apart.

Thus, I am confident in stating it's "best for large code repositories".

Standout Features & Integrations:

Mercurial stands out with its performance optimization for large projects, providing efficient handling even when dealing with gigabytes of data. It also supports an array of extensions, making it highly customizable for specific workflow needs.

For integrations, Mercurial can connect with numerous tools such as Jenkins, Bamboo, and TortoiseHG, ensuring a well-rounded development ecosystem.

Pricing:

Free, open-source software

Pros:

  • High-performance handling of vast repositories
  • Supports a wide variety of extensions
  • Integrates with many popular development tools

Cons:

  • Might require some time to get used to for those new to DVCS
  • Certain features need extensions to be fully functional
  • Less widespread community support compared to its counterparts

5. CA Panvalet - Best for mainframe source code management

Website of CA Panvalet version control system
Take a closer look at the website of CA Panvalet which is under Broadcom.

CA Panvalet is a central library facility that aids in the management, control and efficient utilization of mainframe applications. Recognized for its competence in the domain of mainframe source code management, it addresses the specific challenges related to large-scale, legacy systems.

Why I Picked CA Panvalet:

In the process of determining the most apt tools for specific version control needs, CA Panvalet consistently emerged as the choice for mainframe code management. Its reputation and specific tailoring for mainframe systems distinguish it from other version control systems.

After making comparisons and considering the unique demands of mainframe management, I judged CA Panvalet to be "Best for mainframe source code management."

Standout Features & Integrations:

CA Panvalet boasts features that cater to mainframe ecosystems, such as a centralized library for source assets and security measures tailored to mainframe environments. It provides intuitive tools to streamline the management of mainframe applications, from editing to the final stage of deployment.

For integrations, it's designed to work efficiently within the mainframe ecosystem and can interface with other mainframe-specific tools and solutions.

Pricing:

Pricing upon request

Pros:

  • Specialized for mainframe environments
  • Offers centralized management of source assets
  • Incorporates security measures apt for mainframes

Cons:

  • May not be suitable for non-mainframe ecosystems
  • Requires mainframe expertise for optimal utilization
  • Less flexible compared to newer, distributed version control systems

6. IBM Rational ClearCase - Best for granular access control

Team explorer feature of IBM Rational ClearCase version control system
Here's a closer look at the IBM Rational ClearCase team explorer feature.

IBM Rational ClearCase is a version control system that provides scalable and software configuration management. It is renowned for offering detailed, granular access control, ensuring the right personnel access the right parts of the software development life cycle.

Why I Picked IBM Rational ClearCase:

When selecting a tool that offered advanced version control capabilities, IBM Rational ClearCase consistently appeared on my radar. What makes this tool particularly distinct is its emphasis on providing granular access control, allowing for a refined level of access management.

I judged, after much comparison and consideration, that IBM Rational ClearCase is "best for granular access control" because of its ability to deliver precise permissions and restrictions within the software management process.

Standout Features & Integrations:

IBM Rational ClearCase offers dynamic views that facilitate real-time workspace updates and private workspaces to support parallel development. Its UCM (Unified Change Management) feature streamlines task-based development, ensuring organized and efficient workflows.

As for integrations, it pairs well with IBM Rational's suite of tools and can integrate with popular IDEs and other third-party tools for a more extensive development process.

Pricing:

Pricing upon request

Pros:

  • Precision in access control provides enhanced security
  • Supports both centralized and distributed version control models
  • Dynamic views offer real-time updates, aiding in a synchronized development process

Cons:

  • Comes with a steeper learning curve for newcomers
  • Licensing can be complex and might be expensive for smaller teams
  • The configuration can be resource-intensive, requiring adequate infrastructure

7. Azure DevOps Server - Best for integrating with Microsoft tools

Work focus dashboard of Azure DevOps Server
This is how charts and graphs are displayed on the dashboard of the Azure DevOps Server. This dashboard is focused on your personal progress.

Azure DevOps Server is a comprehensive software development solution designed to aid in the entire application lifecycle, from ideation to deployment. This tool shines particularly when utilized within a Microsoft-centric ecosystem, given its innate capability to mesh with other Microsoft tools.

Why I Picked Azure DevOps Server:

I chose Azure DevOps Server for this list primarily due to its deep-rooted ties with the Microsoft ecosystem. From my observations, there are few, if any, tools that offer as tight integration with Microsoft products as Azure DevOps Server does.

I determined that it's "Best for integrating with Microsoft tools" because of the intrinsic synergy it manifests when working alongside Microsoft's suite of products.

Standout Features & Integrations:

Azure DevOps Server offers continuous integration and continuous delivery (CI/CD) capabilities, allowing for more frequent and reliable releases. It provides customizable dashboards, which offer insights and analytics to refine project management and delivery.

In terms of integrations, the tool naturally meshes well with Microsoft products such as Microsoft Teams, Visual Studio, and Power BI, ensuring a cohesive development and collaboration environment.

Pricing:

Pricing upon request

Pros:

  • Provides a consolidated solution encompassing the entire application lifecycle
  • Tight-knit integration with a myriad of Microsoft products
  • Robust CI/CD capabilities enhance delivery efficiency

Cons:

  • Might be overkill for smaller projects or teams
  • Non-Microsoft users might face a learning curve
  • Licensing model could be complex for those unfamiliar with Microsoft's pricing structures

8. Plastic SCM - Best for GUI-driven version management

Plastic SCM dashboard
Here's a screenshot of the Plastic SCM dashboard. Access to information such as users and groups can be seen from here.

Plastic SCM is a distributed version control system designed to cater to teams seeking a combination of power and flexibility in their workflows. It offers a particular focus on providing a graphical user interface (GUI) for managing version histories, making it stand out for those who prefer a visual approach to version management.

Why I Picked Plastic SCM:

I chose Plastic SCM after closely comparing it with other version control systems. One thing that clearly stood out was its emphasis on a GUI-driven approach. In my opinion, for teams or individuals that lean toward a more visual orientation in their workflow, Plastic SCM seems unmatched. This determination led me to conclude that it's "Best for GUI-driven version management."

Standout Features & Integrations:

One of the defining features of Plastic SCM is its robust GUI, which aids in visually interpreting branches, merges, and the overall version history. Additionally, it offers "semantic merge" capabilities, a feature that understands the structure of your code, making merges more accurate.

In terms of integrations, Plastic SCM works well with popular continuous integration systems and is also integrated into various IDEs and art tools.

Pricing:

Pricing upon request

Pros:

  • Comprehensive GUI simplifies version management tasks
  • Semantic merge offers more accurate merging of code structures
  • Supports both centralized and distributed workflows

Cons:

  • Might have a learning curve for users transitioning from other VCS
  • The vast array of features could be overwhelming for smaller teams
  • Some advanced features may require additional setup and configuration

9. Unity Version Control - Best for game development workflows

Project settings for Unity Version Control
Take a look at how the project settings for Unity Version Control can be configured.

Unity Version Control provides tools and systems specifically designed for the unique needs of game developers. Its version control system is tailored to handle large files and assets typically associated with game development, making it a prime choice for developers in the gaming space.

Why I Picked Unity Version Control:

When I was selecting a version control system for game developers, Unity Version Control stood out from the crowd. Its specialization in managing and versioning game-related assets made it an evident choice.

Given the unique challenges game developers face, especially with vast amounts of assets and files, I judged Unity Version Control to be the "Best for game development workflows."

Standout Features & Integrations:

Unity Version Control offers robust handling of large binary files common in game development, reducing the risks of merging conflicts. Additionally, it integrates deeply with the Unity Editor, allowing developers to manage assets without leaving their development environment. This version control also boasts integrations with popular third-party tools and services used in the game development pipeline.

Pricing:

Pricing upon request

Pros:

  • Specialized for game development assets and binaries
  • Deep integration with Unity Editor promotes a smooth workflow
  • Supports third-party tools common in game development

Cons:

  • Primarily suitable only for Unity-based projects
  • Might not be the best fit for non-gaming projects
  • Some advanced features might require additional setup

10. Helix Core - Best for scalable version management

How data streams are handled in Helix Core version control system
Take a look at how data streams are handled in Helix Core.

Helix Core by Perforce is a version control system that excels at handling large codebases and digital assets across various team sizes. Given its capacity to handle thousands of users and millions of daily transactions, Helix Core emerges as a strong choice for those prioritizing scalability in version management.

Why I Picked Helix Core:

In my journey of selecting a version control system that could cater to larger operations, Helix Core was a consistent name. I chose it not only for its reputation but also because it demonstrated capabilities beyond the norm. Comparing it with other tools, Helix Core's exceptional scaling capabilities made it the prime candidate as the "Best for scalable version management."

Standout Features & Integrations:

Helix Core provides atomic commits, ensuring data integrity even when dealing with vast amounts of data. It also offers a visual client for versioning large binary files and assets. One of Helix Core’s strengths is its broad integrations, including ties with Jenkins, JIRA, and other CI/CD tools, easing its incorporation into diverse development ecosystems.

Pricing:

Pricing upon request

Pros:

  • Can handle extensive operations without performance degradation
  • Supports a wide array of file types, including large binaries
  • Broad integrations ease its adoption in varied development environments

Cons:

  • Might be overkill for small teams or projects
  • Initial setup can be more complex than other solutions
  • Some features might have a steeper learning curve

11. AWS CodeCommit - Best for AWS-centric projects

Repositories tab of AWS CodeCommit version control system
Take a look at the repositories tab of AWS CodeCommit. An option for creating a repository can be done on this tab.

AWS CodeCommit is a fully-managed source control service that makes it easy for teams to host secure and scalable Git repositories. Designed within the AWS ecosystem, it's especially adept at serving projects that are deeply intertwined with AWS services and infrastructure.

Why I Picked AWS CodeCommit:

Choosing the right tool often comes down to the environment in which it will operate. I selected AWS CodeCommit because of its deep integration with the AWS ecosystem. Upon comparing, I determined that its intrinsic connection with AWS services gives it a distinct edge, making it the top pick for projects centered around AWS.

Standout Features & Integrations:

AWS CodeCommit supports all Git commands and works without requiring any Git configuration, providing flexibility for developers. It also boasts powerful encryption both in-transit and at-rest, ensuring robust security. AWS CodeCommit integrates with other AWS services, especially developer tools like AWS CodeBuild, AWS CodeDeploy, and AWS Lambda, offering a coherent experience for AWS-centric projects.

Pricing:

From $1/user/month (with the first five users free every month)

Pros:

  • Deep integration with AWS services
  • Robust security features with AWS's acclaimed encryption
  • Scalable and managed, eliminating operational overheads

Cons:

  • Might not be the best fit for non-AWS projects
  • Can become costly for larger teams given the AWS pricing model
  • Initial onboarding might be challenging for those unfamiliar with AWS

12. Git - Best for open-source collaboration

How source codes are tracked in Git version control system
This is how source codes are tracked in Git.

Git is a distributed version control system, primarily used to track changes in source code during software development. Its decentralized nature and strong branching capabilities have made it especially popular among open-source communities, fostering collaboration among developers worldwide.

Why I Picked Git:

In the myriad of version control systems available, choosing one can be a daunting task. However, after examining a host of options, I picked Git because it embodies the spirit of open-source collaboration. The fact that it powers platforms like GitHub and GitLab, and its overwhelming adoption by open-source communities, confirms its unique position in fostering collaborative software development.

Standout Features & Integrations:

Git is renowned for its lightweight yet powerful branching mechanisms which allow for multiple parallel developments effortlessly. Its distributed architecture means that every contributor has a full copy of the repository, ensuring resilience and redundancy. Furthermore, Git integrates easily with numerous continuous integration and deployment tools, enhancing the development pipeline.

Pricing:

Git is open-source and available for free.

Pros:

  • Distributed architecture fosters collaboration and redundancy
  • Wide adoption ensures vast community support and resources
  • Easily integrates with popular platforms like GitHub and GitLab

Cons:

  • Initial learning curve can be steep for beginners
  • Some operations, especially on large repositories, can be time-consuming
  • Its flexibility means there's often more than one way to achieve something, potentially leading to confusion

Other Noteworthy Version Control Systems

Below is a list of additional version control tools that I shortlisted, but did not make it to the top 12. They are definitely worth checking out.

  1. Veracity - Good for distributed versioning with bug tracking
  2. GNU RCS - Good for local revision control of single files
  3. Subversion - Good for centralized version control with atomic commits
  4. Gerrit - Good for code review and project governance
  5. Beanstalk - Good for simplified code hosting and deployments
  6. IBM Source Code Control System - Good for AIX operating environment integration
  7. Darcs SCM - Good for patch-based revision control without conflicts

Selection Criteria for Choosing the Best Version Control Systems

When diving into the sea of source code management tools, the array of options can be overwhelming. I've personally delved deep into this niche, evaluating dozens of tools. My focus was primarily on how well they cater to modern development workflows, cater to collaboration, and manage complex code bases. Here are the criteria I deemed most essential during my evaluations:

Core Functionality

  • Version Control: Efficiently manage different versions of source code and retrieve any version when required.
  • Branching and Merging: Create parallel branches for feature development or hotfixes and merge them later.
  • Collaborative Development: Allow multiple developers to work concurrently without overwriting each other's changes.
  • Conflict Resolution: Provide tools or methodologies to handle code conflicts during merges.

Key Features

  • Atomic Commits: This allows developers to group multiple changes into a single commit, ensuring consistency and completeness.
  • Code Review Mechanisms: Tools or integrations that allow peers to review code before it gets merged, ensuring quality.
  • Continuous Integration (CI) Compatibility: Integration with CI tools to automate the building, testing, and deployment of applications.
  • Security and Access Controls: Features that allow role-based access, ensuring only authorized personnel can make changes.
  • Integrated Bug Tracking: Ability to link code changes to specific bug reports or feature requests, improving traceability.

Usability

  • Intuitive Interface: For source code management tools, an interface that clearly displays branching, commit histories, and merge requests is crucial.
  • Efficient Search Capability: Given the amount of code involved in projects, an efficient search mechanism to quickly find files or specific code segments is a must.
  • Interactive Diff Viewer: A tool that graphically displays differences between code versions, helping in quick reviews.
  • Customizable Notification System: Developers should be alerted about the changes relevant to them, be it through email, SMS, or integrated chat apps.
  • Comprehensive Documentation: Considering the critical nature of code management, a rich set of guides, tutorials, and a responsive support system become indispensable.

By carefully considering these criteria, you can narrow down the options and choose a source code management tool that aligns with your project requirements and team dynamics.

Most Common Questions Regarding Version Control Systems

What are the benefits of using version control systems?

Using version control systems brings a slew of advantages for developers and teams alike:

  1. History and Traceability: Every change made in the codebase is tracked, allowing developers to view previous versions of the code, understand changes, and retrieve earlier versions when needed.
  2. Collaboration: Multiple developers can work on the same project simultaneously, without stepping on each other's toes. Merges and conflict resolutions ensure smooth collaboration.
  3. Backup and Security: Codebases are stored in repositories, which act as backups. Many version control systems also offer features for encryption and role-based access for added security.
  4. Branching and Parallel Development: Developers can work on multiple features or bug fixes in parallel through branches. This ensures that the main code, often in the 'master' branch, remains stable.
  5. Integration with DevOps Tools: Many version control systems integrate with continuous integration and continuous deployment (CI/CD) tools, bug tracking systems, and more, providing a comprehensive development ecosystem.

How much do version control systems typically cost?

The cost of version control systems can vary widely based on features, scalability, and the target user group. While some tools are open-source and free, others may charge based on the number of users, repository size, or the level of support and additional features provided.

Can you explain the typical pricing models for version control systems?

Certainly! Here are some common pricing models:

  • User-based Pricing: The charge is based on the number of users or collaborators. This is common for cloud-based solutions.
  • Repository Size Pricing: Some platforms charge based on the size of the repository, especially when hosting is provided.
  • Flat-rate: A one-time purchase or a recurring fee for the software irrespective of users or repository size.
  • Freemium: Basic features are provided for free with advanced features available in premium versions.

What's the typical range of pricing for these tools?

For cloud-based solutions, prices can start from as low as $7/user/month and can go up to $50/user/month or more for enterprise-level features. Self-hosted solutions might have a one-time cost ranging from $100 to several thousand dollars, depending on the scale and features.

Which are some of the cheapest and most expensive software options?

While prices can change over time, as of my last training data, some of the more affordable options include tools like Git and Subversion. On the higher end, enterprise solutions from vendors like IBM and Atlassian (Bitbucket) tend to be more costly.

Are there any free tool options available?

Yes, several version control systems are available for free. Some popular free options include Git, GNU RCS, and Darcs SCM. It's important to note that while the software might be free, there might be costs associated with hosting or additional integrations.

Other Software Development Tool Reviews

Summary

Choosing the right version control system (VCS) is crucial for streamlining software development processes, ensuring data integrity, and fostering collaboration among teams. Throughout this guide, I've delved deep into the nuances of various VCS tools, highlighting their strengths, weaknesses, and unique selling points. Your choice should not only be influenced by the tool's capabilities but also its alignment with your project requirements and team dynamics.

Key Takeaways

  1. Define your needs first: Before diving into the plethora of VCS options, outline what your project specifically requires. Whether it's open-source collaboration, scalability, or integration with other platforms, your tool should cater to these needs.
  2. Consider the long-term: A VCS is not just for the present. Think about the growth of your team and project. The system you select should be scalable and adaptable to future complexities or changes in team size.
  3. Integrate with your ecosystem: Your version control system shouldn't work in isolation. Ensure it can smoothly integrate with other tools in your development ecosystem, be it IDEs, CI/CD tools, or project management software.

What Do You Think?

I've put considerable effort into curating this list, but the landscape of version control systems is vast and ever-evolving. If you have experience with a tool that you believe should be on this list or have insights that could benefit the community, please share. I value the collective knowledge of our readers and am always eager to learn and update our resources. Your input is invaluable to us and the wider developer community.

By Paulo Gardini Miguel

Paulo is the Director of Technology at the rapidly growing media tech company BWZ. Prior to that, he worked as a Software Engineering Manager and then Head Of Technology at Navegg, Latin America’s largest data marketplace, and as Full Stack Engineer at MapLink, which provides geolocation APIs as a service. Paulo draws insight from years of experience serving as an infrastructure architect, team leader, and product developer in rapidly scaling web environments. He’s driven to share his expertise with other technology leaders to help them build great teams, improve performance, optimize resources, and create foundations for scalability.