<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sasha Medvedovsky</title>
    <description>The latest articles on DEV Community by Sasha Medvedovsky (@sasham1).</description>
    <link>https://dev.to/sasham1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F835577%2F74f8085f-d42b-4c41-8c17-d9f8cff40cfb.jpg</url>
      <title>DEV Community: Sasha Medvedovsky</title>
      <link>https://dev.to/sasham1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sasham1"/>
    <language>en</language>
    <item>
      <title>The compounding effect of version control performance</title>
      <dc:creator>Sasha Medvedovsky</dc:creator>
      <pubDate>Thu, 11 Sep 2025 14:18:20 +0000</pubDate>
      <link>https://dev.to/diversion/the-compounding-effect-of-version-control-performance-1383</link>
      <guid>https://dev.to/diversion/the-compounding-effect-of-version-control-performance-1383</guid>
      <description>&lt;p&gt;&lt;em&gt;By: Pablo Santos Luaces&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As software developers we tend to focus on the latest, shiniest new feature and often take for granted the core value of our product. &lt;/p&gt;

&lt;p&gt;I remember the surprise when visiting a customer and asking their team what they liked better about the product: every morning it syncs much faster than the previous version control. It wasn’t the latest change in the UI, the super advanced merge feature we just added. It was the speed. I took it for granted. I considered it something that of course was important but that has been there for years. And it was the real key thing.&lt;/p&gt;

&lt;p&gt;And something often overlooked about speed is how it compounds and impacts productivity in ways that are initially not considered.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  Diversion performance boost
&lt;/h2&gt;

&lt;p&gt;During the last few months the team at Diversion has dramatically improved the speed of the product. They swarmed together to respond to the requirements of much larger customers. When you have to handle millions and millions of files in the head of the repo, the rivets start to pop.&lt;/p&gt;

&lt;p&gt;To some extent, these teams need some performance to just operate. But in Diversion they have not only matched but vastly outperformed the version control they are replacing. And this creates new opportunities.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  The compounding effect of speed
&lt;/h2&gt;

&lt;p&gt;An improvement in the speed of your daily version control operations, sync or submit, for instance, makes you wait less. &lt;/p&gt;

&lt;p&gt;Every operation that takes more than just a few seconds makes you switch context, go to X or Insta or whatever, then ruin your flow.&lt;/p&gt;

&lt;p&gt;So, if an operation goes down from, let’s say, 30 seconds to 10, the impact is not only 20 seconds times the number of operations per day, it is much more. The threshold between less than 10 seconds and more than 20 provokes minutes of time wasted browsing the internet, going to Slack to chat while you wait, etc.&lt;/p&gt;

&lt;p&gt;But there is more: when an operation is not painfully slow, it creates new opportunities that go beyond saving time and into real workflow changes.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  Fast branching changes the game
&lt;/h2&gt;

&lt;p&gt;Take the branching example. One of the most used version control systems in the gaming industry can’t branch in a performant way as soon as the depots grow too large. Taking 5-20 minutes to create a branch makes it an event, something to be planned, considered, feared. It is not something you do lightly. And then entire workflows are shaped around that limitation (which is something very, very common in the gaming industry).&lt;/p&gt;

&lt;p&gt;Now, suddenly your branching time goes from 5 minutes to 20 ms like it happens with Diversion. The naïve way to think about it is: ok, we create 1 branch a month, so we’re only saving 5 minutes a month, it is definitely not worth the change.&lt;/p&gt;

&lt;p&gt;Obviously the impact is way different: suddenly the team can create as many branches as they want. If you want to work on a new ticket, you can go and create a branch for it, lightly, no planning, no approvals, because branches suddenly become an instrument of productivity, not a release event. You can use branches to develop tasks and they can be timely merged, but the review process will be driven by the branch (something Git users take for granted but many game teams do not because Git can’t handle the sizes of their binaries fluently).&lt;/p&gt;

&lt;p&gt;Same can happen with release branches, experiment branches, ideas, etc. Fast branching opens up improvements that go beyond the current workflow.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  Art and code in a single repo erases artificial complexity
&lt;/h2&gt;

&lt;p&gt;And branching is just one example, but the same happens with the ability to handle code and art, no matter the size, in the same repo. Do you simply accept the extra complexity of dealing with code in one repo and art in a second one because the system that manages code is not good with big assets, and the one that deals with large binaries doesn’t offer the features programmers demand?&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Like a friend of mine always says for their data analytics platform: speed matters. It matters a lot. It does not just remove blockers, it creates whole new opportunities when you can suddenly perform operations that you accepted to be costly in almost no time.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  About the Author
&lt;/h2&gt;

