Let’s be honest, enterprise version control isn’t exactly a topic you would bring up at a dinner party to spice up the conversation. Managing file versions and meticulously reviewing code for errors can be a dull subject. In fact, it rarely makes the headlines — even in software development news when there are far more exciting trends to cover like AI or the latest Apple device hitting the market.
But much like no one really talks about putting on clean socks in the morning, setting an alarm at night or looking both ways before crossing the street, enterprise version control is an essential every-day practice. Versioning is a common part of the developer’s routine and if leveraged correctly, can save organizations enormous cost and resources. Though version control is today a common sense aspect of programming, it is important from time to time to look at why we do what we do and how versioning impacts the entire value stream at an organization.
Also, it’s helpful for non-developers at an organization to understand the fundamentals of a discipline that is so deeply rooted in the daily life of a software engineer — especially if those individuals are making decisions about which version control tools and platforms to use.
Version control is important for all software development projects and is particularly vital at large businesses and enterprises. Enterprises have many stakeholders, distributed teams, strict processes and workflows, silo’ed organizations and hierarchical organization. All of those characteristics represent coordination and integration challenges when it comes to merging and deploying code.
Even more, companies within highly-regulated industries such as in banking and healthcare, with many rules and regulations, need a practical way to ensure that all standards are being met appropriately and risk is mitigated.
Before we dive into the details of enterprise version control, let’s clarify some common goals for software teams.
It’s not news to say that the daily operations of any software-creating organization must support the following items or values throughout the software development and delivery lifecycle.
Common Software Development Values
- Reusability – why do the same thing twice? Re-use of code is a common practice and makes building on existing assets simpler.
- Traceability – Audits are not just for fun, in many industries this is a legal matter. All activity must be traced and managers must be able to produce reports when needed. Traceability also makes debugging and identifying root cause easier. Additionally, this will help with feature re-use as developers can link requirements to implementation.
- Manageability – Can team leaders define and enforce workflows, review rules, create quality gates and enforce QA throughout the lifecycle?
- Efficiency – are we using the right resources for the job and are we minimizing time and efforts? This one is pretty self-explanatory.
- Collaboration – When teams work together quality tends to improve. We catch one another’s mistakes and can build on each other’s strengths.
- Learning – Organizations benefit when they invest in employees learning and growing. This is not only important for on-boarding new team members, but for the lifelong learning of seasoned members and the opportunity for workers to contribute not just to the bottom line but to the industry as a whole.
Tools and processes alone are not enough to accomplish the above and hence the adoption of Agile, Continuous Integration and DevOps. Believe it or not, all of these rely on a solid version control practice.
Version control is about keeping track of every change to software assets — tracking and managing the who, what and when. Version control is a first step needed to assure quality at the source, ensuring flow and pull value and focusing on process. All of these create value not just for the software teams, but ultimately for the customer.
Version control is a solution for managing and saving changes made to any manually created assets. It allows you to go back in time and easily roll back to previously working versions if changes are made to source code. Version control tools allow you to see who made changes, when and what exactly was changed.
Version control also makes experimenting easy and most importantly makes collaboration possible. Without version control, collaborating over source code would be a painful operation.
There are a number of perspectives on version control. For developers though, this is a daily enabler for work and collaboration to happen. It’s part of the daily job, one of the most-used tools. For management, the key value of version control is in IP security, risk management and time-to-market speed through Continuous Delivery where version control is a fundamental enabler.
Code reviews help catch bugs early, as opposed to in production. This practice is typically closely linked with version control. Code review catches simple mistakes and ensures quality at the source. Pre-merge code reviews, my personal recommendation, can catch 65 to 85 percent of the errors made in development. The earlier corrected, the better and the lower number of team members and projects impacted by any one rogue mistake.
Code reviews are about more than just quality assurance, however, they help improve organizational learning. It is an opportunity to point out standards and enforce uniformity. This is useful for new members and improves teamwork dynamics.
One of the benefits of a good version control platform is the ability to create quality gating. This helps organizations create and enforce guidelines for code changes. Quality gating prevents any bad code changes from being merged across an organization significantly reducing cumulative time spent on finding out why the software won’t compile and who broke the build. Quality gates can be fully customized based on the organizational needs and there can be multiple quality gates throughout a value stream.
For example a company may implement four gates within the value stream. First, before a code change is merged into the target branch, second after code has been merged, third before manual testing and fourth when code is ready for release.
Some of the most popular version control platforms are Git and Subversion. CollabNet of course created Subversion, but also provides support for Git users, filling in gaps when it comes to governance and other enterprise needs not addressed natively.
Now that we’ve reviewed why version control is so important for organizations of all shapes and sizes, particularly enterprises, in my next post, I’ll be discussing some version control best practices. Stay tuned for a deeper dive into different approaches to versioning and some of my personal recommendations for higher quality and greater efficiency at your organization.