Alan Gauld, author of Learn to Program Using Python (Addison-Wesley, 2001), discusses the tasks required for a successful delivery of a software application from development and system test to the end users in a corporate environment.
Most software engineering courses and textbooks focus on the processes and techniques used to develop software deliveries. These include activities such as requirements capture, design, coding, debugging, and testing the executables so produced.
In most real world projects of any significant size, the development part of the process only accounts for between 10 and 30% percent of the total project cost. In this article, I discuss some of the other project activities that make up the bulk of the cost. I will focus on an in-house corporate type project because these costs apply whether the software has been produced in-house or bought in as a package. However, even in shrink-wrap software houses, there are significant nondevelopment costs included in projects, and many of those need to address similar issues to those raised here.
A project is normally instituted with the intention of improving an existing business process. Business processes are very difficult and expensive to change in most organizations because of the training costs associated with the change plus the inevitable web of interconnections between processes and systems that may need to be modified. The alternative to change is to make the new system fit with the old process, simply automating some key parts. This approach rarely brings optimal benefits in the long term, and it is better to bite the bullet and accept the business change costs as part of the overall project cost.
If the proposed system solution does not cover the end-to-end process, and it usually won't, then data interfaces to other legacy systems will almost certainly be required. Frequently these data interfaces are not identified in the early system specification and emerge as a last-minute work package cost. These will be development costs but will not be included as part of the original estimate.