This research into providing highly reusable and maintainable components by using automatic software synthesis techniques uses domain knowledge combined with automatic software synthesis architecture that specifically incorporates application-specific knowledge. This architecture synthesizes software to meet a behavioral specification and external interaction design constraints. Some examples of these external constraints are communication protocols, precisions, timing and space limitations. The incorporation of application-specific knowledge facilitates the generation of mathematical software metrics which can be used to narrow the design space, thereby making software synthesis tractable. The use of knowledge sources to make software synthesis tractable and the organization of this knowledge are paramount. First, an application-specific domain is chosen that will benefit greatly from having highly reusable and maintainable components. One such domain is real-time software applications. Second, the application- independent software synthesis architecture is targeted to this real-time software domain beginning from the lowest level of abstraction (e.g., application-specific code generation) up to higher levels of abstraction (e.g., system resource allocation). The primary goal is to maintain focus on the final result: software. Third, the application-independent software synthesis architecture is expanded to include knowledge of the platform. An example is a RISC processor running the Real-Time MACH operating system. This research will result in the development of use- specific knowledge representations and a new characterization of software design from a synthesis perspective. Success has the potential to dramatically reduce system life-cycle costs not only by reducing development time, but more importantly facilitating maintenance, modifications and extensions of software systems which are currently dominating system life- cycle costs.