This does seem like a bit of a fishing article, but I'll bite. I've personally been involved in 2-3 software projects where the immediate ramifications related to software quality and delivery led to project failure. The idea that bad (or no) architecture and terrible code won't have business impacts is just wrong. Perhaps he was lucky, perhaps we have collective survivorship bias, but I strongly disagree on the main…
Some people hear it and think it means highly-structured abstraction towers vs low-structure imperative-heavy code. Some think about horrible spaghetti with 16 levels of indentation and 1-letter variable names (moving on to 2-letter once you exhaust the first 26) and if-statements whose predicates span twelve lines. Some people think about feature completeness and bugginess (or, rather, lack thereof).
I think they're dangerous over different time horizons and you can't just prioritize over all time horizons.
Spaghetti is dangerous in the short-term - it makes small changes difficult and unsafe. You'll end up tied by your own shoestrings and not even finish the project. Luckily if this is the only problem, it's also the easiest to clean up. (But it's not usually the only problem).
Less-structured code is good for when you don't understand your requirements well. (Which you typically never will a-priori, even if you think you do). It's easier to add more layers of abstraction than it is to change or remove them. If you prematurely build an abstraction tower, you will suddenly find yourself having to plumb information up and down the entire tower as the abstractions prove to leak or not be completely perpendicular to the kinds of features you need to add. But if you wait too long, you have too much unstructured code to refactor and you're now "chasing" people adding new features to the system while you try to refactor the system underneath them. So there's just some engineering gut-sense that's important to know when to stop and codify the patterns you've seen emerge into a useful, tight abstraction.
And then of course there's features and bugginess. It's possible for the shittiest code to have very few bugs and please users. The worst thing about the worst code I've ever seen in my career is that it worked - so it was hard to want to mess with it when it was so easy to ignore! And it doesn't help that what is intractable code to some people is only a little complicated to others. Especially if you use a big language and are combining a lot of esoteric/complex features, or have a complicated logical expression and you are a logician and others are not.
I've seen projects become unchangeable because the code was spaghetti. I've seen them become unchangeable because there was too much abstraction. I've seen them become unchangeable because there was too little abstraction. I've seen awful code make big impact and I've seen excellent code flop because it wasn't competitive with "worse" but more complete offerings.
(All of this reinforcing, of course, that it's impossible to estimate how long software will take..... all of it relies far too heavily on the intuition of your mid+senior engineering talent).