&lt;p&gt;Pablo Santos Luaces is the founder and former CTO of Plastic SCM, SemanticMerge, and Gmaster. An accomplished programmer specializing in version control and merge technologies, he now shares his insights on these topics through writing and speaking, including on his Medium page.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>versioncontrol</category>
      <category>gamedev</category>
      <category>unity3d</category>
    </item>
    <item>
      <title>The Agile, The Fragile, And The Iron Fist Of Branching Strategies</title>
      <dc:creator>Sasha Medvedovsky</dc:creator>
      <pubDate>Wed, 19 Jul 2023 07:08:58 +0000</pubDate>
      <link>https://dev.to/diversion/the-agile-the-fragile-and-the-iron-fist-of-branching-strategies-47ma</link>
      <guid>https://dev.to/diversion/the-agile-the-fragile-and-the-iron-fist-of-branching-strategies-47ma</guid>
      <description>&lt;p&gt;Whether you love it or hate it, Git has proven to be the nearly ubiquitous method engineering organizations employ to ship code today.  However, when you’re just getting started and building your team, you may be thinking about which strategy is the right one for you to choose based on your current and future needs.  &lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;p&gt;We recently wrote a longer post about effective branching strategies, and the considerations involved when selecting your branching strategy of choice.  However, we still believe it could be useful to dive in more deeply into the underlying philosophy for each branching strategy, to help you decide what code shipping strategy is the right one for your engineering team.&lt;/p&gt;

&lt;p&gt;‍To make a very rough generalization, we can largely split branching strategies into those that are more agile in nature and those that are more structured.  Each is employed to provide either more rapid delivery or greater control, if we were to think about them in a very generic way.  Below we’ll dive into the most common strategies, from the structured to the agile, their benefits and what they’re best suited for. Hopefully this will help make the decisions regarding what can work best for you and your teams, and whether you need to rethink your branching strategy altogether.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  Structured Strategies
&lt;/h2&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h3&gt;
  
  
  Release Branching
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FKht0lI6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rx0bafkpd3rmjce5kw2d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FKht0lI6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rx0bafkpd3rmjce5kw2d.png" alt="Image description" width="614" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;‍This strategy is well-suited for large teams and projects that require long-term support for multiple versions. It’s no surprise then that both &lt;a href="https://learn.microsoft.com/en-us/devops/develop/how-microsoft-develops-devops"&gt;Microsoft&lt;/a&gt; and the &lt;a href="https://cwiki.apache.org/confluence/display/HAWQ/Release+Management"&gt;Apache Software Foundation&lt;/a&gt; often employ release branching as their strategy of choice. (For those who aren’t familiar, the &lt;a href="https://www.apache.org/"&gt;Apache Software Foundation&lt;/a&gt; is best known for hosting numerous open-source projects. The way they work is: each major release has a dedicated branch where bug fixes and patches are applied while development continues on separate branches).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In this strategy, a separate branch is created for each major release version, where bug fixes and patches are applied to the release branch.&lt;/li&gt;
&lt;li&gt;New features are developed in separate branches. 
‍&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When to Use It&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Release branching is best suited for projects that require stable release maintenance while continuing development on other branches. This is because it offers a controlled and structured approach to managing releases, along with greater stability. Another situation where this strategy is used is in large projects with frequent releases (e.g. games) - the release branches isolate features scheduled for the upcoming release from ones that are not.&lt;/p&gt;

&lt;p&gt;‍&lt;strong&gt;Advantages:&lt;/strong&gt; The release branching strategy’s greatest advantage is that it provides strong isolation between releases, allowing clarity in multiple versions support, and scheduling and coordination of release cycles in large scale projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;‍Disadvantages:&lt;/strong&gt; This strategy creates numerous long lived branches, which complicates code management - it creates a need for complex merges to make sure code written in one branch (e.g., a bug fix) propagates into the other branches correctly. Use this strategy only where needed.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h3&gt;
  
  
  GitFlow
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DOce8Etg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/43xo4ajvh6ngqeavdpjy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DOce8Etg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/43xo4ajvh6ngqeavdpjy.png" alt="Image description" width="732" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitFlow is a variation on the release branching strategy, that also defines additional long lived branches for different purposes. It was &lt;a href="https://nvie.com/posts/a-successful-git-branching-model/"&gt;conceived in 2010&lt;/a&gt; by Vincent Driessen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;br&gt;
It consists of a "develop" branch for ongoing development and a "master" branch for stable releases (we’ll call it ‘main’ from this point on to align with the more modern terminology).&lt;br&gt;
Additional branches are used for feature development, bug fixing, and release preparation. These branches are deleted once they are merged to “develop” and “main”.&lt;br&gt;
‍&lt;br&gt;
&lt;strong&gt;The Way it Works&lt;/strong&gt;&lt;br&gt;
Gitflow uses a central repository approach with two long lived branches: 'main' for production and 'develop' for integrating features. Additional temporary branches are created for isolating new feature developments and for preparing production releases. After a feature is developed on a feature branch, it's merged into the 'develop' branch. &lt;/p&gt;

