Recently I’ve been working more than usual with hardware components. One thing about hardware is that absolutely everything must be working properly.
If your Arduino board isn’t connected in exactly the right way to your IMU chip, then nothing happens. It doesn’t just fail a little — it fails completely.
Software isn’t like that. With software it’s much easier to build in back-ups and failsafe mechanisms.
Something might indeed go wrong, but you can detect it and recover from it. Often you can do this without affecting the people who use your program.
Of course you can build failsafe mechanisms into hardware. And for some applications, such as medical or aerospace, that is necessary.
But it’s a lot more expensive and difficult to do that well in hardware than it is to do in software. Maybe that’s one reason I work mostly with software. 🙂