Software Development – Overview
An overview of the software development process is helpful in determining whether a process of experimentation, as defined in the Code and Treasury Regulations, is present. Software development generally involves a cycle of requirements specification, design, coding, testing, performance tuning, product release, maintenance, and bug fixing. Based upon the results of any or all of these steps, the software development activity may need to repeat (i.e., iterate through) one or more of these steps. For example, assume a product development cycle was in its testing phase and a new requirement came in that for competitive reasons had to be incorporated into the product before it could be released. Then, the new requirement would have to be designed into the product, which in turn could affect the existing design and coding of software already written and tested.
All software development projects follow a development methodology, whether structured or informal. Some common methodologies include: [ii]
Waterfall;
Iterative;
RAD (Rapid Application Development);
SEI (Software Engineering Institute);
ISO 9000;
Extreme Programming; and
Object-Oriented.
There are, in general, many different ways a given piece of software can be designed and implemented. For example, if one were to ask ten different software engineers to write a payroll program, one would likely end up with ten completely different programs.
Software, unlike tangible business components, does not “wear out” in the traditional sense, so it tends to last years longer than other products. For example, manufacturers may build a tangible product for a short period of time, and then replace it with an entirely new model (e.g., cars, TVs, cell phones). However, core software often tends to be used for years, if not decades.
Software requirements often change during the development process. The requirements, and/or business rules, specified for a piece of software are rarely, if ever, complete at the beginning of the process, and often conflict with each other. Moreover, the requirements can, and often do, change throughout the software development activity. New or changing requirements may necessitate major or minor redesign efforts in order to incorporate the new or changed requirements. It is commonplace in software development to work with incomplete, imprecise requirements, and/or changing requirements throughout the life cycle of a software development project.
As software design is inherently iterative, it follows that in order to incorporate new, modified, or deleted requirements, the design must also change.
Technology, especially software technology, is constantly changing. Technologies that are new one year may become commonplace in subsequent years. It is important to be aware of the timeframe of the software development activity in question and the technologies being utilized. Software developers that utilize newer technologies (e.g., currently, the Internet, JAVA, XML, Web Services, grids, etc.), like any individual learning a new language, may need to spend time learning those technologies. This learning process is commonplace in software development.
Software projects fail for many reasons. Interestingly, the most common reasons that software projects fail relate to business or project management issues, not the failure to eliminate uncertainty concerning the development or improvement of the software in question. These reasons are: [iii]
Incomplete and/or changing requirements;
Lack of user involvement;
Lack of resources (i.e., budget or staff);
Unrealistic expectations;
Lack of executive support;
Lack of planning;
“Didn’t need it any longer”;
Lack of IT management; and
Technological illiteracy.
—-footnotes—-
[ii] For more information, an Internet search for “xxx software development”, such as “iterative software development”, will provide more information on these and other software development methodologies.
[iii] Case Study Conclusions, CHAOS, Charting the Seas of Information Technology, The Standish Group, 1994, page 11.