&lt;p&gt;‍When a release is ready, a release branch is created off 'develop', which is then merged into the 'main' and 'develop' branches, when the release is complete.&lt;br&gt;
‍&lt;br&gt;
&lt;strong&gt;When To Use It&lt;/strong&gt;&lt;br&gt;
GitFlow was commonly used (and still is, in some places) in projects with a scheduled release cycle. Teams working on software that has major scheduled releases, like operating system distributions, often use this strategy to add greater control and stability to the project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt; Clear separation of under-development code and production; streamlined release management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt; Bad fit for CI/CD processes; a complex workflow with multiple branch types and merging strategies.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  The Agile Strategies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Feature Branching
&lt;/h3&gt;

&lt;p&gt;‍&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RKlwkIA6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kx09l4e359syft3hs754.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RKlwkIA6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kx09l4e359syft3hs754.png" alt="Image description" width="614" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;‍Feature branching enables parallel development, isolation, and collaboration among developers. It places the emphasis on agility, collaboration, and shorter feedback loops, which is why it is one of the more popular branching strategies employed with many development teams, including well-known engineering organizations like &lt;a href="https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow"&gt;Atlassian&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the Feature Branching Workflow, developers create a branch for each new feature.&lt;/li&gt;
&lt;li&gt;The 'main' branch contains the official project history, and feature branches are used to develop new features outside of the main project. &lt;/li&gt;
&lt;li&gt;When a feature is complete, it's merged back into the main branch.&lt;/li&gt;
&lt;li&gt;Different instances of this flow are known as ‘Github Flow’ where code is pushed to production upon its merge and ‘Gitlab Flow’ which schedules code for release across one or more staging branches.
‍&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When To Use It&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Due to its flexibility this strategy is suitable for teams of all sizes, although it should be noted that it can become complex for larger teams if branch management is not done properly. This is oftentimes the go-to strategy of choice for those who want both agility with some semblance of control and isolation.&lt;br&gt;
‍&lt;br&gt;
&lt;strong&gt;Advantages:&lt;/strong&gt; This strategy is great for collaboration as each feature branch allows developers to work on new features without disturbing or impacting the main branch, which is kept production ready. Yet on the collaboration side, changes can be shared and discussed before being merged into the main code base.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;‍Disadvantages:&lt;/strong&gt; Probably its biggest downside is that it can lead to "merge hell" if not managed properly. This tends to happen when many branches are created and worked on concurrently, making the merging process a complicated and time-consuming task.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h3&gt;
  
  
  Trunk-Based Development
&lt;/h3&gt;

&lt;p&gt;‍&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3LStMoen--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ddgmq1ka522di3e1urxx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3LStMoen--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ddgmq1ka522di3e1urxx.png" alt="Image description" width="614" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Trunk-Based Development allows agility, large-scale collaboration and fast-paced development. This strategy is common in organizations that practice continuous integration and deployment, and is used in conjunction with feature flags (with tools like &lt;a href="https://launchdarkly.com/blog/git-branching-strategies-vs-trunk-based-development/"&gt;LaunchDarkly&lt;/a&gt;). It is often used by large consumer-facing companies such as Google, Meta and Netflix.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trunk-Based Development is a branching strategy where all developers work on a single branch, usually the main branch or "trunk."&lt;/li&gt;
&lt;li&gt;Short-lived feature branches are created, but they're merged into 'main' as soon as possible - usually before the developed feature is complete.&lt;/li&gt;
&lt;li&gt;Continuous integration tests are run to ensure 'main' is always in a releasable state.&lt;/li&gt;
&lt;li&gt;Feature flags or toggles are used to enable or disable unfinished or experimental features. 
‍&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When To Use It&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This strategy is useful in organizations that prioritize continuous integration and deployment, over isolation or control. While enabling velocity, this does require discipline to keep the main branch always in a releasable state so that unstable code is not inadvertently pushed to production. In large companies like Meta and Google, this is the only viable strategy - as any branch that splits off main falls hopelessly behind extremely quickly, making merging back an impossible task.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt; This strategy encourages regular code integration, decreases the complexity of merging changes, and supports continuous integration and deployment practices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt; The constant integration can lead to problems if not done carefully. This format requires strong release engineering to support it, and additional feature flags / toggles tooling to ensure experimental and unfinished features aren’t released at large without proper controls.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;p&gt;While it may appear that the more “agile” approaches have similar principles, they prioritize different aspects of the engineering workflow. The Feature Branch workflow allows more flexibility in terms of when deployments happen; Trunk-Based Development emphasizes regular code integration and continuous delivery.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Choose Your Strategy
&lt;/h2&gt;

