Software factory–based application development addresses the problem of traditional application development where applications are developed and delivered without taking advantage of the knowledge gained and the assets produced from developing similar applications. Many approaches, such as training, documentation, and frameworks, are used to address this problem; however, using these approaches to consistently apply the valuable knowledge previously gained during development of multiple applications can be an inefficient and error-prone process.

Software factories address this problem by encoding proven practices for developing a specific style of application within a package of integrated guidance that is easy for project teams to adopt. Developing applications using a suitable software factory can provide many benefits when compared with conventional software development approaches:

  • Consistency. Using a software factory to build multiple instances of a software product line (a set of applications that share features and architecture) makes it easier to achieve consistency. This simplifies governance and lowers maintenance and training costs.
  • Quality. Using a software factory makes it easier for developers to learn and implement proven practices. Developers spend less time writing boilerplate code and spend more time creating features that are unique to each application. This reduces the likelihood of the application having design flaws or code defects. Applications developed using a software factory may also be verified before deployment; this ensures that factory-specific best practices were followed during development.
  • Productivity. Using a software factory streamlines and automates the prescribed application development activities in the following ways:
    • It reuses software assets, particularly extensible architecture baselines, application frameworks, and application blocks.
    • It provides contextualized and automated guidance.
    • It generates code from models that represent abstractions of the application elements and mechanisms.

These approaches simplify, automate, or even eliminate many routine development tasks. By using a software factory, developers can concentrate on higher-value activities; this decreases the overall development time and cost.

Ref: Patterns & Practices