All software construction involves essential tasks, the fashioning of the complex conceptual structures that compose the abstract software entity, and accidental tasks, the representation of these abstract entities in programming languages and the mapping of these onto machine languages within space and speed constraints. Most of the big past gains in software productivity have come from removing artificial barriers that have made theaccidental tasks inordinately hard, such as severe hardware constraints, awkward programming languages, lack of machine time. How much of what software engineers now do isstill devoted to the accidental, as opposed to the essential? Unless it is more than 9/10 of all effort, shrinking all the accidental activities to zero time will not give an order ofmagnitude improvement.Therefore it appears that the time has come to address the essential parts of the softwaretask, those concerned with fashioning abstract conceptual structures of great complexity. I suggest:• exploiting the mass market to avoid constructing what can be bought.• using rapid prototyping as part of a planned iteration in establishing software require- ·ments.• growing software organically, adding more and more function to systems as they arerun, used, and tested.• identifying and developing the great conceptual designers of the rising generation