Speaking as a mechanical engineer:

Another issue is simply encapsulation. You can encapsulate physical problems to reduce their complexity. A spring is a spring. We "could" use finite-element-analysis to make a spring that is also a damper, and a lever at the same time. But it's way more cost-effective and easier to reasonable when we use discrete components. A spring is a spring. A damper is a damper. You want both, you put them together.

We "could" create capacitors that are also inductors and resistors. But it's way easier to reason about them separately.

Like I said, a spring is a spring. It will never set off an atomic explosion. It will never turn into lead. It will never warp into a living person. You can reason about that spring and as long as you live within "safe" areas it will always act the way you expect it. You can easily predict the failure rate of a given spring for given environment of heat, forces, etc.

Meanwhile, you have an app. You think it's encapsulated. But it's not. Your app is a network app. That means the router could die or be misconfigured. The ISP could go down. You could forget to pay the ISP bill. The internet backbone could go down. And, not only that, it's not just "down" it could simply be "slower" or have a higher packet loss than normal, or end up sending duplicate packets.

We spend so much time trying KNOWING that things can fail anywhere along the line, we "fix" it by adding redundant, fault-tolerant, load balancing systems. Except each of those systems increase the complexity and can fail in even more ways!

And I haven't even discussed what the app does yet! And just being connected to the internet or another network machine and it's already exploded in ways that it could fail. Even the WIRES in the wall could be corroded, unplugged, or eaten by a rat. And, if the power goes out anywhere along the chain you could have problems. If the power "kind of" goes out and you don't have proper battery backup, it could introduce errors. A Windows Update can (and DOES) break products all the time. A Java Update can break things. A driver update can break things. A hard drive failing can subtly break your software. Any third-party software you use could have a hidden bug. A router could have ONE and only ONE port, or one cable with a slight kink in it, could have a higher error rate.

There's a famous story of back-in-the-day when mainframe actually failed at the same time every day. It failed when people walked over a specific TILE in the floor where the wires ran under it.

Meanwhile, that spring, sitting on a table in some warehouse will remain a spring till it rusts away a couple hundred years later. The spring constant won't change. It won't unravel. It won't leak your boss's e-mails. It'll still be a spring.

So while yes, there ARE very complex mechanical constructs. However, they're actually pretty rare because in the physical world "simple" is the most reliable and often the strongest solution. Meanwhile, in business, you're dealing with tons of logic and even though you "think" it's encapsulated, it's actually not.

Summary / TL;DR: Most mechanical machines aren't dealing with the dimensional explosion of possibilities. They do have failure points just not as many.

(Also, one great thing about many machines is because they're physical, you can often diagnose many of them before they fail. They vibrate. They create sound. They output less than they're supposed to. A router doesn't warn you before it decides to stop forwarding a port.)