[MUSIC] Let's talk a little bit more about software application frameworks. Here's a definition. A software application framework is a universal, reusable software environment that provides a particular functionality as part of a larger software platform to facilitate development of software applications, products, and solutions. The concept of a framework is to make a one size fits all solution set within a general domain, and then this is customized by a programmer to address a more specific problem within that general domain. It's useful to think of application frameworks as consisting of two parts. There are the frozen parts and these are the parts that you don't change in any instantiation of this framework. These parts define the overall architecture, there are the basic components and relationships between them. So these are the things that are basically given to you for free when you use the frameworks. Thery're in essence the infrastructure or plumbing of the application. And then there are the hot spots. These are the parts where programmers are supposed to add their own code. These are the means through which you extend the behavior of the framework to mask the particular application needs that you have. The particular functionality that you are trying to implement. So what's the obvious benefit? Programmers get a lot of functionality that they don't have to think about it. These are the frozen spots. And they can focus their creativity on the unique requirements of their application. Now the amount of time that might take you to build a system from scratch, without using a framework or to learn a new framework, is probably about the same. However, once a new framework is learned, future projects can be developed much faster and are easier to complete. As programmers become more familiar with the framework, productivity should rise. In addition, a good framework will be extensively tested and maintained. So this limits the number of errors that would occur If a programmer tried to build the application from scratch without using a framework. So a framework, when used properly, can help to enforce the good programming practices and appropriate design patterns that are built into that framework. My last piece of advice for you regarding frameworks is don't fight the framework. If you find yourself making extensive changes to the frozen parts, that is, the infrastructure of the framework, you're not using it properly, or it's not a good match for the problem that you're trying to solve.