Software Configurations and Development Tasks In most modern software development organizations, many tasks are under way concurrently. At the beginning of this section, we listed a few: new products, new releases of existing products, ports to different platforms, and bugfixes. In addition, consider the fact that each one of the above tasks is often several coordinated efforts: initial development, unit testing, internal system testing, external system (“beta”) testing, final production. To enable all the tasks to progress smoothly at the same time, each person gets her own software configuration — her own set of versions of the files in the repository. (A small, close-knit team might choose to share a single configuration.) It’s the job of the software configuration management system, such as AccuRev, to help the organization: • Keep track of the various configurations. • Manage, preserve, and protect changes to the files. • Detect conflicting changes that take place in different configurations (for example, two people modify the same section of the same file). • Assist in resolving those conflicting changes.