There are three things needed to increase productivity in the
software development domain: software development knowledge,
an advanced and general level of underlying software
technology, and better software tools. The knowledge
defines the goals, the technology allows and supports the
development of better tools, and the tools implement and achieve
the goals set by the knowledge. The order of the three is
especially important to understand: the knowledge and purpose for
the tool must precede its development.
The purpose of this document is to advance knowledge, so that
better tools can be built to improve software productivity. In
particular, this document makes a relatively hard statement about
how software should be developed, by providing a concrete,
step-by-step description of the overall software development process.
Tool builders can thereby make more assumptions about the
software production process, and so can build more effective, more
special purpose tools.
As a beginning, the process model described in this essay only
addresses a very small and limited class of software projects: single
person "software tool" projects of up to 50K source lines in size.
The following general project activities are discussed in this essay:
project startup, analysis, preliminary design, detailed design,
implementation, product evaluation, project shutdown, and periodic
procedures. Template documents are included for the requirements
specification, functional specification, and post mortem document.
The appendices contain brief discussions on software cost estimation,
on software component structure and design, and on change control systems.
In the author's opinion, the process model described in this document
meets the Level 2 maturity rating criteria established by the
Software Engineering Institute, as described in  and .
It is important for the reader to understand that this document does
not claim to be the only way, the best way, nor even the most
appropriate way to develop software. Its only intention is to more
concretely describe the general software development used by the
author, so that new tools could be developed in the presence of stronger
assumptions about the steps in the development process. The utility
of this document to other developers, novice or expert, remains to be
Regrettably, many worthy topics have been omitted from this document
due to unavoidable time constraints. A list of such topics is contained
in the conclusion of the paper.
We are currently acquiring citations for the work deposited into this collection. We recognize the distribution rights of this item may have been assigned to another entity, other than the author(s) of the work.If you can provide the citation for this work or you think you own the distribution rights to this work please contact the Institutional Repository Administrator at email@example.com