&lt;p&gt;Some of the key factors to consider when selecting or changing the branch strategy for your engineering organization are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Release frequency&lt;/li&gt;
&lt;li&gt;Risk tolerance&lt;/li&gt;
&lt;li&gt;Project complexity&lt;/li&gt;
&lt;li&gt;Team size&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Regardless of the strategy you employ, the &lt;a href="https://diversion.dev/"&gt;version control system&lt;/a&gt; you choose should provide the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast branching and updates&lt;/li&gt;
&lt;li&gt;Flexibility&lt;/li&gt;
&lt;li&gt;Ease of resolving conflicts&lt;/li&gt;
&lt;li&gt;Real-time collaboration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next generation of &lt;a href="https://diversion.dev/"&gt;cloud native version control&lt;/a&gt; systems should focus on all of these elements to ensure that modern engineering can deliver fast and stay safe. There is also a need for better automation of processes like merges and conflict resolution; these may be greatly improved in the near-term by leveraging new generative AI tools, which promise to free us from mundane and frustrating tasks - but this deserves a separate post.&lt;/p&gt;

</description>
      <category>git</category>
      <category>cicd</category>
      <category>development</category>
      <category>agile</category>
    </item>
    <item>
      <title>Version Control for Game Devs: Survey Results</title>
      <dc:creator>Sasha Medvedovsky</dc:creator>
      <pubDate>Tue, 24 Jan 2023 15:10:51 +0000</pubDate>
      <link>https://dev.to/diversion/version-control-for-game-devs-survey-results-2pj</link>
      <guid>https://dev.to/diversion/version-control-for-game-devs-survey-results-2pj</guid>
      <description>&lt;h5&gt;
  
  
  Yuki Arbel, January 24, 2023
&lt;/h5&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;"Listening to your customers is the key to building great products"&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;Anonymous&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://diversion.dev"&gt;Diversion&lt;/a&gt;, we are building a next generation Version Control tool, with a strong emphasis on addressing the unique challenges faced by game developers. It’s no secret that the games industry is underserved by existing solutions (see here), but we wanted to hear first hand from game developers about the tools they are using, how they use them, and what challenges they encounter.&lt;/p&gt;

&lt;p&gt;With that in mind, we ran a survey among professional game developers. Obviously, people are busy, and you need to show your gratitude for their willingness to contribute, so we added a raffle for VR goggles. We ended up with more than a 100 respondents before closing the poll.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  Who responded to our survey?
&lt;/h2&gt;

&lt;p&gt;We asked people what size of organization they are currently working for. We thought this could be important in order to look at usage patterns and challenges also from that angle. It is one thing to be an indie developer or work with handful of colleagues, and another to work in a large enterprise split across continents. 45% of our respondents work in small companies (up to 100 employees), 40% work in midsize companies (up to 1000 employees), 15% work in large companies (larger than 1000 employees). We’ll get to some analysis using this information later on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IW3eAe_e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z7gmbbcroqlycmbro1af.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IW3eAe_e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z7gmbbcroqlycmbro1af.png" alt="Organization Size" width="600" height="371"&gt;&lt;/a&gt;&lt;br&gt;
‍‍&lt;/p&gt;

&lt;h2&gt;
  
  
  So, which version control tools are game developers currently using?
&lt;/h2&gt;

&lt;p&gt;Our main goal was to find out the distribution of version control tools among game developers.&lt;/p&gt;

&lt;p&gt;Git is by far the most common version control solution reported by game devs (used by 82% of respondents). However, approximately 25% of those who use Git also use another version control tool in addition to it.&lt;/p&gt;

&lt;p&gt;Other version control products used by survey participants:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Perforce (28% of respondents)&lt;/li&gt;
&lt;li&gt;SVN (6% of respondents)&lt;/li&gt;
&lt;li&gt;Plastic SCM (4% of respondents)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There were also 2 respondents reporting using an internally built version control system (which might indicate a lack of adequate solutions, and is probably less than ideal for a game development company).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8uTPmVD4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/68dqfrm2vzl3gofd8a8g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8uTPmVD4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/68dqfrm2vzl3gofd8a8g.png" alt="SCM Popularity" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Differences by company size
&lt;/h2&gt;

