One way to fix problems is to remove areas where coding issues like errors or duplication can be avoided. To that end, one of the most common programming tools are the libraries. These are specially coded programs that developers can use that take much of the duplication out of their hands. They also provide uniformity and consistency. Programmers that rely, for example on video or audio, can access the library, and not have to rewrite the code for accessing those features. This means that the code will work for any type of audio or video component that the programmer may need.
Another way of eliminating programming problems is by designing the code to not only be more flexible, but also to operate in a strict environment. One way to do this is to force the programmer to use only certain tools and use these tools only in restrictive ways. Some methodologies were created for just that purpose. One is object oriented programming. The other was modular programming.
In object oriented programming, the programmer has to create certain objects, but they can then be used again and again. Here the focus is on the data, not the function.
Another form of programming is modular programming. It focused on the function of a module, rather than the data. It also allowed for reusable units of programming logic and code.
Both of these approaches were concerned with quality. Each wanted to guarantee that the approach to programming would be as smooth and without problems.
Another problem involves code as it affects memory management. All programs have to access memory; they use it to store the results of CPU processes and to prepare data for processing. Memory has to be freed to allow other programs or applications to access it, but sometimes thay don't do that.