What is a "Software Framework"?

A "Software Framework" is a set of software components that may be used as “building blocks” to create software applications. What distinguishes a framework from a simple software library (or set of libraries) that purchasers may also use in their application development is that libraries contain software components that may be used in unstructured and myriad ways within a software application whereas software frameworks prescribe a structure as to how code developed to use (or work within) them must be laid out.

The framework provides capabilities to the developers’ code not only by giving it access to certain components with certain capabilities (that developers’ code must then control and use – as is the case with libraries), but by controlling (or prescribing) the interaction, order, and flow among its (the framework’s) own components and the components built to execute within the framework by the purchaser. In a framework, while the developers’ server-specific code (and client-specific code) may temporarily control the flow within a micro operation, the overall (macro) flow is controlled (or prescribed) by the framework.

While subjecting one’s code to the control and structure of a framework may initially seem very constraining and unappealing, a well designed and flexible framework can provide many more complex and powerful capabilities than can a set of libraries – precisely because it can control the flow; and, if a framework is flexible and well thought through, not impose constraints that limit what the purchaser is able to achieve.

A well designed and flexible framework can leverage the expertise of the framework writer as to how to accomplish key service-type tasks rather than simply providing components that enable the purchaser (assuming the purchaser had the requisite expertise) to do so. This is especially true when the tasks performed by a purchaser’s code must be intertwined with the purchased code in a complex manner. Purchasing a framework enables companies to focus their development efforts on their true areas of expertise.