In software engineering and programming, a framework is a collection of reusable software components that make it more efficient to develop new applications. The reuse of existing development and research is an essential principle in all engineering fields. For instance, electrical engineers use existing electronic components to make new devices. Component manufacturers follow predetermined standards and specifications to ensure component usability. Similarly, software frameworks contain reusable code modules based on specific software standards and protocols. Frameworks may also define and enforce certain software architecture rules or business processes, so new applications can be developed in a standardized manner.