In today’s development organizations, several programmers often work on the same (Xcode) project to produce great software quickly. Despite all of the productivity dividends and breakthrough innovations that collaboration delivers, these development organizations often face real risks, including merge conflicts, broken builds, and regressions. In an attempt to avoid these issues, some organizations adopt an Agile approach to software development. This approach offers many techniques and procedures that promote collaboration while mitigating the risks associated with multiple contributors. One such technique is Continuous Integration.
Continuous Integration (CI) is a software topic discussed again at Apple’s recent WWDC, and one that’s gained momentum over the past few years. Apple has responded to the growing interest by making CI more accessible, sustainable, and easy to navigate. With each successive Xcode and Server release Apple introduces new CI tools and matures existing ones, enabling developers work more collaboratively, efficiently, and effectively. In short, Apple’s investment in CI is help developers become more Agile.
When several developers work on the same project, they usually make individual changes to their own copy—or branch—of the code. At some point in the development cycle, all these changes must be merged back together into a single version for compilation. This process of merging code authored by many different collaborators can be perilous, especially when two or more collaborators change the same line of code in their own branches. Then what? Which copy do you use to apply the final change? This is a common dilemma that developers call a Merge Conflict. The number of conflicts to resolve is generally proportional to how frequently code is merged. Continuous Integration recommends frequent merges so conflicts are fewer and easier to untangle. At this year’s WWDC, Apple presented easy-to-use tools to help facilitate a quick, painless, and frequent merge process.
After merging code changes from several collaborators, the next step is to compile—or build—the project. During the build phase, teams realize how well-coordinated their individual changes are. Compiling contributions from several developers into a single executable program usually results in problems. Builds are often broken. Despite the correct syntax, resolved conflicts, and clean compiles, dependency relationships between developers may not have been well coordinated. The result of poor coordination is software unable to perform even the most basic tasks. Apple’s development environment doesn’t repair coordination problems but it does find them. Xcode and Server’s new automated testing tools dramatically speed-up several basic (but arduous) tasks. If the automation is unsuccessful, developers are alerted of a broken build and receive an early warning that coordination problems were found between specific project contributors.
The automated testing tools also warn teams of regression issues. Similar to a broken build, regression issues occur when developers submit incremental changes that break the software. Often in complex projects and large teams, developers introduce new changes that undo something in the code that was previously functioning flawlessly. This is often due to developers introducing a change before fully understanding the entirety of the existing code, generally because the sheer amount of code is too overwhelming for a single developer to peruse quickly. Apple’s automated testing tools will solve this issue by helping developers quickly check to see if a submitted change will affect any other piece of the software. Again, the tools won’t resolve the problem, but they will provide a way to find the problem quickly.
As I have shown, Continuous Integration is an Agile software development technique that allows highly-collaborative organizations to quickly identify problems commonly associated with large teams working on the same project. Demonstrating its commitment to the technique, Apple continues to build up a Continuous Integration toolset for developers. Most recently at this year’s WWDC, we saw the latest innovations in these tools—making it easier than ever for companies work efficiently, effectively, and collaboratively.