I think there's a lot to learn from the aviation industry. I did a talk at my companies internal conference on this (turned into words at <a href="https://medium.com/ingeniouslysimple/why-dont-planes-crash-14a0579a5e2d" rel="nofollow">https://medium.com/ingeniouslysimple/why-dont-planes-crash-1...</a>).<p>For me it's the mindset that differs. Too often as software engineers we find a bug and just fix it. Aviation goes a step deeper and finds the environment that created the bug and stops that.<p>Unfortunately, the recent 737 MAX incidents seem to have changed this. From what I understand the reaction to the problems sounds more like what I'd expect a software business to do, rather than the airline industry!
Checklists and written procedures are very important. One of the earlier things I did when coming into my company was create a written procedure for software upgrades until we had time to automate it with ansible.<p>One thing I have not had very good discipline about is I want to use checklists both for code submitted for review and when I'm doing reviews. Lint checkers etc. can only go so far.<p>If anyone has published checklists for code reviews I'd be curious to see them. This one seems reasonable: <a href="https://www.liberty.edu/media/1414/%5B6401%5Dcode_review_checklist.pdf" rel="nofollow">https://www.liberty.edu/media/1414/%5B6401%5Dcode_review_che...</a> though I'd add concurrency to the list.
This was great!<p>> 1. Don’t kill yourself<p>> 2. Don’t kill anyone else<p>Could we reorder these, though? Every once in a while a plane will hit a house and kill its occupants (and the pilot, usually) and it's so awful. I think not killing others as a pilot is so much more important than not killing yourself.
"...plenty of episodes of Mayday/Air Crash Investigation available on Youtube too. (Be warned though, all doomed flights take off from one of the busiest airports in the world .)" Great show. Comment is spot on, and don't forget "investigators were under extreme pressure".
Nathan Marz talks about this previously, with unique insights: <a href="http://nathanmarz.com/blog/how-becoming-a-pilot-made-me-a-better-programmer.html" rel="nofollow">http://nathanmarz.com/blog/how-becoming-a-pilot-made-me-a-be...</a>
Though article isn't about software development in the aviation industry, a few thoughts on that:<p>The industry is really slow to change its practices and tools. Like the use of C for most software, I do feel a more safer language out to be preferred.<p>Use of 1553 bus for inter device communication, the bus and protocol aren't general, it is very opinionated/rigid about the manner in which communication should happen. And the hardware parts for it are horrendously expensive compared to most ethernet, IP equipment. There is an aviation ethernet standard, but adoption of it has been slow.
I still hold my opinion that checklists are for hardware issues. One should not be filling them on software tasks. Instead, software is automated, automatically tested and automatically verified - routine checks are an anti-feature and inversely correlated to quality.