Unleashing Git for the Game Development Industry
Games are perhaps one of the most common types of computer (and mobile) software — games make up 21.8% of the Apple App Store (as of June 2021) and a similar proportion of the Android Play Store. The market size for video games is expected to grow to an astounding $218.7 billion in 2024, with a CAGR of 8.7%.
Games are primarily available for PCs, mobile devices and dedicated consoles, but they don’t stop there. The metaverse has made headway in recent years, with over 15 million units of Oculus Quest sold to date, with games being one of the main attractions driving its adoption, and they are going to remain a key part of the metaverse ecosystem.
Being central to the software economy, streamlining and optimizing game development translates to immediate benefits and gains. Most games today are developed using game engines such as Unity or Unreal Engine (there are several others, but these two dominate the market), where artists with little or no software development experience can create amazing art and collaborate with developers who write the code that drives the game.
These game engines have been around for a few decades now and have evolved significantly alongside technology. They are powerful enough to create state-of-the-art 2D and 3D graphics, yet their pricing (both include a free tier) is flexible enough to make them accessible even to independent game studios.
Nevertheless, game development is like the development of any other kind of software, which requires the implementation of software development best practices such as version control (SCM). Tools such as Git, SVN, Perforce and PlasticSCM (acquired by Unity in 2020 and integrated into the Unity development environment) are quite common nowadays in game development companies.
Note, however, that most of these tools were developed primarily for managing standard software source code, making them suboptimal for game companies which have some unique requirements. Game development forums across the web are filled with discussions regarding version management tools, best practices and methodologies. The consensus is that some adjustment of the SCM tools and workflows is required, as well as dedicated training for some individuals in these organizations to use version management effectively.
Unique Challenges in Game Development
One of the unique differentiators in game development starts with something as basic as the stakeholders in the process. Game development has game designers working closely alongside software engineers to build and ship gaming software. The most popular platforms, Unity and Unreal, also have their own set of requirements and proprietary file formats for designers.
All of this together, along with quality requirements and process compliance, add quite a bit of friction when working with typical source control management platforms. Below we’ll dive into each of these individually and see where they add friction in game development and how to remove this friction to bring the benefits of modern software delivery into game development.
The top four pain points that are unique to game development are:
- The extraordinary size of their files and repositories.
- Nontechnical stakeholders being a critical part of the technical delivery.
- The complexity of testing for compliance and other delivery requirements.
- Difficulty resolving conflicts in proprietary file formats.
We’ll also outline typical workflows and where game development can benefit from improved processes more aligned with other engineering domains.
File and Repository Size
Some of the most popular SCM tools today are less suited for handling large binary files (such as multimedia files, which are used heavily in games), as part of the project, despite popular engineering domains that require large file handling (from game development to AI and machine learning). This remains complex and unresolved. Git, the de facto SCM in other engineering domains, for example, requires the use of a dedicated extension called Git-LFS to be able to handle large files efficiently. The use of this extension is cumbersome, to say the least, based on popular opinion, and adds an inordinate amount of friction, making everything slower for users.
Even tools that are able to handle large binary files natively, slow down the workflow due to functional requirements like syncing to a changelist or a branch. This requires the transferring and replacement of large files that are part of the set being worked on, with every checkout or pull. This is true even if the files are irrelevant to the current change or work that is being done. As a result, many game development companies employ “shadow version management” for large binary files, using tools such as Google Drive or Dropbox, where versions are encoded into file or folder names, and a manual process is applied to “stitch” these files together into a coherent project using source code found in the SCM system.
Critical Nontechnical Stakeholders
Designers and artists, who make up a significant portion of game development teams, are less accustomed to the relatively complex workflows of SCM tools (e.g., branching, checking out, committing), despite being required to ship their artifacts coupled with code and use the same workflows as software delivery.
While this can be overcome by training, many organizations typically handle this problem by using tools such as Google Drive or Dropbox (which also eliminate the large file size issue discussed earlier). This adds a lot of friction to training and onboarding, and even hiring talent. It also adds friction to other aspects related to file formats and their management within typical testing, quality and automation processes, which we’ll get to shortly.
Testing against Compliance and Gaming Requirements
Game development has stringent compliance requirements to ensure the quality of the final product, as well as allow for efficient, streamlined collaboration between different stakeholders. However, due to the nature of the files being created, the disparity between the software files and proprietary formats, it is quite complex to apply typical quality, testing and automation gates to gaming software. This requires a lot of manual intervention and additional duct tape to verify software against relevant requirements.
The more human and manual intervention required, the more friction is added to the process and the more likely an error will occur. Manual and human processes are by far more error prone. One way that game development overcomes this is by having a dedicated person on the design team (“tech artist”) that incorporates the large binary graphics files into the SCM tools. Some companies have even built their own proprietary tools and plugins (and some contribute them to their communities) to overcome such limitations around SCM. However, these processes should be automated, as in other domains.
Merging Proprietary File Formats
Closely related to the previous challenge is resolving conflicts in proprietary files and merging them into main/production. This, too, largely falls on the tech artist who has to address conflicts in proprietary YAML and binary files. Lacking a better option, this typically results in manually reimplementing one of the features causing the conflict on top of the other and recommitting the resulting file. Basically every game design merge conflict is like the worst merge conflict you’ve ever experienced in Git. So imagine how often this happens and how much friction this adds to gaming development processes. Greater support for more file formats and deployment processes can change this significantly.
Game Development Needs a Rethink
Gaming is a serious business with significant revenue streams and fierce competition, which requires game development to align workflows to more progressive software delivery principles to derive greater benefits from automation, velocity and efficiency. Many of the real challenges are closely related to something as basic as what their SCM is capable of supporting. To date, it seems that there still isn’t a good solution for the challenges this industry is facing around engineering and delivery.
We’ve moved on from the theory and today we have more advanced tooling to overcome the many technical challenges brought on by size and scale. Game development should be able to extract similar benefits from these advancements. At Diversion, we believe the gaming industry should be a first-class citizen when it comes to cloud native engineering practices and should have the tooling to support their unique requirements and workflows. Diversion offers a cloud native, scalable git alternative.
We believe it is possible to build a modern tool that helps to address the unique challenges game developers face with the current SCM tools, most of which have been around for two decades or more and have not progressed as much as other engineering tools and frameworks. By working with leading gaming companies to help identify the challenges and ruthlessly remove the friction from their processes, we can align game development workflows with elite-performing software delivery possible in other domains that have a direct effect on the business.