&lt;p&gt;We looked further into the tools usage patterns, to see if they depended on organization size. Perforce is much more common in larger companies than in the smaller ones. More than 38% of respondents working for mid to large companies (companies larger than 100 employees) use Perforce, compared to 11% in smaller companies (under 100 employees).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BVRKsq44--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f2yghzx4fy2w2qtdp2cm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BVRKsq44--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f2yghzx4fy2w2qtdp2cm.png" alt="Perforce usage by company size" width="880" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Graphical assets
&lt;/h2&gt;

&lt;p&gt;Binary files, and especially graphical assets, are a huge problem (pun not intended) in game development. We wanted to check how game developers deal with this problem.&lt;/p&gt;

&lt;p&gt;First, we wanted to check whether designers use version control to store the assets that they create. It turned out that nearly half of respondents (45%) say that designers in their company use cloud storage to store the assets that they create. We assume that part of the reason is the complexity of using version control (which we were able to correlate from other responses they provided), as well as large storage volume required to store versioned assets (as version control products don’t have a way to manage that).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O2ksals4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5l79jzg0uvi6rqcvypp2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O2ksals4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5l79jzg0uvi6rqcvypp2.png" alt="only 54.5% of responders say designers use SCM" width="600" height="371"&gt;&lt;/a&gt;‍&lt;/p&gt;

&lt;p&gt;Then, we wanted to check how common it is to keep graphical assets in version control (at least the end result of artists’ work). 78% of respondents who use Git and were familiar with the topic reported that graphical assets are also versioned. We’ve got a few more detailed responses explaining that only the final assets are versioned, which makes us believe this may be a typical scenario.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--itvs7mL9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/61q1vmb6v8fdzvnfomb8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--itvs7mL9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/61q1vmb6v8fdzvnfomb8.png" alt="78% report assets stored in SCM" width="600" height="371"&gt;&lt;/a&gt;&lt;br&gt;
‍&lt;br&gt;
Since large files don’t work well in Git, we wanted to cross correlate this with the use of Git LFS. 59% of Git users reported they are also using Git LFS to handle large files (some of them reported about problems with it, but this deserves a separate article).&lt;/p&gt;

&lt;p&gt;From direct interviews we know that some companies who use Git to version code, are also using SVN or Perforce in conjunction with Git to store large assets. This of course is not optimal, as it complicates the toolchain and reduces the team’s ability to collaborate effectively. This might explain the high percentage of cross-usage between Git and SVN/Perforce.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  Hosting
&lt;/h2&gt;

&lt;p&gt;While the global trend is to move hosting to the cloud via SaaS, all prominent Git vendors also offer their product as software that can be installed and maintained by the customer himself. We wanted to understand to what extent this trend is applicable to game developers. First, we wanted to learn how many of our respondents consume their remote Git as a cloud service vs. install the software on-prem. Approximately 22% of our respondents were not sure about this, but from those who did know where their Git is hosted, approximately 2/3 are using the cloud, and 1/3 are hosting Git on prem.&lt;/p&gt;

&lt;p&gt;‍&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oZkvGCSD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/skx256hmbuece8h2ec6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oZkvGCSD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/skx256hmbuece8h2ec6i.png" alt="Cloud vs on-prem hosting" width="600" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we wanted to understand the split between the different Git offerings in the market. The majority of companies are using Github (41%), followed by Gitlab (30%) and Bitbucket (22%).&lt;/p&gt;

&lt;p&gt;‍&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Vxvpcrng--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tbhkws4dsr80femokpee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Vxvpcrng--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tbhkws4dsr80femokpee.png" alt="Git hosting provider - 41% use GitHub" width="600" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges
&lt;/h2&gt;

&lt;p&gt;Finally, we wanted to explicitly ask about challenges. After all, we are building Diversion in order to better address existing challenges with version control products, so we’d better know what they are.&lt;/p&gt;

&lt;p&gt;Many respondents that use git reported on challenges they are having with the solution. Here are the top 3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;38% of respondents who use git indicated it is too complex for use by non-developers&lt;/li&gt;
&lt;li&gt;25% of respondents who use git indicated it has poor support for graphical assets&lt;/li&gt;
&lt;li&gt;21% of respondents who use git indicated it is slow
‍&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kdpZaMMt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bgntvrwakvuilpvq5z8b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kdpZaMMt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bgntvrwakvuilpvq5z8b.png" alt="Git challenges in game development" width="600" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We also asked about challenges with Perforce. One of the challenges that was highlighted by users for Perforce was complexity of use by non-developers (seems to be a common theme). Another challenge that stood out in the responses was a poor branching experience.&lt;/p&gt;

&lt;p&gt;Finally, we asked about the existence of a dedicated team handling the version control tool. While this does not necessarily translate to a challenge for the end users, it does impose costs and an operational burden on the organizations. To this question, 64% of respondents who were familiar with the subject, indicated that such a team exists in their organization.&lt;/p&gt;

