It's my observation that the lower levels of a tool stack need more design care than the upper-most layers. Mistakes at the lower levels are either much more costly, and/or affect far more users or products. This may be related to how many total users or applications rely on a layer, but I'm not prepared yet to say usage factor (users per statement) is the only reason for this pattern. Fastidious techniques necessary for the bottom layers may be overkill for the higher layers. For example, a dynamic or "script" language may be fine for an in-house application with relatively few users, but is not well-suited to build an RDBMS engine or OS out of. A typical stack may look like: * In-house application * In-house libraries * General libraries (such as vendor libraries) * Programming languages (arguably even or below the next one) * Database engines and web servers * OS * Firmware * Chip & hardware If this topic repeats the concepts of an existing topic, please alert me. Thanks. -t ----- See also: SystemsSoftware