If you write code for a living, or if you’re curious about what the problem was with the Boeing 737-MAX, you should read this article – it’s kept high level with plenty of explanations.
If you do any embedded or real-time code controlling anything in the physical world you really must read this article. In general, you need to know your own systems but also how they connect and interact with the rest of the system.
For all people participating in the creation of software (managers, engineers, coders, whatever): please understand the context in which your code will run. Ask questions when you do not understand something – anything – related to the coding assignment. It is nearly impossible to code from requirements without finding something to ask questions about. Think hard about how the written requirements use words and how the same words can mean different things to different people. This will help you “get it right the first time”. But you also need to go beyond just the written requirements and consider the interactions with the other components in the system. Sometimes those interactions are not truly considered until someone goes to write the code – and if they don’t do it then it may never get done.
Much of this is an art that requires experience as a guide. It’s why everyone needs someone with that “additional” experience as their mentor. Yet they still won’t learn quickly without considering the words, their ambiguous meanings, the context of the assignment and the components around it and then ask questions…
… Lots of questions.