Introduction: Today's Changing Software 
Environments
Change is a constant factor in today's software environments. 
Software engineers have to worry about changing operating systems, 
libraries, and tools, not to mention the code modules they are 
responsible for and those with which their software interacts. 
Inability to deal with changes in a software project leads to 
needless delays and avoidable rework. Ironically, the answers to 
these questions do exist but are not readily captureable. 
Most organizations don't have the time to address these issues. 
Those engineers and managers that do tackle these problems typically
develop ad hoc, creative solutions that are temporary, limited, not 
extensible to other parts of the organization, and are simply 
another form of change with which the poor developers must contend. If change is not 
managed, it can be disastrous to an organization's technology and 
to its employees.
Huge Software Projects
Not only is the software development environment changing rapidly, 
but it is becoming increasingly complex, in both size as well as in 
process. For example, the development of the Space Station created 
a 3X increase in just 10 years in millions of object instructions 
(Figure 1). And the Space Station hasn't even been launched! 

FIGURE 1.	Software Size Complexity as Evidenced by the Space Effort
At Silicon Graphics, complexity has also increased at an incredible pace (Figure 2). The 
number of interfaces and overall system complexity are an increasing challenge to 
manage.
 

FIGURE 2.	SGI's Dramatic Increase in the Size of System Software Releases
Software Management Complexity
It is simplistic, though, to attribute software development problems solely to increasing 
size and complexity. The rapidity of the development cycle today adds fuel on the fire. 
For instance, in Figure 3, we see a typical configuration management problem. The 
mainline of development moves across the top of the drawing. At points during the 
process, complete clones (labeled Rel in the figure) are released for development work. 
During the course of development, intermediate releases may be fanned out to 
numerous developers, who must make their changes and merge them back into the 
release version. Eventually changes made to the development release must be merged 
back into the mainline. To further complicate the situation, it is not unusual to release 
variant versions of the software to various subscribers of the system for trial purposes. 
With so many different versions of source files and potentially compilers, linkers, and 
build environments, it is easy to see the potential for problems.

FIGURE 3.	A Typical Configuration Problem
Problems with development in this type of environment are numerous. Here are a few:
Difficulty of Developing Multiple Releases in Parallel
This is the classic configuration management problem. Companies, today, must support 
current, old and new development lines, and sometimes even variants on each. In fact, 
this problem will only get worse, as open system pressures increase.
Time-Consuming System Builds
It is not uncommon to find System Builds that take 36 hours. Build engineers might start 
a build on Friday evening and are able to certify the build some time during the day on 
Sunday. If a build fails, however, it is common to find builds certified for release on 
Tuesday of the following week.
Inability to Fix Older Releases
Many customers do not want to upgrade to the latest release. Thus, we are forced to 
support more numbers of releases. We must be able to do this efficiently and accurately.
Uncertain Status of Bugs
It is too difficult to figure out what bugs were fixed in a given release. It is typical to sit 
in a system release meeting and find managers and engineers who have to ask other 
managers and engineers if a particular bug was fixed in a particular release. 
Coordinating change is difficult; finding out what changed is nearly impossible.
Lack of Traceability
It is almost impossible to synchronize process deliverables. At some point in the 
lifecycle of a system release, all of the process deliverables should be frozen and 
attached to the system release. These include the requirements, designs, sources, 
executables, tests (data and results) and bug reports for a given system release. At any 
point in the lifecycle, a development or support engineer should be able to trace from 
any given executable to any given process deliverable. 
Ramifications of Changes
It is hard to figure out what changed or what the impact of a change will be. Too 
frequently, engineers ask, "it worked yesterday, why doesn't it work today?" With 
today's systems, it is impossible to figure out what changed or to predict the impact of a 
new change. Also, almost weekly, engineering managers must make decisions based 
upon the potential impact of a change in the system. With today's systems, it is virtually 
impossible to answer that question.
Isolating Files with Selected Sharing
It is difficult to set up "sandboxes." One of the fundamental software development 
problems is to set up environments so that engineers can effectively share and isolate 
their work. Traditionally, scripts are written on top of RCS or SCCS, and through the 
use of links and copies, these engineering "sandboxes" are set up. This process is time 
consuming and static. Usually engineers are forced to share what they don't want to 
share, and are forced to copy what they would rather share. Merging changes becomes a 
nightmare.
Managing Change in Software
The answer to managing change lies in our ability to understand, control, and track the 
software development environment in its entirety from initial design requirements 
through release and maintenance, including development and integration. Gene Forte, 
Executive Editor of CASE Outlook, puts it best:
"As we gain a better understanding of these factors, we find that getting control of 
all the work products of development, and their relationships to each other and the 
development process, is fundamental to the business of Total Quality Management 
in software, just as it is in manufacturing and in other engineering fields....
...CM is now charged with managing all the work products involved in software 
development: all manner of graphical, textual and symbolic design documents; test 
suites and results; metrics; source and object code; system and network options; 
data and program locations; business models; and anything else we may invent in 
the coming years. The latest automated build facilities no longer execute a fixed 
script, but they automatically determine the correct version of source code as well 
as the compilers and linkers used to build the system. They know which modules 
need recompiling and which do not, and they want user-defined rules for 
promoting systems from development to test and then to production.
We are also demanding that CM handle new dimensions of complexity. For 
example, we not only want to archive historical versions of a particular 
application, we want to be able to go forward or backward through the historical 
sequence of versions, and we want to have multiple coexisting variants for parallel 
development, for many platform targets and for different market niches. We want 
tools to manage these relationships in a way that is transparent to the developer, so 
that details of file name and directory variations are of no consequence." - CASE 
Outlook 90, No. 2
In addition to the general requirements of version control, configuration management 
and system building, the most asked for integrated application is that of problem 
tracking and reporting. By integrating a problem tracking system with the CMS facility, 
the task of determining which bugs have been fixed and which feature requests have 
been implemented in a given release are greatly simplified. 

 
 
 
