More succinctly: there should be no term "software engineer", unless people need certifications to become them, and face legal consequences when their engineering product breaks and kills people.
Contrast that with the building blocks the 'software engineer' has to work with. Microsoft might upgrade some DLLs your product depends on, overnight. Will your product still work? Your application probably relies on components written by others. Are they infallible? Can you even inspect the components for defects?
I sometimes have the idea that software is built upon quicksand, and the building blocks can and probably will change before the project is completed.
Real problems occur when an engineers specifies a particular quality and lower quality is used. Or the engineer designs for a set of conditions, and that set is exceeded.