Dijkstra suggested that instead of concerning ourselves with a software system that meets the user's needs, we should first separate our concerns.
We should first concern ourselves with the user's needs and draw up careful specifications – properties to which the system should adhere should it satisfy the user's needs.
With those specifications in hand we can concern ourselves with making a system guaranteed to have stated properties.
The problem with this thinking, which the software industry would later discover, is that a user's needs cannot be accurately or completely determined before building the system. We learn more about what is needed by the process of building.
This is an instance of the [[Separation of concerns]] not working.
This is also why the industry has settled on a technique to build iteratively (Agile), always leaving the option open to change course.