Dealing with a physical system is pretty challenging as you have to take into account the hardware limitations. There is a big misconception that software is only limited by your imagination, and that whatever you think of you can just write it. But when you are dealing with software that completely deals with digital data and has no presence in the physical world, you do have a lot more freedom compared to when you have to take the physical world into account.
Besides the limitations you also have to take into account noise, inaccurate values and even hardware failures. You will often need to write your software such that it can deal with all of these problems, even though these are not caused by the software itself, so we already see a certain level of ‘fixing’ hardware problems. Because if the hardware would be accurate and immune to failure, your software could just rely on the values it gets. But since this level of correctness is impossible in the real world, you have to fix it in the ‘virtual’ world.
This however enforces the view many people have, that you can just deal with everything in software, and as mentioned earlier, that it is not limited except by your imagination. This could have an opposite effect, instead of investing money in better hardware, it is requested that your software just handles it. And it might even lead to deteriorating hardware which always has to be compensated by the software.
But the software can under no circumstances fully account for mistakes of hardware. It always involves an overhead, which can be very costly. For example: to erase noise from a bad scanner, you need to average the values over a certain time period. This means it takes longer to get a value. An example I faced recently was the slipping of an AGV (Automated Guided Vehicle). Such an AGV only has a single drive wheel, and if that wheel slips we don’t know the speed of the AGV (as the speed is measured by counting the rotations of the drive wheel). As a result the AGV loses track of where it is because the positioning systems uses a combination of reflectors and drive feedback. It was now requested to fix this position lost situation by letting the positioning system find the correct location.
While this is possible, it is dangerous as the positioning can easily find the wrong location in situations where there is a high level of repetition in the reflectors (which often happens in a long hallway). The problem here is clearly that our drive wheel slips, but instead of focussing on how to fix this, this is completely bypassed and a software solution is demanded.
The main reason for this kind of thinking: making hardware changes is considered hard and expensive, software changes however can be done fast and costs almost nothing. Clearly this is the way how people with no understanding of software think, as professional Software Engineers will tell you that this does not always have to be the case. A small change that is done quickly can have huge implications in the long term due to required refactoring etc. The real solution here would be to have a speed sensor on a different wheel than the drive wheel.