Proven techniques in software development:
- Requirements with Use Cases and Domain Modeling
- Iterative development
- Object-oriented analysis, design, and implementation, plus design patterns
- Architecture and design with a strong focus on structure, i.e. low coupling,
separation of concerns, layering.
- High flow of communication within the development team (co-location)
- Visualizing software structure (UML)
- Daily builds
- Unit tests
- Static code analysis
- Design and code reviews
- Hire the best. Software engineers' performances vary immensly.
- Usability testing makes happy customers
Actually we know quite well which software engineering techniques work and which ones
don't. The problem is - surprisingly - that often programmers and project leads do not
use the established techniques, even when they know them. It is like a surgeon not
washing his/her hands before surgery. Why is this so?
Sometimes people do know a technique, but do not know when to use it. So they do not
use the technique at all or they use it within a non-applicable context.
Often the time pressure is very high in software development projects. Under pressure
people tend to a) stay within the comfort zone, i.e. do not try a new technique, and
b) do some 'creative load shedding', e.g. they do not write enough unit tests