&lt;p&gt;‍&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qxcDN_Bv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4urgn19x10aw9twzp9l7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qxcDN_Bv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4urgn19x10aw9twzp9l7.png" alt="Team handling SCM" width="600" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  File conflicts
&lt;/h2&gt;

&lt;p&gt;One common challenge that we haven’t included in the survey, but that has surfaced in interviews we conducted, is file conflicts. One company we talked about told us they have a slack channel where artists ask each other if someone’s working on a specific art file (of course, sometime this workflow fails). Others have reported frequent and impossible to solve merge conflicts in Unity or Unreal Engine’s files (scene files, prefabs, etc.). Some version control tools offer an ability to lock files (not Git); but this introduces other problems (people forgetting to unlock files). None of the companies we’ve talked to uses file locking - clearly, a better solution is needed.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;As we can see, version control remains a significant challenge in game development. The most probable reason is that the popular version control tools were not built with game development in mind, or are just very old and were not built for today’s scale.&lt;/p&gt;

&lt;p&gt;We continue to work hard to get &lt;a href="https://www.diversion.dev/game-development"&gt;Diversion&lt;/a&gt; to you. It’s currently in private beta to our early subscribers, and we plan a wider release in the coming weeks. Stay tuned!&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>git</category>
      <category>gdc</category>
      <category>github</category>
    </item>
    <item>
      <title>On Git and Cognitive Load</title>
      <dc:creator>Sasha Medvedovsky</dc:creator>
      <pubDate>Thu, 24 Mar 2022 14:49:53 +0000</pubDate>
      <link>https://dev.to/diversion/on-git-and-cognitive-load-3pj9</link>
      <guid>https://dev.to/diversion/on-git-and-cognitive-load-3pj9</guid>
      <description>&lt;p&gt;Any developer working in a modern engineering organization is likely working in git.  Git, written by Linus Torvalds in 2005, has been since its creation, basically the ubiquitous tool for source control management.  Git gained widespread adoption across engineering organizations as the successor to existing source control management such as Apache Subversion (SVN) and CVS (Concurrent Versions System), and this was mostly a byproduct of the timing.&lt;/p&gt;

&lt;p&gt;Git predates cloud and improved network connectivity, and therefore the best solution to managing source control at scale, was to decentralize and leverage local dev environments to power engineering organizations.  Fast forward 17 years, this is no longer the case.  Cloud is de facto, networking and internet connectivity is blazing fast, and this changes everything.&lt;/p&gt;

&lt;p&gt;Git itself as a system, while it has its benefits, is known to come with a lot of complexity that ultimately translates to cognitive load for developers.  This post is going to dive into that a bit, and how we can improve upon previous source control systems to deliver improved developer happiness in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Git State of the Union
&lt;/h2&gt;

&lt;p&gt;One of my favorite websites is &lt;a href="https://ohshitgit.com"&gt;ohshitgit.com&lt;/a&gt; (hat tip to &lt;a href="https://twitter.com/ksylor"&gt;Katie Sylor-Miller&lt;/a&gt;, Frontend Architect at Etsy for this) - which despite being a developer for years, I visit regularly, because, well…git commands are just hard and unintuitive.  We can see this through many git-related resources and ecosystem manifestations.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--LS8okuv1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1293428633923616768/Mvo4fe4m_normal.png" alt="unix-ninja profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        unix-ninja
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @unix_ninja
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Git is hard. Screwing up is easy. Documentation is a mess.&lt;br&gt;&lt;br&gt;Introducing: Oh Shit, Git!?!&lt;br&gt;😁 &lt;a href="https://t.co/tlTpnu2vWj"&gt;ohshitgit.com&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      13:53 PM - 08 Jun 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1402262561941250068" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1402262561941250068" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1402262561941250068" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;Whether it's the fact that the Linux Foundation recently announced official Git Certification (which in itself points to a problem…when you need to get certified that implies complexity), or other examples.  Such as the multitude of books and cheat sheets written about git, the fact that 5 out of the &lt;a href="https://stackoverflow.com/questions?tab=Votes"&gt;Top 10 ranked questions&lt;/a&gt; of all time on Stack Overflow are about git, and that every company has their own git master that everyone goes to for really serious git debacles.&lt;/p&gt;

&lt;p&gt;But it really doesn’t have to be that way––git, or rather source control––is just a means to an end, that is delivering great software. It simply shouldn’t come with so much overhead.&lt;/p&gt;

&lt;h4&gt;
  
  
  Exhibit 1:
