What am I doing? The ultimate Software Product Line
Carnegie Mellon defines a software product line (Jack GreenField over at Microsoft calls them Software Factories) as:
"a set of software-intensive systems that share a common, managed set of features satisfying the specific needs of a particular market segment or mission and that are developed from a common set of core assets in a prescribed way."
Developers of Software Product Lines accept that industrial reusability of software requires more than just components with well defined interfaces and that neither Object Oriented Programming or Service Oriented Architectures in themselves will create the economies of scope software developers needs (I mean, do you REALLY want to have to tweak your old authentication or shopping cart packages one more time?!).
Some companies are working on tools to facilitate the creation of software product lines (such as language workbenches). Others are creating limited software product lines to meet their specific vertical niches.
My goal was to create a software product line for generating pretty much any web based application with minimal custom programming by looking at the common types of code that we write and then creating domain specific languages for capturing the variability in displaying a list, editing a record, importing data, implementing workflow, handling authentication, conducting commerce and the like.
The trick is in discovering increasingly high level patterns to allow for declaritive programming where most of the creation of an application is about setting parameters rather than writing code. For example, you can categorize reads against a single table as either getitemlist() or getbyFilter() – each with its own simple, but distinct domain specific language. For example, with the first you just have to identify the properties (together with how to build them if they are aggregates or anything else other than just a simple field), the unique attribute you want to key off of (ID, email address, product SKU, etc.) and a comma delimited list of 1 or more values for that attribute.
This might be overly pedantic for manual development, but this kind of standardization and parameterization is the key to a successful software product line, so expect to see a lot more about base classes (a great way to enforce this style of development) over the next few weeks!
There is still a lot to do, but I am already coming to a point where I seldom have to write more than a handful of truly custom methods for any given project. Probably the biggest area I’m experimenting with now is the right balance between dynamic programming and application generation – but that’s the topic for another post!


There are no comments for this entry.
[Add Comment]