When describing what a software factory is concretely and technically how to build one on the .NET platform, it's quite common to list the toolkits/technologies you need to use to get one.

For some time, that list of foundation technologies has been pretty well defined. If you are building a factory today, here is the list of technologies (and their tools) you commonly bring together as an implementation of a software factory:

  1. Recipes, from the Guidance Automation Toolkit
  2. Models, Designers and Text Templating, from the Domain Specific Language Toolkit.
  3. Tool-Windows, Editors, Menu commands etc, from Visual Studio Extensibility (including the packages to contain them).
  4. Designers, from the Distributed Application and System designers (Team Architect Edition)

Now, most factories today are not likely to include #4, although that will change in the future. Most of the well known factories, like the one you see from patterns & practices really only include #1 today, but tomorrow will certainly include the top 3, and possibly even 4.

But really this is the definitive list of technologies (today), and the toolset is pretty small presently. Most all factories are based on some combination of using these toolkits. These toolkits deliver all the pieces to cover all of the assets types for most factories today.

[Please don't make the mistake of thinking that because the list is small, it must be trivial to master just these 3 or 4 toolsets and orchestrating them into a cohesive, usable factory. I must strongly advise you, this is no trivial ask of anyone.]

Now, we are not talking about the various frameworks, toolkits and accelerators that have been built upon these technologies to provide easier operation and construction of factories - that's not what I am talking about here. What I am getting to are, identifying the key technologies behind providing the essential elements used in a factory by a factory user. We will see as time goes on various toolkits released to help author factories, and support their runtime, but these will be mostly based upon these foundation technologies.

Some of us are curious about whether this technology toolset is indeed complete, and whether there are some missing foundation technologies to be included at some point later.

A Question

It's still early days in factory implementation, and many of the issues of 'Model Driven Development' in the context of factories (i.e. multiple views, extensibility and composability etc.) have not been resolved completely concretely. There is still much work to do, and for many in and around this space.

In doing this work though, a few candidates for the next key foundation technology are starting to emerge. We have a few ideas right now (I have already hinted at one in a recent post!), but I'd be interested in hearing your views on what those missing pieces could possibly be based on your experiences.