To engineer is to create. To create safe structures, we often have to overcome environmental difficulties and to solve these problems using our specialized analytical skills on mathematics and science that we accumulated over the years.
We need to have a clear knowledge about structural systems and the selection of different systems in different situations, such as moment frames and bracings. This is because different situations call for different methods. We also need to understand the different types of loads, so that we can correctly apply the appropriate load factors on the appropriate load cases. We should understand the selection of appropriate and reasonable load combinations, since using and combining all the load cases with their maximum values for analysis is not the most efficient case. For example, for roofs, it should not be expected that there will be snow loads AND rain loads at the same time. The science of load paths should be understood to determine the application of load onto each individual structure for structural analysis. For individual analysis, we need to understand failure types (yielding or rupture) and material behaviour (cracking and ductility) to understand how the structural members react to various stresses and strains. Last and most importantly, we need to know how to make reasonable assumptions of loads, materials, and structural systems for the design process to ensure the structures that we design are within the ballpark of safe structures. All of this is for the safety of the public. And all of this is not taught by the code, but it is vested in the spirit of engineering itself.
It is true that the spirit of engineering, its principles and concepts, ties in with the building codes. But, in order for us to use the codes, we must understand why the codes are the way that they are now. Building codes provide us a form of standardized limitation or uniformed guideline to design structures for its strength and serviceability and to implement design force magnitudes that are to be within the capacity or limit states. We must take into account that the codes are established for control and public safety. The codes are not here to lead us through the design process and to have us input variables in their equations. If we blindly follow the code without learning the fundamentals, we would not be engineering the design. We do the thinking ourselves, not the code.
Moreover, the code is ever changing. Codes change throughout history because of learned mistakes, such as structural collapses during the earthquakes of 1971 in San Fernando and 1994 in Northridge. Thus, the code is not perfect. Research and testing then are used to determine better limitations for the code in order to reduce future failures and danger.
Yes, it is the law to follow the code. But if we are to do so, we need to be responsible and use the code along with the spirit of engineering.