Software engineering is like macroeconomics in that (as with most knowledge domains) the underlying phenomenon is high-dimensional, so in practice we employ simple models that are only reliable under strong assumptions but (unlike most knowledge domains?) both suffer from a pretense of knowledge problem driven by a combination of economic incentives, epistemic naivete, and physics-envy (or something akin to it, in the case of the former).
Much of what constitutes expertise in the field is less knowledge than folk wisdom, with a short shelf life and tight bounds on applicability. Situation normal. Failure modes are triggered when we don’t attend to this provisionality (consider, e.g., fetishized best practices, the risible claim that the tech interview is a standardized test, naive appeals to meritocracy in hiring and promotions).