Software development techniques for constructive information systems design