Hello, my name is Stephen Burnley, and in these lessons, you will learn about source code management tools. If we look at this Azure board in the DevOps portal, you can see that we track requirements that are part of customer requests or stakeholder requests in attempt to make the best software application that our team can. These requirements have to be managed, estimated, and allocated to developers so that they can complete these in their sprints. Version Control Systems gives you the ability to have a centralized source code location. This is usually on a server inside your existing data center on-premises inside your company, or you may choose to store your source code in the Cloud. The advantages of storing the source code in the Cloud is that many developers are able to access this, see each other's changes, and make contributions. A Version Control System also provides several other benefits, including conflict resolution. Developers are able to view the changes that each other make to files, and there are many built-in tools for merging changes together. This helps developers understand who is working on what, and they can see each other's changes to make sure that their changes are compatible. A good centralized source code management tool also provides multiple versions of all files as they are saved. This allows you to perform rollback and undo operations when source code has been modified in a negative way. If you find bugs or change your strategies, you can go back to prior files in most Version Control Systems. Also, your source code is very valuable. Therefore, it's very common for organizations to protect this very important asset by providing backup copies of these resources for disaster recovery scenarios. Some of the additional advantages of implementing a centralized Version Control tool is that you have many options to integrate these with third-party tools. You could integrate this with tools that manage requirements or tools that work with developers to check in, check out, and modify these files in a safe way. You could also implement team communication tools. Collaboration between developers is an important part of software development. All communication does not have to be in real-time, in meetings or on telephone calls. By being able to embed feedback and communication between team members directly in the source code, you save developers a step and allow you to create better results in a shorter period of time. You can also look at the productivity of your development team through insight, measurement, and accountability tools. Because you are saving all of your files to a centralized location, all of these modifications can be tracked. You're able to see how many developer modifications are made over a period of time, how often files are worked on, how often files have to be modified again for bugs and additional types of metrics. You can automate the compiling and deployment of your code, this saves time and provides an extra level of consistency. Therefore, a centralized source code management tool is the foundation of a DevOps process. With this centralized collaborative tool, it is likely that you will have developers that want to work on different parts of the application at different times, or perhaps even different versions of the application for development of future features. This requires the concept of branching. If a bug is found in your production application, developers will not modify that direct source code. Instead, in a mature DevOps environment, developers will create a branch of the source code, which is essentially a copy. Developers can then fix the bug, test it, make sure it works, and if it does, that branch can be merged back into the master and become version .2. New versions of the software, which would include additional features and upgrades that you plan to add to your software, also become a new branch. This allows your development team to maintain the version of the source code that's in production and also contribute to a new version of the software application. When features are complete, developers make pull requests and commit their source code to the centralized tool. That's where the DevOps process of continuous integration and continuous delivery begins to compile and deploy the software application and initiate testing procedures. This can automate the compiling, deployment, and testing of your applications, allowing you to have multiple developer teams that can work on different features or different upgrades at the same time and continue to open up the possibility that they won't be able to merge their changes back into the master when they are complete. This is a modern software development methodology of using a centralized source code tool and the concept of branching. The branching approach separates new feature development from production code and allows development teams to maintain production operations and hot fixes while continuing to improve the application. Stay tuned for the next lesson, where we will look at how the Azure repo stores files, tracks commitments from developers, and allows programmers to check out code to make modifications on their individual developer workstations. Thanks for watching.