1 A method for organizing a software architecture in a computer having a plurality of memory cells, comprising: organizing software in a plurality of software layers arranged in order from software layers providing higher level services to software layers providing lower level services, each software layer including at least one software module; and providing an interface means for permitting communication among software modules in said plurality of software layers pursuant to a set of defined dependency rules wherein the interface means comprises a Software Back Plane for each software layer, each Software Back Plane having interfaces with the at least one software module in its respective software layer, and wherein the set of defined dependency rules includes a rule that a software module in a software layer may only invoke functionality in an interface in its own Software Back Plane or in Software Back Planes of software layers below its own Software Back Plane, and a rule that a software module may never invoke functionality in an interface in a Software Back Plane of a software layer above its own software layer.