&lt;/h4&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--TX43qW5n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1268228333700968448/8t_oP37O_normal.jpg" alt="Mark Russinovich profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Mark Russinovich
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @markrussinovich
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Git is the bane of my development process. So easy to get into a state where you have to speak a magic incantation known only to the Git wizards who share their spells on stackoverflow to get things fixed without losing changes.
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      22:25 PM - 19 May 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1395143648191279105" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1395143648191279105" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1395143648191279105" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;​​&lt;/p&gt;

&lt;h4&gt;
  
  
  Exhibit 2:
&lt;/h4&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--gkpK3aS8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1308623632093114368/CaFKZ_jM_normal.jpg" alt="Hadi Hariri profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Hadi Hariri
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @hhariri
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Git is not a success story. Git is a failure as a system with a crap user experience that forces you to learn more about the tool you're using that about getting your work done.
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      12:20 PM - 08 Oct 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1314178925610885120" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1314178925610885120" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1314178925610885120" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h4&gt;
  
  
  With a bonus XKCD
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://xkcd.com/1597/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DOmjJgol--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c7n3ogukxngttw01ymay.png" alt="Image description" width="354" height="512"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This overhead comes at a time when developers are already overloaded with tasks and tools that have never really been their responsibility.  There’s no doubt that it was much easier to be a programmer 20 years ago––all you really needed to know was…how to code. With all of the shift left movements coming from every single direction––developers are now expected to own basically every product-related discipline: from the engineering, to the security, operations, support, testing, quality and more.  &lt;/p&gt;

&lt;p&gt;All of these come with their own set of tools and frameworks from a diversity of clouds, containers, scanners and linters, config management and infrastructure as code, load testing and QA tools and much more.  Some of these even come with their own languages and syntax, where developers are expected to learn these very well - from the programming languages to the config languages, ops &amp;amp; scripting tools, module repos - from NPM throughPyPI, Terraform and other IaC… and the list goes on.&lt;/p&gt;

&lt;p&gt;This is the expectation of devs today, and all this while their primary source control system - git - takes up a significant share of their mental capacity to get right. &lt;/p&gt;

&lt;p&gt;So it’s no surprise that developers move more slowly to avoid making mistakes (and the embarrassment that comes along with them), and are slowed down when mistakes happen and they need to fix them, sometimes because of something as basic as the wrong git command. &lt;/p&gt;

&lt;h2&gt;
  
  
  But How Do Git Mistakes Still Happen?
&lt;/h2&gt;

&lt;p&gt;This begs the question - how is this even possible with all of the existing resources and information available that these types of mistakes still happen with git?&lt;/p&gt;

&lt;p&gt;Because RTFM(ing) just doesn’t work anymore in a world of too much documentation, tooling and frameworks.  There just isn’t enough time to master each and every tool and read its documentation thoroughly with everything a developer is juggling on a daily basis.&lt;/p&gt;

&lt;p&gt;What ends up happening is developers resort to searching for answers.  (Remember our stack overflow questions…?)  And this can have disastrous outcomes sometimes.  &lt;/p&gt;

&lt;p&gt;A junior developer at a company I worked at once searched for a git command, and decided to &lt;code&gt;git push –force&lt;/code&gt; which impacted all of the developers on the repo.  You can imagine how the developer felt, but to be honest this should not have happened in the first place.&lt;/p&gt;

&lt;p&gt;Ultimately, your SCM should be a tool that serves to help you, and provide you with the feeling of security that your work is always safe, and not be a constant source of headache and anxiety that you are one push away from disaster. &lt;/p&gt;

&lt;p&gt;This is still the case because git remains complicated - there’s too much to learn, and new engineers don’t become experts in git for a while; which also makes it hard to adopt new tooling when you’re still learning git for endless periods of time. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Source of Git’s Complexity
&lt;/h2&gt;

&lt;p&gt;There are a few elements to the git architecture from where its complexity is derived.  Let’s start with decentralization.&lt;/p&gt;

&lt;p&gt;If we were to compare git to other existing SCMs at the time––SVN or CVS––git was built to break apart these tool’s centralization, because a centralized repository and server required self-management and maintenance, and was slow. To be able to create and switch branches, and perform complicated merges, you needed blazing fast connectivity and servers, and this just wasn’t available in 2005.  &lt;/p&gt;

&lt;p&gt;Connections and servers were slow, and branch and other operations would take unreasonable amounts of time. This resulted in workflows without branching, which impacted developer velocity significantly.  So in order to improve this bottleneck in engineering, the best solution was to enable all developers to work locally (and cache their changes locally), and push their code to a central repository once the work was completed.  &lt;/p&gt;

&lt;p&gt;This decentralization and local work though, is also the source of much of the heartache and frustration associated with git––creating many conflicts in versions &amp;amp; branches that can be quite difficult to resolve (particularly with major code changes).&lt;/p&gt;

