Software needs thorough testing. It needs load testing, it needs usability testing, it needs every sort of situation thrown at it testing and vehicle manufacturers just don't have that time given the expectation placed on them for a continual year after year update/refresh of vehicles. The expectation is unrealistic and of course leads to recalls down the line.
I've ranted on this is other posts. Security and stability are an afterthought in many software development environments, including automative. Life-/safety-critical software development should have NASA-level scrutiny.
The life-cycle and manufacturer support of software products (phones, cars, smart-TV, etc) is too short to expose and fix the problems and the marketing push to get a product out the door means that "no obvious crashes is good enough".
I'm all for convenience, efficiency, performance, etc that software-controlled systems can bring to the automotive world. However, by bringing in something as complex as software you bring in an "infinite" number of un-testable conditions that at some point in the real world will kick in and cause a catastrophic event.
Critical powertrain components either need the NASA-level of diligence or be made simple enough that the finite-state-machine can be fully understood. Integration between powertrain and convenience systems should be airgapped or highly curated. "Hey, engine. Just so you know, I turned the AC on, so decide what you want to do about it" vs "I'm the AC and I'm running, so I'm going to increase the engine revs on my own" (simplistic example).
This isn't even "get off my lawn", it's "can nobody else see the oncoming disaster?". What happens when all this buggy software then gets meshed together with vehicles talking to each other and traffic control signals? Until something horrible happens, though, it's going to be business as usual. Get the product out NOW and if enough people complain, work on the problem.