I read Alan Wills’ blog about his domain-specific languages tutorial at UML 2004, and it reminded me of some thoughts I had about the difference between a Software Factory and a Package.
A Package is a chunk of software that is designed to encompass a set of situations within a domain. There are mechanisms for customizing the package to suit a particular situation. These mechanisms are domain-specific languages.
So what’s the difference with a software factory? Darrell Norton raises this exact issue in his blog.
It’s actually all about early vs late binding, openness, effective integration of people into the process, and how many dimensions of variation are involved. Usually, a package predefines the runtime engine and runtime environment, and provides customization points only for functional variations. People who have worked in a systems integration house know that most packages believe that they are the centre of the universe, and getting them to work together can be something of a pain. In contrast, a Software Factory can enable variations at all points in the lifecycle: non-functional requirements, deployment requirements, environmental requirements, security requirements, integration requirements, etc.; and provide tailored environments for the people who do the work.