Studies have found critical software malfunctions responsible for some of the worst accidents in recent times. These malfunctions are often only minor defects that snowball into large problems; a few lines of code is all it takes. Complexity, safety, quality, and resilience are among the key attributes defining a software’s operational success. There are many leading factors for complexity, such as increases in the product size, the rate of requirement changes, and the number and type of stakeholders, and failure to manage these issues efficiently always has the same consequence, i.e., massive failure and sometimes technological catastrophe. This work analyzes some of the architecture, design, and implementation guidelines used as detection and mitigation techniques. It also discusses the safety considerations, as considering how the steam industry has handled safety issues could offer some guidance for ensuring safety. Complexity in such systems also causes some of the worst side effects from the quality auditor's perspective. While failures in the software are hard to predict, one of the most significant ways of showing preparedness is practicing software resilience. New mitigation areas, such as the fragility spectrum and failure obviation, and their usage for building a safer system are analyzed. Also discussed are various architecture styles in practice and the dramatic effect human factors can have on the success of the software being developed.