On the topic of creating "bug free" software: For single applications it is somewhat easier to test and ensure that it operates correctly. Once you start networking devices, transducers, etc, it becomes more complicated and harder to test. When you get to "standards" such as NMEA 2000 you can find that there are ambiguities that different manufacturers interpret differently. Stuff can end up breaking and no one will take responsibility - each claiming their implementation is correct. As the complexity of our boat systems continues to increase so does the opportunity for defects to creep in.