&lt;p&gt;For example, in a centralized SCM there’s only one copy of each branch. Either a commit exists on a branch, or it doesn’t. In Git however, you have local and remote branches. Local branches can track remote branches with different names. You can have different (divergent) histories on the local and remote copies of your branch. This results in the need to work carefully when applying certain operations to a local copy of a branch, which is then pushed to the shared repository (e.g. rebasing), because of the way it might affect others’ work. Simple right? Or not…It’s all rather confusing.&lt;/p&gt;

&lt;p&gt;Another source of confusion is the Index, also called the Staging Area. It’s a snapshot of your files, which exists in-between your worktree and the committed version. Why is it needed? Some &lt;a href="https://stackoverflow.com/questions/49228209/whats-the-use-of-the-staging-area-in-git"&gt;argue&lt;/a&gt; that it helps you split your work into separate commits. Maybe, but it’s definitely not required - for example, Mercurial (very similar to git in most aspects) doesn’t have it, and you can still commit parts of your changes. What it certainly results in is another layer of complexity. Now when comparing changes or resolving conflicts, you need to worry about the staging area AND your worktree. This results in plethora of git command switches, that nobody can memorize - e.g. &lt;code&gt;git reset --soft/hard/mixed/merge&lt;/code&gt; 🤦‍♂️, and complicated logic that is sometimes hard to predict.&lt;/p&gt;

&lt;p&gt;Yet more confusion stems simply from what seems to be lack of proper UX planning. Git’s CLI is notoriously confusing. There are operations that can be achieved in multiple ways (&lt;code&gt;git branch&lt;/code&gt;, &lt;code&gt;git checkout -b&lt;/code&gt;), commands that do different things depending on the context (see &lt;a href="https://git-scm.com/docs/git-checkout"&gt;git checkout&lt;/a&gt;), and command switches with completely unintuitive names (&lt;code&gt;git diff --cached?&lt;/code&gt; &lt;code&gt;git checkout --guess??&lt;/code&gt;). Things would have been simpler if Git’s developers would have given the interface more thought at the beginning. But, it seems that developer experience was not a priority in 2005.&lt;/p&gt;

&lt;p&gt;GUI clients and IDE plugins have tried to bridge the DevEx gap, by making Git easier to use through their tools and platforms, but it can’t solve all issues. Eventually, you will inevitably need to use the command line to solve some kind of arcane problem or edge case. &lt;/p&gt;

&lt;p&gt;At which point, when this occurs, many just bite the bullet and ask their git guru how to fix the problem. The other option is to avoid the shame of being revealed as a novice (imposter syndrome anyone…?), and to delete the repository (yes, yes including copying all of the local changes aside…), cloning the repo again, and trying to resume work from the previous failure point (without triggering the same conflicts).  &lt;/p&gt;

&lt;h2&gt;
  
  
  The Future of Source Control
&lt;/h2&gt;

&lt;p&gt;The next generation of version control tools should be designed with developer experience in mind. It should be easy to use (easy != not powerful), with intuitive commands (when you need to use CLI), with less pitfalls - so that it’s hard to make embarrassing or costly mistakes or meddle with others’ work.&lt;/p&gt;

&lt;p&gt;It should give the developers exactly what they need to manage their code, not more and not less. It should not require you to read a book and understand its underlying data model prior to using it. It should also be usable by non-developers (most software projects today also include non-developers… But that’s a topic for another blog post).&lt;/p&gt;

&lt;p&gt;Together with the expectation of better UX, one of the biggest changes that has happened since 2005 is the cloud. Having a centralized repository doesn’t mean managing your own servers anymore. Cloud-based services are scalable, fast, and (for the most part) easy to use. Think Dropbox, Google Docs, Asana, etc. &lt;/p&gt;

&lt;p&gt;A new SCM could also take into account the modern DevOps needs, and have powerful API capabilities, deep and even native integrations with existing stacks, and be easily extensible, deriving the inherent benefits available in the cloud of customizability and flexibility.  You could define your very own custom processes for pull request approval, CI processes pass/fail, pre-deployment checks and much more.  No two teams and companies are the same, as we know, not all PRs were created equal, so how could there be a one-size fits all approach to PR management?&lt;/p&gt;

&lt;p&gt;These are the reasons we at &lt;a href="https://diversion.dev"&gt;Diversion&lt;/a&gt; think that it’s time to rethink code management, and rebuild it from the ground up as a cloud-based, modern, scalable and powerful tool with delightful developer experience. Our code management tools should help us save time, collaborate, and give that warm and pleasant feeling that our work is always safe - and not the opposite.&lt;/p&gt;

</description>
      <category>git</category>
      <category>programming</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
