Originally published at The New Stack
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 is making headway in recent years, with over 15M units of Oculus Quest sold to date, with games definitely being one of the main attractions driving its adoption, and they are going to remain a key part in the metaverse ecosystem.
Being so 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 definitely dominate the market) - where artists with little or no software development experience can create amazing art, and collaborate with developers that write the code driving 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 indie 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 the fact that most of these tools were developed primarily for managing standard software source code, make them suboptimal for game companies who have some requirements that are unique to them. 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 the workflows is required, as well as dedicated training for some individuals in these organizations in order to use version management effectively.
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 be able to build and ship gaming software. With the most popular platforms noted above, Unity or Unreal, each coming with 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 where they add friction in game development, and how we should think about removing this friction to bring the benefits from modern software delivery into game development, which is currently lagging quite a bit behind.
The top four pain points that are unique to game development are:
Below we’ll outline typical workflows, and where game development can truly benefit from improved processes more aligned with other engineering domains.
Some of the most popular SCM tools today are still less suited for handling large binary files (such as multimedia files, 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 - in order to be able to handle large files efficiently. The use of this extension is cumbersome to say the least, based on popular opinion of users, 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 completely 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 with source code found in the SCM system, into a coherent project.
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 exact 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 and actually kill two birds with one stone). This adds a lot of friction for training and onboarding, and even hiring talent. In addition, it also adds friction in other aspects we’ll get to shortly related to file formats and their management within typical testing, quality, and automation processes.
Being fairly complex software coupled with graphics, game development has very stringent compliance requirements to ensure the quality of the final product, as well as allow for efficient, streamlined collaboration between the different stakeholders. However, due to the nature of the files being created, the disparity between the software files and proprietary formats, it is actually 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 is required, the more friction is added to the process, and the likelihood of error. 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 even contributed back to their communities) in order to overcome such limitations around SCM. However, these processes most certainly should be automated, as in other domains.
As a segue from the previous challenge, also closely related, is resolving conflicts in proprietary files and merging them into main / production. This too largely falls on the shoulders of 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, that doesn’t need to be there. Greater support for more file formats and deployment processes can change this significantly.
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 of automation, velocity and efficiency. Many of the still very 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 all the challenges this industry is facing around engineering and delivery.
We’ve moved on from the theory, and today we have much more advanced tooling to overcome the many technical challenges brought on by size and scale, and game development should be able to extract similar benefits from these advancements. At Diversion we believe the gaming industry is one that can and 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.
We believe it is absolutely possible to build a modern tool that helps 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 impact on the business.