18 Jan 1998
Ute Twisselmann
IBM Scientific CentreA Historical View on Software Engineering and its Environment
Let us have a look on how software is developed today. I will try to compare two extreme positions: university and industry. The statements below can be called behaviour patterns. Of course in real life you might find examples of univerity projects doing software development as described below for industry and v.v.. Real life projects ly normally somewhere in the middle between the patterns described below.
This sort of software can be called one-way-software. Only the developer will use herself except some people working closely together with her. Often this sort of software will be thrown away if the developer leaves the place. This is a very typical scheme for universities or internal tools.
The environment is simple and closed. Nobody has to bother about teamwork or communication. The 'product' is a running program often with very limited documentation. The developer does not work in a process. He/she uses technology.
Here you have a product with a lifecycle.
Here the product contains much more than only a running program. Communication paths and development process (not only the technical strategy) are important.
So we come to the question what a software product really is and what is necessary to develop such a product. Here a product specifies everything delivered to one or more internal or external customers.

For offering and planning a new product or maintaining an old one the following things have to be implemented or prepared:
Therefore a lot of various people with different skills work on such a product:
Even the range of number of people working on a software product is quite high:
Here we will focus on the following important areas in software development:
I will not speak on
Therefore we look on the historical development of these aspects. Let us start with the technology which parallel led to new processes. In the end there will be remarks on teamwork.
Three questions lead to changes in different areas of software development.
The technical path was mainly influenced by the question: How can the correctness of programs be proofed ?
This question is important for research at universities. In the beginning the view was focused on implementation of mathematical algorithms. In praxis it is very seldom that programs are theoretically proofed to be correct. Exceptions exist in research in military area as the Apollo program. In industrial development processes test strategies and inspections are used to verify the programs.
The processes used in industrial software development were mainly influenced by the question: How can I design/ implement maintainable/ reusable software?
In industry people not developing them must maintain the programs. So good documentation and clear structure of software saves a lot of money. A library of reusable parts saves a lot of resources when doing follow on projects. The quality of software must be measurable. Errors found by the customer are expensive to handle and to repair. Customer satisfaction is a critical point for any company. This is the main target to achieve with lowest costs as possible. A good implemented process with clear communication paths might help a lot in shipping software fitting the customers needs in an effective way.
What even more important is, is to assure that the customer gets the software he/she really needs. Therefore software developers must be aware of the fact that they very often are designing not only software but also work flows for the end users. A software architect must have an understanding on how the end user is working with the application to be developed. Therefore he must examine the questions: What is the end user doing? Why is he doing this?
Industrial software is normally not designed, implemented and shipped by one person alone. How smooth a process can be followed depends partly on the project planning and organization. In a project plan responsibilities and tasks has to distributed and tracked. Good team behaviour helps to finish a project with the planned resources. So here the question is how does a project team work together?