I wrote a piece of code controlling an assembly line machine. These machines require manual operation, and would come with a light curtain, which detects when someone places their hand near the moving parts, and should temporarily stop the machine.
A relatively minor bug in the software that I wrote caused the safety curtain to stop triggering when a certain condition was met. We discovered this bug after an operator was injured by one of these machines. Her hand needed something like 14 stitches.
Lessons learnt:
1. Event-driven code is hard.
2. There's no difference between a 'relatively minor' bug and a major one. The damage is still the same.
We just recently reviewed the Therac-25 case study as my organization is working towards ISO 13485 certification. I wonder whether the OP's organization was using ISO development practices.
Another lesson your company should have learned is that a safety-critical system like this should not be left to software. Sure, monitor the curtain by software and send errors, but hardware should immediately stop the machine when the light curtain is broken.
A relatively minor bug in the software that I wrote caused the safety curtain to stop triggering when a certain condition was met. We discovered this bug after an operator was injured by one of these machines. Her hand needed something like 14 stitches.
Lessons learnt:
1. Event-driven code is hard.
2. There's no difference between a 'relatively minor' bug and a major one. The damage is still the same.