<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jezz Santos : Factory FAQ</title><link>http://blogs.msdn.com/jezzsa/archive/tags/Factory+FAQ/default.aspx</link><description>Tags: Factory FAQ</description><dc:language>en-GB</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>FAQ - How does EFx Factory differ from the Web Service Factory?</title><link>http://blogs.msdn.com/jezzsa/archive/2007/01/17/faq-how-does-efx-factory-differ-from-the-web-service-factory.aspx</link><pubDate>Wed, 17 Jan 2007 12:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1076364</guid><dc:creator>jezzsa</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/1076364.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=1076364</wfw:commentRss><description>&lt;p&gt;Naturally, I get asked this all the time.  &lt;p&gt;&lt;strong&gt;What are the differences between the 'EFx Factory' and software factories such as the 'Web Service Software Factory' from patterns &amp;amp; practices?&lt;/strong&gt;  &lt;p&gt;&lt;em&gt;[Now, I do need to say this, I do work closely with the patterns &amp;amp; practices teams who built Service Factory, in fact, I am still a member of the expert advisory board on that project. So, I do need to be careful how I word this :) or &lt;/em&gt;&lt;a href="http://blogs.msdn.com/donsmith"&gt;&lt;em&gt;Don&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and &lt;/em&gt;&lt;a href="http://blogs.msdn.com/tomholl"&gt;&lt;em&gt;Tom&lt;/em&gt;&lt;/a&gt;&lt;em&gt; will kill me.]&lt;/em&gt; &lt;p&gt;My aim here is to give a fair comparison between the two factories from the point of view of the customers using them and market assessing them. What is available today, and what customers can expect to see from factories in this space in the future (especially from Microsoft). Therefore, this is not about how they were implemented technically, but more about how they are designed, and how they are used to do what they do from the customer end-user perspective. &lt;p&gt;I thought this was going to be a brief post, but I was wrong again. (I'll get there eventually).  &lt;p&gt;&lt;em&gt;[I'm using &lt;font color="#804000"&gt;colour&lt;/font&gt; &lt;font color="#004080"&gt;to&lt;/font&gt; &lt;font color="#804000"&gt;distinguish&lt;/font&gt; &lt;font color="#004080"&gt;the&lt;/font&gt; &lt;font color="#804000"&gt;answers&lt;/font&gt; &lt;font color="#004080"&gt;for&lt;/font&gt; &lt;font color="#804000"&gt;each&lt;/font&gt; &lt;font color="#004080"&gt;factory, &lt;font color="#804000"&gt;and&lt;/font&gt; aid &lt;/font&gt;&lt;font color="#804000"&gt;readability &lt;/font&gt;&lt;font color="#004080"&gt;(hopefully). &lt;font color="#804000"&gt;Not&lt;/font&gt; here &lt;font color="#804000"&gt;of&lt;/font&gt; course, &lt;font color="#804000"&gt;but&lt;/font&gt; below.]&lt;/font&gt;&lt;/em&gt; &lt;h2&gt;Backgrounder&lt;/h2&gt; &lt;h3&gt;The Basics&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;The &lt;/font&gt;&lt;font color="#004080"&gt;&lt;a href="http://msdn.com/servicefactory"&gt;Web Service Software Factory&lt;/a&gt;&lt;/font&gt;&lt;font color="#004080"&gt; (Service Factory) is a released public available deliverable from the &lt;/font&gt;&lt;font color="#004080"&gt;&lt;a href="http://msdn.microsoft.com/practices/"&gt;patterns &amp;amp; practices&lt;/a&gt;&lt;/font&gt;&lt;font color="#004080"&gt; group. Currently, it's&amp;nbsp;in version 2.0 and addresses building secure ASMX or WCF web service layers and building data access layers.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The &lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa905331.aspx"&gt;EFx Factory&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt; is a limited, unreleased, prototype&amp;nbsp;offering developed within &lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://www.microsoft.com/services/microsoftservices/srv_application.mspx"&gt;Microsoft Consulting Services&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt;. Currently, version 0.9 and not complete or released. It provides the end-to-end architecture for building both Client Applications and Web Services with a choice of any combination of technologies.&lt;/font&gt;  &lt;p&gt;Both factories target similar problem and solution&amp;nbsp;domains and are both founded upon well known &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/distapp.asp"&gt;.NET architectural patterns&lt;/a&gt; and other assets and deliverables from the &lt;a href="http://msdn.microsoft.com/practices/"&gt;patterns &amp;amp; practices&lt;/a&gt; group.  &lt;p&gt;Let’s have a look at both factories from a high level, and then we’ll consider the differences in detail in the answer below. If you are familiar with these factories already, then skip this part and move straight to the answer section below.  &lt;h3&gt;Web Service Software Factory (Service Factory)&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;The objectives at the start of this project (circa start of 2006)&amp;nbsp;were to make building web services easier, quicker and provide the right guidance and patterns to implement them. At the time of inception, the application of Software Factories was not well understood and the DSL toolkit was in its infancy. GAT was a recent enabling technology investment made by p&amp;amp;p which steered them to more automation than modelling approach. The p&amp;amp;p project team (consisting of some web service pattern legends: &lt;/font&gt;&lt;font color="#004080"&gt;&lt;a href="http://blogs.msdn.com/thehoggblog/"&gt;Jason Hogg&lt;/a&gt;&lt;/font&gt;&lt;font color="#004080"&gt;, &lt;/font&gt;&lt;font color="#004080"&gt;&lt;a href="http://blogs.msdn.com/donsmith"&gt;Don Smith&lt;/a&gt;&lt;/font&gt;&lt;font color="#004080"&gt;&amp;nbsp;et al. and a number of key industry expert advisors and leaders from our partners and customers) had heaps of valuable web service guidance to put into the factory. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;The approach taken was focused on implementing web service patterns with ASMX, and&amp;nbsp;now WCF technology, and on providing the factory user with the source code and solution structure to flesh out the service functionality. Using available p&amp;amp;p deliverables such as GAT, a set of Guidance Packages (GP's)&amp;nbsp;do the code generation from a set of recipes and&amp;nbsp;wizards which capture the user’s settings and generated configuration and source code (via the Text Templating Engine). From there, the developer is expected to enhance the generated source code in order to complete the solution. It also includes recipes for automating some common development tasks.&amp;nbsp;As well, the deliverables include a great deal of invaluable documentation, reference implementations, and guidance for designing and creating web services and implementing web service patterns today. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;You can find more details about the features of Service Factory &lt;a href="http://msdn.com/servicefactory"&gt;here&lt;/a&gt;.&lt;/font&gt;  &lt;h3&gt;EFx Software Factory (EFx)&lt;/h3&gt; &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory evolved from an &lt;/font&gt;&lt;font color="#804000"&gt;Architectural Application Framework&lt;/font&gt;&lt;font color="#804000"&gt; called &lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677117/500x263.aspx"&gt;'Enterprise Framework'&lt;/a&gt; (circa 2003) which itself is founded upon Enterprise Library and a number of other application blocks. The project was initiated internally within Microsoft in response to demand from customers and partners for a implementation of the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/distapp.asp"&gt;.NET architecture&lt;/a&gt; and enterprise development patterns prescribed in written form from the patterns &amp;amp; practices group. Over a long period of time, the framework has encapsulated these patterns implemented on the .NET framework and has refined class libraries to aid the construction of client applications and services according to these architectures as the .NET platform has evolved. The net result of using the architectural application framework was that a developer need only write a small amount of source code to complete a service/application. The software factory that evolved from this framework (circa mid 2005), focused upon the modelling, tooling and automation of the variability points of the architectures of the client applications and services. The framework provided or pointed to most of these abstractions&amp;nbsp;that would have otherwise have been coded directly&amp;nbsp;to the framework class libraries. The primary focus of the factory&amp;nbsp;has been architectural guidance, usability, and the separation of the technologies that would be used to implement various layers of the architecture. In effect, the&amp;nbsp;factory allows any technology, pattern or strategy to be used to implement the various architectural layers, which promotes re-use and composability of factory variants.&lt;/font&gt;&lt;font color="#804000"&gt; &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;You can find more details about the features of the EFx Factory &lt;a href="http://en.wikipedia.org/wiki/EFx_Factory"&gt;here&lt;/a&gt;.&lt;/font&gt; &lt;h2&gt;Answer&lt;/h2&gt; &lt;p&gt;So let’s have a look at the key differences of these two factories, in detail.  &lt;p&gt;&lt;i&gt;[For the purposes of this comparison, we are only going to compare the ‘services’ that are built with the EFx Factory to the ‘service’ that is built with the Service Factory. &lt;/i&gt; &lt;p&gt;&lt;i&gt;The EFx Factory actually assembles not only ‘services’, but also ‘client applications’ and also ‘systems’ which are a combination of multiple client applications and multiple services together as one product. &lt;/i&gt; &lt;p&gt;&lt;i&gt;Furthermore, the EFx Factory is somewhat of a different generation of software factory, being much closer to implementing the &lt;a href="http://software-factories-swicki.eurekster.com/Pillars+of+Software+Factories/"&gt;pillars of factories&lt;/a&gt; (Model-Driven Development, Architectural Frameworks, Product Lines, Guidance in Context) and raising the level of abstraction&amp;nbsp;to logical design rather than physical design, so it's not really a level-playing field to do an exact&amp;nbsp;comparison.]&lt;/i&gt;  &lt;h3&gt;Factory Mechanics&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;Service Factory is the following: &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#004080"&gt;&lt;strong&gt;A set of Guidance Packages,&lt;/strong&gt; one per technology and architectural layer: ASMX, WCF, SQL. These create initial solution structure, and primarily generate source code artefacts for each layer directly into the solution structure, invoked from projects in the physical solution structure.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#804000"&gt;EFx Factory is the following: &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#804000"&gt;&lt;strong&gt;Guidance Packages &lt;/strong&gt;to create initial solution structure, and create the logical work products of the architecture, invoked from a view of the logical architecture of the product, DSL models and Visual Studio Application and System designers.&amp;nbsp; &lt;/font&gt; &lt;li&gt;&lt;font color="#804000"&gt;&lt;strong&gt;DSL designers&lt;/strong&gt; to visualise and define the 'specification' of the internals of the applications and services. &lt;/font&gt; &lt;li&gt;&lt;font color="#804000"&gt;&lt;strong&gt;Factory runtime &lt;/strong&gt;tools &amp;amp; runtime services to provide, view, and manage the &lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677147/original.aspx"&gt;Product Model&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt;, exposing a public&amp;nbsp;automation API of the factory and its product. &lt;/font&gt; &lt;li&gt;&lt;font color="#804000"&gt;&lt;strong&gt;A pluggable technology extensibility mechanism &lt;/strong&gt;(models and programming interfaces) for other 3&lt;sup&gt;rd&lt;/sup&gt; party factories to plug in and extend and enhance the provided technology-independent models - enabling re-use and composability. &lt;/font&gt; &lt;li&gt;&lt;font color="#804000"&gt;&lt;strong&gt;Integrated extensions&lt;/strong&gt; to the &lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms379582(VS.80).aspx"&gt;Distributed Application and Systems designers of Visual Studio&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt;, enabling top-down development of the service.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Assets &lt;/h3&gt; &lt;p&gt;Both factories deliver guidance assets that automate the development of the factory product (the service).  &lt;p&gt;&lt;font color="#004080"&gt;The guidance assets included in Service Factory&amp;nbsp;provide &lt;strong&gt;invaluable guidance for service implementation of WCF and ASMX&lt;/strong&gt; technology web services, and &lt;strong&gt;data mapping to and from a SQL database&lt;/strong&gt;. These assets&amp;nbsp;include a number of key&amp;nbsp;innovations in web service patterns and secure web services&amp;nbsp;with class libraries to implement common concerns in building services (i.e. Exception Shielding, Versioning&amp;nbsp;etc.). &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;The factory delivers &lt;strong&gt;comprehensive written guidance on web service architecture, and message exchange patterns&lt;/strong&gt;, to aid in&amp;nbsp;completing the services which it initiates. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;It also includes reference implementations to act as examples of what the factory can create using this guidance.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory core assets are &lt;strong&gt;based upon service oriented, and enterprise architecture patterns,&lt;/strong&gt; separating the architecture and design of a web service from the technology implementing it. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;The factory includes &lt;strong&gt;an Architectural Application Framework&lt;/strong&gt;, itself an abstraction of Enterprise Library, and this framework underpins the models and artefacts which the factory creates. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;The factory also includes a reference implementation, but minimal documentation of its use.&lt;/font&gt;  &lt;h3&gt;Solution Structure&lt;/h3&gt; &lt;p&gt;Both factories provide solution templates that determine the&amp;nbsp;initial physical solution structure (solution folders, projects, and layout etc) of a service.  &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478584/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478584/secondarythumb.aspx"&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478566/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478566/secondarythumb.aspx"&gt;&lt;/a&gt;&amp;nbsp;  &lt;p&gt;Both use recipes to define the structure and naming of the solution and its artefacts. The physical solution structure is viewed using the familiar ‘Solution Explorer’. Both factory's solution templates can be customized, in both structure, layout&amp;nbsp;and naming. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478595/secondarythumb.aspx"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478585/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478585/secondarythumb.aspx"&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp;  &lt;p&gt;Both factories use metadata on the created artefacts (solution folders, project etc).  &lt;p&gt;&lt;font color="#004080"&gt;In Service Factory, this metadata &lt;strong&gt;determines the ‘responsibilities’ of the containing artefact&lt;/strong&gt; (solution folder, project). The metadata &lt;strong&gt;denotes the type of physical artefacts that are contained in the container artefact&lt;/strong&gt;, and furthermore &lt;strong&gt;determines what actions (recipes) can be applied to them&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;The &lt;strong&gt;assignment of these responsibilities is configurable&lt;/strong&gt; by the factory user.&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478602/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478602/secondarythumb.aspx"&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478603/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478603/secondarythumb.aspx"&gt;&lt;/a&gt;  &lt;p&gt;&lt;font color="#804000"&gt;In EFx Factory, this metadata &lt;strong&gt;exposes the meta-model of a logical work product&lt;/strong&gt; the factory is assembling (i.e. a service interface or business component, etc). In other words, a containing artefact (solution folder or project) &lt;strong&gt;is the physical representation of one of the logical work products&lt;/strong&gt; of the service (i.e. Service Interface, business components, data contracts etc). &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;The metadata describes the actual state and properties (configuration) of the work product&lt;/strong&gt;, and the containing artefact (solution folder, project) contains the physical artefacts of that work product within it. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;The work products of the service are configured in a &lt;strong&gt;separate view of the factory’s logical product in another window called the &lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;&lt;font color="#804000"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677147/original.aspx"&gt;Product Explorer&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font color="#804000"&gt;. This view shows the logical architecture of the service.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;&amp;nbsp;&lt;/font&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677147/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/677147/secondarythumb.aspx"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;&lt;font color="#804000"&gt;The EFx Factory &lt;strong&gt;maintains a runtime mapping between the work product in the ‘Product Explorer’, and its artefact realisation in the ‘Solution Explorer’&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;. &lt;/font&gt;This separation (physical from logical) enables the factory user to re-arrange the physical structure to focus upon the deployment of the solution, rather than mixing that with the logical architecture of the service.&lt;/font&gt;  &lt;h3&gt;Artefact Generation&lt;/h3&gt; &lt;p&gt;Both factories use GAT recipes and wizards to automate the creation of artefacts or work products of a service.  &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory &lt;strong&gt;uses recipes and wizards to either generate source code&lt;/strong&gt;, or to configure generated source code (on compiled CLR types), and automate some common development/debugging tasks. &lt;strong&gt;Source code artefacts are generated and assigned directly to the solution structure&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory &lt;strong&gt;uses recipes to create the work products in the logical architectural model&lt;/strong&gt;, and &lt;strong&gt;recipes to configure the metadata of the work product in the model&lt;/strong&gt;. In this way, the logical architecture of the service is separated and abstracted from the physical implementation of it.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;Some work products of the service are represented in more detail using DSL models, and &lt;strong&gt;recipes are used to configure those models directly&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;The factory also &lt;strong&gt;uses recipes to automate the restructure and renaming of physical artefacts&lt;/strong&gt; representing the work products. For example, renaming a work product will require renaming certain physical artefacts and namespaces.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory &lt;strong&gt;defers and delegates source code generation of the work products to 3&lt;sup&gt;rd&lt;/sup&gt; party pluggable factories&lt;/strong&gt; at designated times in the development lifecycle of the product. The factory itself is responsible for the generation of the solution structure artefact containers (solution folders, projects), and the &lt;strong&gt;assignment of generated source code artefacts&lt;/strong&gt; (from 3&lt;sup&gt;rd&lt;/sup&gt; parties) to these artefact containers. This process is managed through the factory runtime. &lt;/font&gt; &lt;h3&gt;Models, State and Process&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;In Service Factory, &lt;strong&gt;the source code is the 'model' of the service (albeit a 'weak' model)&lt;/strong&gt;. When creating the work products of the service (data contracts, service interfaces etc.), a recipe is invoked from the physical solution structure (solution folder, project in Solution Explorer) according to the assigned responsibilities of that folder or project. (See previous sections). &lt;strong&gt;The wizard alone provides the abstraction of, and the configuration for the 'work product'&lt;/strong&gt; (although &lt;strong&gt;there is no formal concept of a 'work product'&lt;/strong&gt; in Service Factory per se). Once the wizard is completed by the factory user, it generates the required artefacts straight into the current solution folder or project. &lt;/font&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478605/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478605/secondarythumb.aspx"&gt;&lt;/a&gt;  &lt;p&gt;&lt;font color="#004080"&gt;&lt;strong&gt;There is no ‘state’ of the service expressed anywhere -&amp;nbsp;except in the source code of the service&lt;/strong&gt;. The factory (not surprisingly)&amp;nbsp;provides no round-tripping or reverse-engineering of the source code, so &lt;strong&gt;there is no way to view this 'state' at a simplified&amp;nbsp;(abstract) high-level&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#004080"&gt;As there is no state, and the recipes are keyed from the assigned responsibilities on an solution artefact (project or solution folder), &lt;strong&gt;it's difficult to determine what activities have been performed, and what needs to be done to complete a service&lt;/strong&gt;. The &lt;strong&gt;user must be aware of (or will have to discover by right-click trial and error)&amp;nbsp;which&amp;nbsp;recipes&amp;nbsp;are assigned to which&amp;nbsp;solution folders or projects.&amp;nbsp;&lt;/strong&gt;Furthermore, they &lt;strong&gt;must be very familiar with the process of how to complete a service&lt;/strong&gt; and in &lt;strong&gt;which order they have to execute these recipes&lt;/strong&gt; to complete&amp;nbsp;the service. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;&lt;strong&gt;Furthermore, the user&amp;nbsp;must know at what stage of the overall process they are in&lt;/strong&gt;, as this is not depicted anywhere. This is problematic when development of the service is shared between team members. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;If the user&amp;nbsp;needs to change something about the service&amp;nbsp;that was generated by the recipes before, they either must re-run the recipe, and &lt;strong&gt;recall how they configured the recipe previously&lt;/strong&gt; beforehand. The recipe will&amp;nbsp;overwrite any customization to the generated code (if any) although the user is warned of this. Or alternatively, rather than re-run the recipe and recall all the settings used previously (usually in the case of a small change), the user can &lt;strong&gt;modify the generated source code by hand to make their change&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory &lt;strong&gt;does provide additional &lt;em&gt;Code Snippets&lt;/em&gt; to create the most common artefacts&lt;/strong&gt;. However, these last options are the realm only of technology domain experts, and the benefits of automation that the recipes provided is really lost.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory &lt;strong&gt;provides (and persists)&amp;nbsp;a model of the entire&amp;nbsp;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&lt;strong&gt;product&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&lt;strong&gt; (service) and all its work product instances.&lt;/strong&gt; The product is managed in the &lt;font color="#804000"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677147/original.aspx"&gt;&lt;strong&gt;Product Explorer&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;view&lt;/font&gt;.&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478608/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478608/secondarythumb.aspx"&gt;&lt;/a&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The &lt;strong&gt;primary work products have graphical DSL designers&lt;/strong&gt; in which their architecture is defined. &amp;nbsp;Recipes are used to configure these models. Because of this visual abstraction, the user (and his teammates)&amp;nbsp;can more easily visualise what state the service is in and what steps needs to be taken to complete the service. (This is aided by validation, discussed later).&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx" atomicselection="true"&gt;&lt;font color="#804000"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/677134/secondarythumb.aspx"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#804000"&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;To create or modify work product instances, &lt;strong&gt;recipes are invoked from the models themselves&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;.&amp;nbsp;&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The &lt;strong&gt;models provide the appropriate abstraction of the components of the service&lt;/strong&gt;, its' variability points, &lt;strong&gt;and the state of the product and work product instances&lt;/strong&gt;. The recipe wizards reflect this state when they are run, and &lt;strong&gt;instead of generating code directly, these recipes act upon the work products and product model itself&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;To &lt;strong&gt;enhance the usability, and increase the productivity&amp;nbsp;of using these models, and creating work products, the factory provides a number of specific editors, recipes and wizards to configure these models&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/544743/original.aspx" atomicselection="true"&gt;&lt;font color="#804000"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/544743/secondarythumb.aspx"&gt;&lt;/font&gt;&lt;/a&gt;  &lt;h3&gt;Abstraction &amp;amp; User Level&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;In the Service Factory, because the 'model' of the service is in the source code, source &lt;strong&gt;code is essentially the medium that the factory users must manipulate&lt;/strong&gt; to create, configure and complete their service. This is a &lt;strong&gt;low-level abstraction of the solution domain.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#004080"&gt;&lt;font color="#004080"&gt;All &lt;strong&gt;manipulation of the service is done via the 'Solution Explorer' view&lt;/strong&gt;,&amp;nbsp;which is the detailed physical view of the solution, (and best suited to display the deployment of the solution, not it's logical architecture). As long as this is the working view, the level of abstraction will always be at the source code level.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#004080"&gt;&lt;strong&gt;As there is no state of the service, and no state of the process to completing the service, the factory user will always have to be a 'developer' class user&lt;/strong&gt; familiar with the the overall process of constructing a service from the current state of the source code (as a whole).&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#004080"&gt;&lt;font color="#004080"&gt;In most cases, &lt;strong&gt;to modify or enhance this 'model' this developer will require expert domain knowledge and experience of the technologies&lt;/strong&gt; implemented by the factory.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#004080"&gt;The&lt;strong&gt; 'Guidance Explorer' does help provide a list of steps to complete certain processes&lt;/strong&gt;, (and a log of the recipes executed previously), but it &lt;strong&gt;still does not provide a clear, reliable picture of where in the process the developer is&lt;/strong&gt; and what needs to be done next.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;In the EFx Factory,&lt;strong&gt; the model of the service is visualised in &lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx"&gt;DSLs&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&lt;strong&gt; and in the &lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677147/original.aspx"&gt;Product Explorer&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;. The model offers &lt;strong&gt;high-level abstraction of the web service architecture and patterns&lt;/strong&gt;, and holds the current state of the service. Furthermore, these models do not depend on any technology. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;To change the service the user simply uses the visual abstractions (models, explorers) used to view the models.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;The factory &lt;strong&gt;user can be any technical user that is familiar with the patterns and architecture&amp;nbsp;used by&amp;nbsp;these abstractions&lt;/strong&gt;. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;The user &lt;strong&gt;can create the specification of a service without ever having to have any detailed experience of the technologies used to implement it.&lt;/strong&gt; However, &lt;strong&gt;eventually, a technology domain expert will be required to apply and optimize the various technologies&lt;/strong&gt; at some stage, but &lt;strong&gt;this activity can be deferred&lt;/strong&gt; till later in the lifecycle of the product.&lt;/font&gt;&lt;/p&gt; &lt;h3&gt;Designer Integration&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory &lt;strong&gt;does not leverage existing models or facilitate high-level top-down development of services&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory &lt;strong&gt;integrates and extends the &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms379582(VS.80).aspx"&gt;Distributed Application and Systems designers of Visual Studio&lt;/a&gt;&lt;/strong&gt; (&lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718804.aspx"&gt;Team Architect Edition&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&amp;nbsp;if installed). The factory provides additional shapes to represent the implementation of a service, and &lt;strong&gt;enables implementation of the service straight from these diagrams using the project templates provided by the factory&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677127/original.aspx" atomicselection="true"&gt;&lt;font color="#804000"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/677127/secondarythumb.aspx"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#804000"&gt; &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;From the &lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms379582(VS.80).aspx"&gt;Distributed System Designer&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt;, the EFx Factory &lt;strong&gt;allows the user to drill into theses shapes to expose its' internal specification&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx" atomicselection="true"&gt;&lt;font color="#804000"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/677134/secondarythumb.aspx"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#804000"&gt; &lt;/font&gt; &lt;h3&gt;Validation &amp;amp; Completeness&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;In the Service Factory, since a weak 'model' of the web service is effectively defined in source code artefacts themselves, Service Factory &lt;strong&gt;can do little (apart from depending on the language compiler) to validate whether the web service source code artefacts have been created at all, in the right order, correctly or completely to form a valid and complete web service.&lt;/strong&gt; Although, in principal&amp;nbsp;it's possible to create recipes to perform this kind of validation at a course grain level. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;The WCF guidance package does add FxCop code analysis rules that help verify the completeness of some WCF related code.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory has a comprehensive model of the service as a whole and the individual work products. The factory &lt;strong&gt;performs comprehensive validation of this model before any source artefacts are generated from it&lt;/strong&gt;. In fact, this validation is a prerequisite to generation of source artefacts. The factory &lt;strong&gt;prevents the user from making invalid architectural configurations&lt;/strong&gt;, and &lt;strong&gt;ensures the work products are configured correctly and completely&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;This &lt;strong&gt;validation&lt;/strong&gt; &lt;strong&gt;guides the factory user in pre-empting the tasks required to complete the service.&lt;/strong&gt;&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;Architectural ‘concerns’ (cross-cutting concerns) for each layer in the architecture are defined in the model and enforced through validation&lt;/strong&gt;, ensuring that these concerns are addressed appropriately, and the service complies to these enterprise-level concerns.&lt;/font&gt;  &lt;h3&gt;Architectural Coverage&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory guidance packages provide automated guidance assets (recipes, templates etc) &lt;strong&gt;for the generation of the Service Interface and Data Access Layers of a service&lt;/strong&gt;. It &lt;strong&gt;addresses the middle layer Business Logic implementation and wiring up of the Service Interface&amp;nbsp;and Data Access layers through written guidance&lt;/strong&gt;, and customization of the source code. The Service Factory provides no guidance about architectural concerns of these middle layers, although there is plenty of written guidance available elsewhere on this.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx factory provides &lt;strong&gt;a comprehensive architectural model of the entire service end-to-end&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx" atomicselection="true"&gt;&lt;font color="#804000"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/677134/secondarythumb.aspx"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#804000"&gt; &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;The EFX factory &lt;strong&gt;models all the architectural layers, and their individual cross-cutting concerns (like: Authorization, Exception Management, Logging etc) at all layers in the architecture&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;The &lt;strong&gt;models define the interaction between the components (method mapping &amp;amp; entity mapping) in the layers&lt;/strong&gt;. The wiring up of the Service Interface to the Business Logic Components is automatic.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;Since Business Logic implementation is difficult to model (too many technology patterns and strategies). The factory instead &lt;strong&gt;offers a pluggable technology strategy&lt;/strong&gt; to implement this layer.&amp;nbsp;This strategy then wires up the business logic components to the data access layers. Common strategies are: custom coding, sequence diagrams and workflow activity diagrams, each of which is provided by a 3rd party factory that can use any pattern or technology to model this layer.&lt;/font&gt;&amp;nbsp;  &lt;h3&gt;Service Implementation Technologies&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory &lt;strong&gt;comes in two technology flavours for the service interface- WCF or ASMX&lt;/strong&gt;, and one flavour for the Data Mapping - SQL. In order to create a 'specification' of a service, &lt;strong&gt;you must make a technology choice before using the factory&lt;/strong&gt;. Once that choice is made, you are tied into that technology implementation – it is very difficult to change that technology decision later - and you'll need to start from scratch again. There is &lt;strong&gt;no de-coupling of technology implementation from architecture of the service&lt;/strong&gt; – so &lt;strong&gt;you can’t create a design and specification of your service without first choosing a technology.&lt;/strong&gt;&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFX Factory &lt;strong&gt;separates the architectural&amp;nbsp;specification of the service from the technology&lt;/strong&gt; used to implement it - &lt;strong&gt;using a &lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;&lt;font color="#804000"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx"&gt;technology-independent model&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font color="#804000"&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;By providing these technology-independent models of the service's internal&amp;nbsp;architecture, and a rich extensibility mechanism for other factories to plug into this factory, the EFx Factory &lt;strong&gt;enables the layers of the service to be implemented by any technology&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;Furthermore, &lt;strong&gt;there are &lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&lt;strong&gt;several layers in the architecture that can be extended&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;, primarily: Service Contract Implementation, Business Logic Strategy and Data Mapping Implementation. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/544666/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/544666/secondarythumb.aspx"&gt;&lt;/a&gt; &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;In each of these cases, &lt;strong&gt;a 3&lt;sup&gt;rd&lt;/sup&gt; party software factory specialising in a particular technology and architectural layer, can plug into the EFx Factory&lt;/strong&gt; and implement that layer. They do this in a number of ways: &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;&lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;&lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#804000"&gt;Enhancing the technology-independent model views with &lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677135/original.aspx"&gt;technology specific implementation metadata&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt;, commands and UI cues. &lt;/font&gt; &lt;li&gt;&lt;font color="#804000"&gt;Providing separate technology specific views when that technology addresses work products not present in technology-independent view, or when the technology is best presented in a different view from that provided by the factory. &lt;/font&gt; &lt;li&gt;&lt;font color="#804000"&gt;Providing technology specific implementation of the layer.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory, through technology separation and this extensibility mechanism, &lt;strong&gt;promotes 3&lt;sup&gt;rd&lt;/sup&gt; party domain experts to produce the authoritative abstractions and implementations&lt;/strong&gt; of specific technologies of these layers&amp;nbsp;for re-use. These implementations, themselves software factories, will then address and promote a standardised model of these layers. &lt;/font&gt;&lt;strong&gt;&lt;font color="#804000"&gt;This then promotes re-use of these&amp;nbsp;software factories&amp;nbsp;in other similar architectures of other software factories.&lt;/font&gt;&lt;/strong&gt;  &lt;h3&gt;Composability &amp;amp; Re-use&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;In Service Factory, the &lt;strong&gt;recipes to create the structure of a service are based upon a specific technology&lt;/strong&gt;. Because of the lack of a 'model' and separation between the service specification and the technology implementation of that service, the &lt;strong&gt;recipes are bound to a specific physical implementation which they create&lt;/strong&gt; – they assume certain source artefacts (CLR types)&amp;nbsp;in a certain structure. This &lt;strong&gt;makes the assets and recipes very hard to re-use in other factories with different physical implementations&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory &lt;strong&gt;separates the model of the service from the implementation of it&lt;/strong&gt;. The implementation is &lt;strong&gt;provided by 3&lt;sup&gt;rd&lt;/sup&gt; party factories based upon the logical architecture of a service layer&lt;/strong&gt;. When these 3&lt;sup&gt;rd&lt;/sup&gt; party factories create physical artefacts for the layer, (specific to their technology), they don’t populate the physical solution structure directly, since they have no coupling to or knowledge of that. Instead, &lt;strong&gt;they pass the artefacts to the factory, and the factory, through its physical&amp;lt;-&amp;gt;logical mapping determines which physical artefact container (solution folder, project) these artefacts will be assigned to&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;Since the 3&lt;sup&gt;rd&lt;/sup&gt; party factories are only bound to a logical architecture, they &lt;strong&gt;can be re-used by other factories sharing the same logical architecture&lt;/strong&gt;. This means that other factories can be composed using these factories.&lt;/font&gt;  &lt;h3&gt;Availability &amp;amp; Support&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480534.aspx"&gt;Service Factory&lt;/a&gt;&lt;/font&gt;&lt;font color="#004080"&gt; is a &lt;strong&gt;freely available, released, documented, tested and supported deliverable from the patterns &amp;amp; practices&lt;/strong&gt; team. It will &lt;strong&gt;continue to evolve as the .NET platform and emerging software factory platform evolves&lt;/strong&gt;. This deliverable &lt;strong&gt;will continue to receive support from the patterns &amp;amp; practices team, and the development community as a whole&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;EFx Factory is &lt;strong&gt;not finished and is not released to the general public&lt;/strong&gt;. It was prototyped internally at Microsoft, but has not received the necessary development, testing, documentation resources and support to move forward as a releasable deliverable.&lt;/font&gt;  &lt;h2&gt;Summary&lt;/h2&gt; &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory represents the first generation of software factories from Microsoft, which has made a significant step towards the creation and automation of web services.&lt;/font&gt;  &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory is primarily focused upon the automation of web service implementations and patterns for specific technologies, using a wizard-based code generation process. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;Its' very valuable guidance assets provide the best patterns and guidance for implementing web services and managing their lifecycle and operation.&amp;nbsp;&lt;/font&gt;  &lt;p&gt;&lt;font color="#004080"&gt;This factory is available and supported&amp;nbsp;publicly today, and is successfully being used by many of our customers in production to help them build web services more rapidly today.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory represents a prototype of a new generation of software factories within Microsoft, which has pioneered many of the concepts representative of future software factories from Microsoft tomorrow.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory is primarily focused upon logical architectural design, designer integration, automation, usability and architectural re-use and composability. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;It provides a managed automated environment that uses and leverages many abstractions, models and extensibility mechanisms&amp;nbsp;to present an end-to-end&amp;nbsp;logical architectural view of a product,&amp;nbsp;enhancing that with a rich design experience for&amp;nbsp;the&amp;nbsp;user. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;It has no dependence on technology. Instead, it&amp;nbsp;provides architectural-based technology-independent models that can be extended&amp;nbsp;by custom technology-specific providers, promoting re-use and innovation in the community.&amp;nbsp;&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;In turn, the core factory and the technology-specific providers can be re-used and packaged up to compose other factories to solve specific solution domains. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;This factory is not publicly available and remains an unfinished prototype.&lt;/font&gt;  &lt;h2&gt;Moving Forward&lt;/h2&gt; &lt;p&gt;Despite the significant advantages, and advancements that the EFx Factory offers in automating the assembly of service oriented client applications and services, Service Factory (and &lt;a href="http://www.codeplex.com/wiki/view.aspx?projectname=websf"&gt;Web Client Factory&lt;/a&gt;), because of their availability, support, resource investments&amp;nbsp;and ongoing development will remain the premier software factories available to Microsoft Enterprise partners and customers moving forward in this space.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1076364" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Web+Services+Software+Factory/default.aspx">Web Services Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Factory+FAQ/default.aspx">Factory FAQ</category></item><item><title>FAQ - Where are my skills going to be required with Software Factories?</title><link>http://blogs.msdn.com/jezzsa/archive/2007/01/04/faq-where-are-my-skills-going-to-be-required-with-factories.aspx</link><pubDate>Thu, 04 Jan 2007 01:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1331363</guid><dc:creator>jezzsa</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/1331363.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=1331363</wfw:commentRss><description>&lt;p&gt;In a &lt;a href="http://blogs.msdn.com/jezzsa/archive/2006/12/11/faq-why-do-i-need-software-factories.aspx" mce_href="http://blogs.msdn.com/jezzsa/archive/2006/12/11/faq-why-do-i-need-software-factories.aspx"&gt;previous FAQ&lt;/a&gt; we addressed some of the fears that our 'eager-professionals' are likely to have about the introduction of software factories into their projects and organisations. In this post I want to address one of the concerns that&amp;nbsp;the expert solution developers among them and&amp;nbsp;their organisations&amp;nbsp;will face with the advent of software factories. &lt;/p&gt; &lt;p&gt;Some of those fears raise the question of &lt;strong&gt;"where will my expert development skills fit in with solution development with software factories?"&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Specifically, how, adoption of software factories will change aspects of the landscape of software development today, and how that shapes the way we as solution development professionals focus our efforts from the tasks we perform today. In short,&amp;nbsp;how prolific adoption of factories will change the roles of today's developers, and the mix of developer skills in organisations.&lt;/p&gt; &lt;h2&gt;Backgrounder&lt;/h2&gt; &lt;p&gt;An overall objective of the industrialisation, that software factories bring, is to reduce the shear amount of manual labour&amp;nbsp;required to be performed by solution developers (and&amp;nbsp;cost of course) in developing solutions to specific well defined solution domains. I'd also say that just as important -&amp;nbsp;is to reduce the amount of re-work, and increase the amount of re-use of experience (and assets)&amp;nbsp;of others who have already solved those problems thoroughly already.&amp;nbsp;Today there are an inordinate amount of solution developers who re-craft artefacts for already solved solution domains&amp;nbsp;over and over again, and that is handicapping what they can deliver. In order to do this today, developers knowledge and skills are required to span, in depth, many domains in order to piece together whole solutions. Due to practical resource limitations (like time and money) this often results in sub-optimal solutions, either because they don't have the resources,&amp;nbsp;experience or knowledge to do this - which of course means the solution doesn't get&amp;nbsp;whatever the individuals don't have.&lt;/p&gt; &lt;p&gt;OK, I think everyone understands the issues here and where this is going, so let's not harp on too much about it at this stage. Suffice to say, that the introduction of factories should basically relieve a great deal of current expert solution developers from having to possess (and maintain) a great deal of knowledge, experience and skills specific to known solved domains that they build. &lt;/p&gt; &lt;p&gt;So, this begs the question: "if a factory already does a lot of this work for me, what is left for me to do now? How are my current skills relevant anymore?"&lt;/p&gt; &lt;p&gt;&lt;em&gt;[Just to clarify, we are really addressing those solution developers whom today create whole solutions rather than those who are only focused on very specific highly customizable tasks and responsibilities. For example, those who only write business logic rules. Of course, these folks roles and responsibilities probably won't change much with introduction of factories.]&lt;/em&gt;&lt;/p&gt; &lt;h2&gt;Answer&lt;/h2&gt; &lt;p&gt;I think the obvious answer is that the skills are still very relevant and will continue to be, but the role and focus of the individual developers now changes - particularly those who craft large parts of the overall solution. Instead of creating whole solutions (or parts of them) repeatedly, certain developers are going to have to focus on more profitable tasks in a software factory product value chain. In other words, some developers are going to build solutions using factories and some are going to build the factories (and their assets). These two primary roles are going to require a different division of skills, knowledge and experience and ultimately resource than what is done today.&lt;/p&gt; &lt;p&gt;&lt;em&gt;[I believe there might be further secondary roles also, like those for factory customization and those for factory product customization, which may, or may not be the responsibility of the same people in the primary roles. I just wanted to focus on the main roles for now].&lt;/em&gt;&lt;/p&gt; &lt;p&gt;It might be a safe assumption therefore to conclude that once software factories are in wide and extensive use in development organisations we can expect to see a change in the mix of development resources required on mainstream solution development projects.&lt;/p&gt; &lt;p&gt;Whereas we see today most expert solution developers are required to possess expert level knowledge, skills and experience in all domains of a solution, tomorrow we will see that the expert solution developers will be either required to have higher-level development skills using high-level assets and abstractions (models, designers etc), or required to have lower-level programming skills for creating the assets (models and designers). &lt;em&gt;[Lower-level programming skills means the programming skillsets we see in expert developers today. Although, tomorrow they will be relatively more specialised to certain domains than today.]&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Furthermore, we can also expect to see a change in percentage of each group. Whereas we see most solution developers possessing the lower-level programming skills today covering whole solution domains, tomorrow the majority of mainstream solution developers will possess the higher-level development skills to cover the whole domain, leaving fewer (more specialised) lower-level programming skilled developers. Very few bridging this gap. In fact, this gap may just be transitory, and a means to go from mainstream development to specialist programming developers. We can also predict that some organisations will branch out further to either business.&lt;/p&gt; &lt;p&gt;So, to summarise. If you are an experienced&amp;nbsp;mainstream solution developer today, chances are you are required to be an expert in many of the domains of the solutions you build. Of course, few can say they are the top enough experts in all the required domains of their solutions, but most (due to market pressures, and resource constraints) have to deliver on all those domains. &lt;/p&gt; &lt;p&gt;Tomorrow, when factories are prolific, you will have a choice, of either &lt;em&gt;'keeping your hand in the game'&lt;/em&gt; and &lt;strong&gt;specialising&lt;/strong&gt; more in many fewer of these domains and create/customize re-usable assets that are likely to find they way into the factories to build solutions, &lt;u&gt;or&lt;/u&gt; &lt;strong&gt;generalising&lt;/strong&gt;&amp;nbsp;more (at a higher-level of abstraction) and assembling the solutions using factories. As an entrant novice into the development market, the chances are you'll enter as the latter and through experience, or by organisation necessity (or perhaps passion, or other pressure), work your way into specialisation.&lt;/p&gt; &lt;p&gt;Like it or not, customers and the market will ultimately determine the required balance of skills, and organisations will have to adapt to be able to deliver on the market demand. One thing is for sure, once factories have proven their value in productivity, quality&amp;nbsp;and cost savings, those organisations who still hand-craft solutions as inefficiently and of variable quality as they do today for mainstream markets, will certainly be mainstream no longer, and will be forced to move towards boutique software solutions to be profitable.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1331363" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Development+Truths/default.aspx">Software Development Truths</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Factory+FAQ/default.aspx">Factory FAQ</category></item><item><title>FAQ - Why do I need Software Factories?</title><link>http://blogs.msdn.com/jezzsa/archive/2006/12/11/faq-why-do-i-need-software-factories.aspx</link><pubDate>Mon, 11 Dec 2006 11:18:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1257358</guid><dc:creator>jezzsa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/1257358.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=1257358</wfw:commentRss><description>&lt;p mce_keep="true"&gt;OK, so first off I want to address the more personal, individual&amp;nbsp;aspect of this question, rather than the more broader industry angle - which can be found&amp;nbsp;in many&amp;nbsp;other references online and offline (books, articles and the like). These other references describe in detail&amp;nbsp;the drivers for software factories, and why we as an industry need them to industrialise software development. But that's &lt;u&gt;not&lt;/u&gt; what we are going to explore here.&lt;/p&gt; &lt;p&gt;Instead, I want to tackle the personal view points of the folks perceived to be at the 'pointy end' of this proposition - the developers. It is the developers (the authors, and users of the factories) who ultimately decide the fate of factories, because factories become their new 'tools' to get part of their jobs done. It should be no surprise to anyone, that this won't happen if they (our &lt;a href="http://blogs.msdn.com/jezzsa/archive/2006/02/09/the-vicious-software-development-cycle-part-ii.aspx"&gt;'project saviours'&lt;/a&gt;) don't want to use the tools.&lt;/p&gt; &lt;p&gt;I want to explore the reasons, (during this evolutionary period of software factories), why some of our software professionals, particularly the &lt;strong&gt;'eager-professional' &lt;/strong&gt;developers, may find factories hard to embrace. I want to explore what lurks behind that, where that cynicism and fear&amp;nbsp;comes from and why.&lt;/p&gt; &lt;p&gt;&lt;em&gt;[I define what I mean by 'eager-professional' developer later on in this post. &lt;/em&gt;&lt;em&gt;If anyone has&amp;nbsp;a reference to developer behaviour profiles I can leverage instead, please comment - I'd like to accurately and precisely get to the right term for the behaviour and circumstances&amp;nbsp;I am trying to convey here.]&lt;/em&gt;&lt;/p&gt; &lt;p&gt;This has got to be the most controversial question to answer, since:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;We are dealing with individual emotions, opinions, perceptions, experiences of the folk who find themselves in circumstances not favourable for this type of new automation. So, I am expecting that not everyone will see eye-to-eye on this. I merely offer observations from this moment in time, in a new evolving and fluid marketplace.  &lt;li&gt;We are also dealing with essentially &lt;a href="http://en.wikipedia.org/wiki/Disruptive_technology" mce_href="http://en.wikipedia.org/wiki/Disruptive_technology"&gt;disruptive technologies&lt;/a&gt; to replace well-established technologies&amp;nbsp;and tools in an existing marketplace, and therefore this new technology requires (demands) a new approach, with new optimism and newer goals than have been previously defined. &lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Answer&lt;/h2&gt; &lt;p&gt;What we face, with factories, is a departure from established development attitudes, behaviours and approaches towards a vision that has previously failed to deliver - sometimes more than once (in some people's professional careers). We are bound to face resistance and scepticism from the purists, the development empires, and individual kingdoms set up in development&amp;nbsp;establishments, from the persons who have established livelihoods and comfort zones out of developing software the inefficient, unaffordable,&amp;nbsp;one-off, 'artistic' way it's done today. It's a natural reaction to change, and its healthy, since it qualifies exactly what, and whether, factories can actually invoke and achieve industrialisation of software development in the future.&lt;/p&gt; &lt;p&gt;Now -&amp;nbsp;let me scope this back. What I want to focus on is here is how a certain group of developers today feel about this impending change - the &lt;strong&gt;'eager-professionals'&lt;/strong&gt;. What some of the opinions are of these groups, and why they (quite rightly) are sceptical and downright passionately adverse to what could be perceived as a god-send to others in the profession. &lt;/p&gt; &lt;p&gt;I define &lt;strong&gt;'eager-professionals'&lt;/strong&gt; as those professional developers who are typically, but not always, less experienced&amp;nbsp;in small companies or more specialised in larger companies. The eager professional feels the need to prove his worth by displaying his prowess at the art of software development. Since the eager professional is driven to prove himself, he tends to compete with other eager professionals in what they perceive is the most&amp;nbsp;important&amp;nbsp;skill - hand writing the best code possible. The eager professional focuses on solving individual problems, and solving them&amp;nbsp;in the most elegant and most efficient possible way, and evolving that in every iteration. That’s a very valuable and necessary set of skills in any development project. However,&amp;nbsp;excelling at these skills puts a lot of self-emphasis&amp;nbsp;(over emphasis perhaps) on their own unique&amp;nbsp;knowledge, their understanding of that knowledge, and the value of that knowledge, as well as the tools they&amp;nbsp;wield - their programming languages. The eager professional considers his freedom to choose his tools and techniques to be absolutely necessary. Otherwise, creativity and innovation will be stifled and the solution will be sub-optimal.&amp;nbsp;For this reason&amp;nbsp;the eager professional strongly resists any perceived threat to his freedom to apply his tools, knowledge&amp;nbsp;and techniques as he sees fit. The 'eager professional' has an ardent distrust&amp;nbsp;for other development professional's contributions brought to bear on, or mix with, their own.&amp;nbsp;It is therefore quite easy to predict that software factories will present a perceived threat and - specifically to this group of developers - evoke strong resistance, stifling widespread adoption - for a number of reasons we will dig into later on.  &lt;p&gt;There are other groups of individuals of interest in this context too that we may touch upon.&amp;nbsp;Such as:&lt;/p&gt; &lt;p&gt;&lt;em&gt;[BTW: I am not attempting to profile all developers here, just the ones I feel will have particular resistance to software factories in this context]&lt;/em&gt;&lt;/p&gt; &lt;p&gt;The risk-adverse &lt;strong&gt;'mature-professionals'&lt;/strong&gt; who have fought and bore the brunt of past failed software revolutions, some they pioneered themselves, who are naturally sceptical. But I believe, it’s the mature-professionals who are ultimately more open and optimistic to change - albeit, super-cautious about it. They are quietly, positively waiting for it to succeed in a big way,&amp;nbsp;so it can vanquish earlier failed attempts, some of which they championed. In fact, would argue that it will be these professionals who in fact make it happen or not, since they see a more maturer&amp;nbsp;picture of the strategic direction of their groups.&lt;/p&gt; &lt;p&gt;Then there are the &lt;strong&gt;'purists'&lt;/strong&gt; whom are chartered with unraveling and championing&amp;nbsp;the essence of what lies at the core of software development. They are naturally adverse to this kind of change and automation because its perceived&amp;nbsp;to&amp;nbsp;understate the pure art or source of development to which they dedicate their passion and theoretical studies. They will probably, not for a long time, embrace &lt;em&gt;'such a generic&amp;nbsp;mongrel&lt;/em&gt;, and they will scoff&amp;nbsp;at this perceived de-throning of their highly&amp;nbsp;insightful knowledge as being of&amp;nbsp;primary importance to the mass software development audience.Those that follow the purists religiously will also share the same opinions.&lt;/p&gt; &lt;p&gt;Then, there's an interesting group of very ordinary professional developers, I am calling the &lt;strong&gt;'apathetic-practitioners'&lt;/strong&gt;. In my experience, by far the largest group presently. These are the guys who don't necessarily tout any techno-religions, who are not driven to excel or be creative, who work together to&amp;nbsp;just do&amp;nbsp;their job and return to real-life at the end of the day. Their opinions (and pain) are based on what works and what doesn't - they vote with their feet. They are not paid, nurtured, incented or given latitude to care about the best way to do their jobs, or what the latest techno-trends are, or who the demi-gods of software development are. They don't participate in the raging forums, attend the latest tech-events, read the cool-blogs and techno-sites, or immerse in the best practices. They just want to get the job done because of the circumstances they are in. They find a way to do it, and if it works, they stick with it. As a result,&amp;nbsp;these guys bear the brunt and pain of all past failures and attempts of the other more eager groups and the pioneering attempts of the industry to make life easier for them. They of course, by necessity, will always find the easiest path through the mazes and mine fields presented to them. They couldn't care less if it fails,&amp;nbsp;they would just again raise their eyes to the roof, tut to themselves, and work around it. But if it succeeds, then they are fully onboard. Because it's for these people, collectively in the masses, where it would have the most significant impact on everyday work, and therefore sizable benefits for their businesses, their markets and the industries they work in.&lt;/p&gt; &lt;h3&gt;Why the fear?&lt;/h3&gt; &lt;p mce_keep="true"&gt;Now that we have roughly categorised our developers into behaviour profiles based upon their circumstances, we can start to analyse the reasons why software factories will meet initial resistance as they emerge into the existing marketplace.&lt;/p&gt; &lt;p mce_keep="true"&gt;Most of the objections and resistance we will face (particularly for the 'eager-professionals'), from the introduction and use of software factories, will be from fear of what factories will mean to the individuals themselves, rather than having any technical basis. (and boy are we good in this business at de-bunking ideas based on a marginal technical bases!!). That is not to say that factories are the applicable silver bullet for all developers in all situations, certainly not.&amp;nbsp;Quite the opposite, it is a narrow band of software solution domains&amp;nbsp;that factories apply to, but even in the cases where factories make perfect sense, these threats are perceived as encroaching insidiously on the individuals&amp;nbsp;purpose, usefulness and status.&lt;/p&gt; &lt;p mce_keep="true"&gt;What I have noticed from my own experiences as a professional developer and from evangelising software factories to developer professionals in the field, is that there are several ways for dealing with fear from these types of perceived 'techo-threats'. For some, denial is a safe and&amp;nbsp;comfortable place to hide. For others it's dis-association. Many others just 'pick the battles' worth fighting. Now, I am no psychoanalyst or professor of human behaviour, but what I have noticed, is that a common way to get over these types of fears - if you decide to confront them, and come out positively on top -&amp;nbsp;is to understand what drives the fears in yourself and then question the basis of that fear within. That all starts with recognising the fear of course, and what threats drive it &lt;em&gt;in you&lt;/em&gt;.&lt;/p&gt; &lt;p mce_keep="true"&gt;I predict that if those who fear software factories were to &lt;em&gt;'look inside themselves'&lt;/em&gt; and identify what threats that fear is based upon, and then rationalise that, they too would come out on top of it. Hopefully then, they would&amp;nbsp;view software factories for what they really are, their value and the benefits they bring many in the circumstances they were designed for, rather than a wholesale threat to their individual status. &lt;/p&gt; &lt;p mce_keep="true"&gt;This last point is leading to a new discussion about how a future of software factories may change individual status and the mix of developer skills in any given organisation. The required skill sets, the expectations put upon them, the types of creativity and design skills they will need to exercise and the impact that will bring to the end customers. I'll address this in a subsequent post called: &lt;a href="http://blogs.msdn.com/jezzsa/archive/2006/12/20/faq-where-are-my-skills-going-to-be-required-with-factories.aspx"&gt;'FAQ - Where are my skills going to be required with factories?'&lt;/a&gt;&amp;nbsp;(coming a little later on) but I do touch on some of it below.&lt;/p&gt; &lt;h3&gt;What are the threats?&lt;/h3&gt; &lt;p mce_keep="true"&gt;So, finally. Lets have a look at some of the perceived threats to these individuals, primarily from the point of view of our &lt;strong&gt;'eager-professionals'&lt;/strong&gt; who see themselves as expert professionals. Let's have a look at what's concerns the individuals and how that concern is actually a benefit of factories. &lt;/p&gt; &lt;p mce_keep="true"&gt;These threats are primarily aimed at those expert professionals who create solutions by hand today. Although most are related, I have tried to tease out the differentiators.&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;em&gt;[BTW: This list is obviously not exhaustive. I fully expect others will have identified other threats through their own experiences, which I would encourage you to share in the same format.]&lt;/em&gt;&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Concern:&lt;/strong&gt; 'Lowers the bar' required to create software solutions. ('Open the country club to the riff-raff').&lt;/p&gt; &lt;blockquote&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Description:&lt;/strong&gt; With factories, it might appear that novice or undisciplined, even cowboy&amp;nbsp;developers now have the power to wield a 'powertool' such as a factory&amp;nbsp;to do the same job as a 'hard core' expert professional developer would do. This is a similar perception many C/C++ developers had when VB developers became mainstream. This leaves the impression with the experts that the art of software development will be lost (or depreciated)&amp;nbsp;through the abuse and misuse of the 'tools' (in this case -&amp;nbsp;the programming languages). The expert developers are concerned that the markets&amp;nbsp;will appreciate mediocre quality, and cheap solutions rather than precision engineered, aesthetically&amp;nbsp;designed and quality products. &lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Fear&lt;/strong&gt;: Depreciation of deep technical understanding, principals, techniques and materials required to coalesce into quality solutions. Fear of technological change.&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Benefit&lt;/strong&gt;: Allows the organisation creating the product (using the factory) to focus upon business requirements implementation and logical design rather than technical implementation details.&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Solace:&lt;/strong&gt; The factory assets will be built by the expert professionals with the deep technical knowledge to encapsulate the&amp;nbsp;principals and techniques&amp;nbsp;for creating a specific solution for a given set of requirements. Therefore, there is little loss of quality or precision engineering of the solution. Unlike the introduction of high-level &lt;em&gt;generic&lt;/em&gt; programming languages such as VB, which made creating whole applications much quicker and easier (RAD), software factories are a much more &lt;em&gt;specific&lt;/em&gt; tools confined to well defined, managed environments to operate within. The potential for widespread poor use and abuse is greatly reduced since the factory (through&amp;nbsp;the factory&amp;nbsp;schema) defines precisely how the product is to be built, its bounds&amp;nbsp;and the variability&amp;nbsp;of the product and its pieces.&amp;nbsp; &lt;/p&gt;&lt;/blockquote&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Concern: &lt;/strong&gt;Can a tool really&amp;nbsp;do the job of a expert software professional today? &lt;/p&gt; &lt;blockquote&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Description:&lt;/strong&gt; Introducing a tool which can automate the creation of source code for whole or&amp;nbsp;part of a complex solution (rather than just discrete components)&amp;nbsp;appears to an expert developer as means for less skilled developers to do &lt;em&gt;their &lt;/em&gt;job - as good, if not better than them. This of course inevitably asks the question &lt;em&gt;"what therefore, is my purpose?&lt;/em&gt;".&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Fear&lt;/strong&gt;: Loss of relevancy, value&amp;nbsp;in the&amp;nbsp;project/organisation- redundancy? &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Benefit&lt;/strong&gt;: Developers with higher level skillset's are empowered to develop the solutions using the factory, more cost effectively. These developers won't be required to possess the highly specialised (and therefore expensive) solution domain expertise to create these solutions in such detail (at such a low level), since that investment has been captured and reused within the factory's assets already created by the expert developers.&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Solace: &lt;/strong&gt;Expert developers skills are still highly valuable, perhaps more so, since the potential scope for re-use is now much greater in a factory rather than in just one-off developments. The pursuit of excellence in low level development skillset's will still be most definitely&amp;nbsp;required. However, the demand for them will no longer be in the bulk of creating well known solution domains that factories address. Instead, expert developers will be &lt;em&gt;required &lt;/em&gt;to create the factories themselves and/or the assets within the factories, as well as the customization of the factories and the refinement of their products. Furthermore, there will always be a requirement for customized one-off solutions in the market place, but whilst they are common today, they will be less common in the future.&lt;/p&gt;&lt;/blockquote&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Concern:&lt;/strong&gt; Can a tool address a whole solution domain? Shouldn't we be hiring more domain experts? (Generalisation vs. Specialisation)&lt;/p&gt; &lt;blockquote&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Description:&lt;/strong&gt; Solutions today are becoming more and more complex addressing more and more solution domains, each requiring&amp;nbsp;more specialised&amp;nbsp;domain specific expertise. Organisations today therefore require&amp;nbsp;possession of&amp;nbsp;these domain expertise to create even the most basic solutions. This is, for most organisations, a mounting challenge. Until recently, few have conceived the idea that a single tool could address a whole solution domain, and therefore take it upon themselves to master most of all the expertise of these domains. However, this has its practical resource limitations, and poorly or over-engineered inferior solutions are re-crafted or cobbled together&amp;nbsp;to make up for the lack of these expertise. The introduction of software factories brings with it a requirement for specialisation and generalisation, and for most expert developers today, re-use of other's domain expertise will be required to be profitable. For the end customer this means higher quality solutions, at lower costs. It will no longer be acceptable in the marketplace to deliver poor quality standard solutions, which implies for most expert solution developers today that being a generalist in an average delivery capacity will no longer be profitable. Factories will require some expert professionals&amp;nbsp;to generalise solution domains, and some expert professionals&amp;nbsp;to specialise in smaller domains. The generalists will define the factories that assemble the assets created by the specialists.&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Fear&lt;/strong&gt;:&amp;nbsp;Becoming a specialist: become more accountable for a more specialised&amp;nbsp;higher quality reusable asset for use in many solutions. Becoming a generalist: move to a higher level (perhaps less-detailed) understanding of particular technology domains, but more focused on bigger picture scenarios.&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Benefit&lt;/strong&gt;: Better products, higher quality, newer markets, and sustainable businesses.&lt;/p&gt;&lt;/blockquote&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Concern:&lt;/strong&gt; Are we to trust this person's implementation (i.e. source code) of our unique problem space? ('Not invented here')&lt;/p&gt; &lt;blockquote&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Description:&lt;/strong&gt; Using factories, to create a products, brings advantages in&amp;nbsp;time-to-market and high-quality which fulfils the customers demands today. These drivers are going to force the software creators to assemble factories from standard assets not necessarily built within their own organisational boundaries. These standard assets are best acquired from the domain specialist organisations&amp;nbsp;that specialise in the best-practices and principals of these domains. For some factories, particularly the first generation factories we see emerging now, this will mean the introduction of assets that create source artefacts - visible, editable&amp;nbsp;source artefacts (as opposed to binary obscured artefacts). Since source artefacts are the focus and domain of most expert professionals&amp;nbsp;today, these assets will be perceived as providing implementation that could have 'just-as-easily been created in-house'.&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Fear&lt;/strong&gt;: That my/our implementation is not good enough, and the other's&amp;nbsp;might be&amp;nbsp;better.&lt;/p&gt;&lt;/blockquote&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Concern:&lt;/strong&gt; Is source code really not the most important artefact anymore?&lt;/p&gt; &lt;blockquote&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Description:&lt;/strong&gt; Today, for most expert professionals, it is the creation and&amp;nbsp;management of source code artefacts which defines their purpose and status within an project. Since the primary first-class artefacts of Model Driven Development (MDD) are models, this may be perceived by most expert developers as being no longer any place to realise their value.&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Fear&lt;/strong&gt;: That my/our speciality, skills and mastery of programming languages are no longer more valuable than the application of them.&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Benefit&lt;/strong&gt;: As factories evolve, developers will certainly focus on higher level artefacts as their tools become more graphical and abstract, as the lower level artefacts are generated as outputs of the factory for verification and compilation. The interfaces for configuring and changing the product of the factory may become more important than the organisation or structure&amp;nbsp;of any source code implementation underlying them. (In much the same way it is with C#/VB over the machine generated byte-code today).&lt;/p&gt; &lt;p mce_keep="true"&gt;&lt;strong&gt;Solace:&lt;/strong&gt; Although source code artefacts and management of them are the focus of most expert professionals today, this may not necessarily be the case or focus for them&amp;nbsp;in the future. The first generation of factories will very much be focused on source code assets to bridge the modelling/automation gap, but in the future it probably won't be the case as we move up to higher level languages and platforms. We may even see in the next generation of factories, models which generate assemblies or other binaries directly, and certainly (even now) factories which generate no source code artefacts at all (no source code, models or otherwise). However, today and for the first generation of factories at least, there will most likely be a requirement for fine tuning or refinement of the factory created products at the source code level. So the requirement for these&amp;nbsp;skills will certainly not dissipate with the advent of software factories.&lt;/p&gt;&lt;/blockquote&gt; &lt;p mce_keep="true"&gt;&lt;em&gt;[Much thanks again to &lt;/em&gt;&lt;a href="http://blog.arrowrock.com/sourceart"&gt;&lt;em&gt;Martin Danner&lt;/em&gt;&lt;/a&gt;&lt;em&gt; for helping me precisely articulate some profiles&amp;nbsp;and Kimmo Forss for some very good idioms for my concerns.]&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1257358" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Development+Truths/default.aspx">Software Development Truths</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Factory+FAQ/default.aspx">Factory FAQ</category></item><item><title>FAQ - Isn't that MDA?</title><link>http://blogs.msdn.com/jezzsa/archive/2006/11/30/faq-isn-t-that-mda.aspx</link><pubDate>Thu, 30 Nov 2006 19:01:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1178601</guid><dc:creator>jezzsa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/1178601.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=1178601</wfw:commentRss><description>&lt;p&gt;Considering the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/EFxAGSftFtr.asp" mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/EFxAGSftFtr.asp"&gt;EFx Factory&lt;/a&gt; and its core composability features with extensible technology-independent models, a few astute people soon get around to asking the following question:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Isn't the EFx Factory just another implementation of MDA?&lt;/strong&gt;&lt;/p&gt; &lt;h2&gt;Backgrounder&lt;/h2&gt; &lt;p&gt;&lt;a href="http://www.omg.org/mda/" mce_href="http://www.omg.org/mda/"&gt;Model Driven Architecture&lt;/a&gt;® (MDA) is a methodology created by &lt;a href="http://www.omg.org/" mce_href="http://www.omg.org"&gt;Object Management Group&lt;/a&gt; (OMG). Their definition of MDA can be found from their &lt;a href="http://www.omg.org/mda/faq_mda.htm" mce_href="http://www.omg.org/mda/faq_mda.htm"&gt;FAQ page&lt;/a&gt;. (excerpt below)&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;"The MDA is a new way of developing applications and writing specifications, based on a platform-independent model (PIM) of the application or specification's business functionality and behavior. A complete MDA specification consists of a definitive platform-independent base model, plus one or more platform-specific models (PSM) and sets of interface definitions, each describing how the base model is implemented on a different middleware platform. A complete MDA application consists of a definitive PIM, plus one or more PSMs and complete implementations, one on each platform that the application developer decides to support."&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;There is also a good wikipedia definition &lt;a href="http://en.wikipedia.org/wiki/Model-driven_architecture" mce_href="http://en.wikipedia.org/wiki/Model-driven_architecture"&gt;here&lt;/a&gt;, with more references to other sources.&lt;/p&gt; &lt;p&gt;The EFx factory defines architectural based models (such as &lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx" mce_href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx"&gt;the one here&lt;/a&gt;)&amp;nbsp;for parts of its product model. These are based upon common architectural implementation patterns (such as SOA contract patterns and the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/distapp.asp"&gt;.NET distributed architecture&lt;/a&gt;). These models define views which are technology-independent abstractions of an underlying architectural framework that actually helps implement the products of the factory.&amp;nbsp;The underlying framework itself,&amp;nbsp;defines abstractions of the .NET framework class libraries and Enterprise Library.&lt;/p&gt; &lt;p&gt;The factory has been designed to define 'base models' of the internal architecture of applications and services -&amp;nbsp;called 'specifications' which have no dependency on a particular technology or implementation pattern. The technologies that are used to implement the specifications are provided by other software factories that are plugged into these base models to allow extended technology-specific models, abstractions, patterns, meta-data and artefact generation from other factories suited to this architecture. This means that the technology-independent models can be specialised towards a specific technology or technology strategy. This approach&amp;nbsp;prefers an extensible technology implementation to a prescriptive technology implementation. &lt;/p&gt; &lt;p&gt;In effect, the models and abstractions that the EFx Factory exposes, defines a technology agnostic model, where specific technology models&amp;nbsp;can be provided and overlayed by other 3rd party factories. This mechanism is outlined also in &lt;a href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnbda/html/EFxAGSftFtr.asp" mce_href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnbda/html/EFxAGSftFtr.asp"&gt;this article&lt;/a&gt;.&lt;/p&gt; &lt;h2&gt;Answer&lt;/h2&gt; &lt;p&gt;&lt;strong&gt;The EFx Factory is not an instance of MDA.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;From the definition of MDA above, it might appear that in fact, the approach taken by the EFx Factory modelling strategy, would appear to be similar to that of MDA® - that could only be true if you equate a platform independent model (PIM) is the same as the approach as taken by EFx factory which is providing an extensible technology-independent model.&lt;/p&gt; &lt;p&gt;The truth of the matter is that the EFx Factory approach is in no way derived from an MDA approach, nor uses any processes, technologies nor standards that are defined by MDA, such as &lt;a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language" mce_href="http://en.wikipedia.org/wiki/Unified_Modeling_Language"&gt;UML&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Meta-Object_Facility" mce_href="http://en.wikipedia.org/wiki/Meta-Object_Facility"&gt;MOF&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/XMI" mce_href="http://en.wikipedia.org/wiki/XMI"&gt;XMI&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Using MDA as an approach in the context of software factories has several challenges that should be considered in any comparison between software factories and MDA. &lt;a href="http://blogs.msdn.com/jackgr" mce_href="http://blogs.msdn.com/jackgr"&gt;Jack&lt;/a&gt; outlines some of these in the FAQ section of his book &lt;a href="http://www.amazon.com/Software-Factories-Assembling-Applications-Frameworks/dp/0471202843" mce_href="http://www.amazon.com/Software-Factories-Assembling-Applications-Frameworks/dp/0471202843"&gt;'Software Factories'&lt;/a&gt;. However these issues are more related to MDA as an alternative approach to Software Factories as a whole, rather than a specific instance of a factory - which the EFx Factory is. &lt;/p&gt; &lt;p&gt;You might also want to read about the concerns around MDA &lt;a href="http://en.wikipedia.org/wiki/Model-driven_architecture#MDA_concerns"&gt;here&lt;/a&gt;&amp;nbsp;which appear to address some of the undelivered promises of MDA.&lt;/p&gt; &lt;h3&gt;Technology-Independent Models&lt;/h3&gt; &lt;p&gt;The EFx factory &lt;u&gt;does not&lt;/u&gt; provide a &lt;em&gt;platform &lt;/em&gt;independent model (PIM). Rather, it&amp;nbsp;&lt;u&gt;does&lt;/u&gt; provide extensible, domain specific &lt;em&gt;technology-independent &lt;/em&gt;models. I am not just splitting hairs here. The models define specific extensibility points based upon architecture, that can be addressed by other pluggable factories ('factorettes' in this context) that either provide a technology-specific implementation or provide strategies to implement them.&amp;nbsp;This is not the same as the platform independence described by MDA. &lt;/p&gt; &lt;p&gt;The plugged-in factorettes provide their own abstractions of a technology-specific view of the architecture that is exposed through an extensibility point. These extensibility points (&lt;a href="http://blogs.msdn.com/jezzsa/archive/2006/11/19/variability-what-is-it-and-when-to-use-it.aspx"&gt;variability points&lt;/a&gt;) have been determined by identifying which parts of the architecture require specific technologies or implementation patterns. The factorettes&amp;nbsp;provide the abstractions, user experiences and implementation of that extensibility point. The abstractions provided by the factorettes are then integrated into the technology-independent base models to provide a technology-specific view of the architecture. That view can be either overlayed onto the technology-independent view, or displayed separately. It is then the combination of the views provided by the factory and the factorettes that provide the final user experience and actual implementation of the factory products.&lt;/p&gt; &lt;p&gt;Instead of MDA, you&amp;nbsp;might say that the EFx Factory subscribes to a &lt;a href="http://en.wikipedia.org/wiki/Model-driven_engineering" mce_href="http://en.wikipedia.org/wiki/Model-driven_engineering"&gt;Model Driven Engineering&lt;/a&gt; (MDE) approach - which would be more accurate. It's worth noting that the approach used by this factory has evolved from a grass roots approach of iterating automation and modelling of an established application framework use, which is more in line with what software factories promote.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1178601" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Factory+FAQ/default.aspx">Factory FAQ</category></item><item><title>FAQ - What is a Software Factory?</title><link>http://blogs.msdn.com/jezzsa/archive/2006/11/03/q-a-what-is-a-software-factory.aspx</link><pubDate>Fri, 03 Nov 2006 22:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:945478</guid><dc:creator>jezzsa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/945478.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=945478</wfw:commentRss><description>&lt;P&gt;The question usually goes something like this: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Define what is a Software Factory?&lt;/STRONG&gt; Followed by something like this: &lt;STRONG&gt;I built a command line application/a guidance package/a script (make your choice) that code generates some useful component – is that then a software factory too? &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This one is a real challenge to define in a short post.&lt;/P&gt;
&lt;P&gt;Chinnese &lt;A class="" href="http://www.cnblogs.com/JeffreyZhao/archive/2006/11/25/FAQ__What_is_Software_Factory.htm" mce_href="http://www.cnblogs.com/JeffreyZhao/archive/2006/11/25/FAQ__What_is_Software_Factory.htm"&gt;version here&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;Backgrounder&lt;/H2&gt;
&lt;P&gt;This is more than a fair enough question, and most people are now asking it, and trying to distinguish whether they already have factories or whether these things are something new, using something they already built or know about as a starting point for understanding the difference. &lt;/P&gt;
&lt;H2&gt;Answer&lt;/H2&gt;
&lt;P&gt;Let's start with an official definition of a software factory, then I will try to interpret that in simpler terms and expand those with examples to hopefully aid your understanding. &lt;/P&gt;
&lt;P&gt;An official, extensive definition can be found &lt;A href="http://msdn.microsoft.com/vstudio/teamsystem/workshop/sf/whatis.aspx" mce_href="http://msdn.microsoft.com/vstudio/teamsystem/workshop/sf/whatis.aspx"&gt;here&lt;/A&gt;, but I am going to start with this shorter one from &lt;A href="http://blogs.msdn.com/jackgr" mce_href="http://blogs.msdn.com/jackgr"&gt;Jack&lt;/A&gt; and &lt;A href="http://blogs.msdn.com/keith_short" mce_href="http://blogs.msdn.com/keith_short"&gt;Keith's&lt;/A&gt; &lt;A href="http://www.amazon.com/exec/obidos/tg/detail/-/0471202843/qid=1081956906/sr=1-1/ref=sr_1_1/104-7563553-2887105?v=glance%26amp;s=books" mce_href="http://www.amazon.com/exec/obidos/tg/detail/-/0471202843/qid=1081956906/sr=1-1/ref=sr_1_1/104-7563553-2887105?v=glance%26amp;s=books"&gt;book on software factories&lt;/A&gt;. Or you can find some others definitions here &lt;A href="http://blogs.msdn.com/jezzsa/archive/2006/08/09/sfxjargon.aspx" mce_href="http://blogs.msdn.com/jezzsa/archive/2006/08/09/sfxjargon.aspx"&gt;in our glossary&lt;/A&gt;. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"A &lt;STRONG&gt;Software Factory is&lt;/STRONG&gt; a software product line that configures extensible tools, processes and content using a software factory template based on a software factory schema to automate the development and maintenance of variants of an archetypical product by adapting, assembling and configuring framework-based components." &lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Woah, okay, (gulp!) that's the academic definition, let's expand that a little: So, the essential ingredients of a factory are a &lt;A href="http://blogs.msdn.com/jezzsa/archive/2006/08/09/sfxjargon.aspx" mce_href="http://blogs.msdn.com/jezzsa/archive/2006/08/09/sfxjargon.aspx"&gt;product line&lt;/A&gt;, which is created using a set of tools (i.e. editors, code templates, recipes, domain specific languages, command line tools, etc.). These tools then configure a generic, extensible development tool (like Visual Studio) using a thing called a &lt;A href="http://blogs.msdn.com/jezzsa/archive/2006/08/09/sfxjargon.aspx" mce_href="http://blogs.msdn.com/jezzsa/archive/2006/08/09/sfxjargon.aspx"&gt;'factory template'&lt;/A&gt; that is really just a physical incantation of a &lt;A href="http://blogs.msdn.com/jezzsa/archive/2006/08/09/sfxjargon.aspx" mce_href="http://blogs.msdn.com/jezzsa/archive/2006/08/09/sfxjargon.aspx"&gt;'factory schema'&lt;/A&gt; (i.e. the factory template contains the tools, guidance and a blueprint of the things the tools create of configure). Then provide automation for the development and maintenance of different things the factory creates (a '&lt;A href="http://blogs.msdn.com/jezzsa/archive/2006/08/09/sfxjargon.aspx" mce_href="http://blogs.msdn.com/jezzsa/archive/2006/08/09/sfxjargon.aspx"&gt;product'&lt;/A&gt;) by assembling the required components, ideally re-using existing frameworks that are tailored for the created products to work on. &lt;/P&gt;
&lt;P&gt;OK, the key pieces here are the &lt;STRONG&gt;product line&lt;/STRONG&gt;, the &lt;STRONG&gt;factory schema&lt;/STRONG&gt;, its &lt;STRONG&gt;factory template&lt;/STRONG&gt; and a &lt;STRONG&gt;product&lt;/STRONG&gt;. I reckon, if you have all these you have a pretty good approximation of a factory, because most of the other stuff comes along with having these. &lt;/P&gt;
&lt;P&gt;The frameworks are pretty important too, because with one you have taken a large step in the process of defining the variability points of the products in your product line, and most of the work is already done for you. Remember, you should not be creating factories for solutions you have not yet solved, so the basic pre-condition of wanting to create a factory is that you already have some solutions with assets to automate. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;[If and when the Visual Studio team release tools to enable you create custom Software Factories of your own, the Microsoft definition of the term will be concrete, and, I guess, you only have a Microsoft approved factory if it fits this concrete template. But until then, you can still create your own factories with the current tools and a bit of innovation to fit the definition above]. &lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="TEXT-DECORATION: underline"&gt;&lt;STRONG&gt;A Product &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Let's start with the &lt;STRONG&gt;product&lt;/STRONG&gt;. To clarify; a product is the thing a particular factory builds. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"A &lt;STRONG&gt;product&lt;/STRONG&gt; is what falls of the end of a factory &lt;SPAN style="TEXT-DECORATION: underline"&gt;production line&lt;/SPAN&gt;." &lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Don't confuse a 'production line' with a 'product line'. &lt;/P&gt;
&lt;P&gt;Now, a product does not have to be a complete, finished, shrink-wrapped, boxed product like 'Microsoft Word', which is the thing most people have in mind when they hear this. It is simply the term to describe the output of the factory.&lt;/P&gt;
&lt;P&gt;For example, a car engine manufacturer created car engines as their 'products' and sells them to other factories to assemble them into cars. The engine is still a 'product' of the engine factory. &lt;/P&gt;
&lt;P&gt;So, all factories create a useful product that may or may not be assembled into larger products by other factories. &lt;/P&gt;
&lt;P&gt;Factories define a model of this product, (a meta-model) which is the schema of that product, containing the parts and their variability points. This model provides the user with a means to create, configure and maintain the parts independently. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="TEXT-DECORATION: underline"&gt;&lt;STRONG&gt;A Factory Schema and its Template &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;We already did quite a bit of work explaining a &lt;A href="http://blogs.msdn.com/jezzsa/archive/2006/05/27/608873.aspx" mce_href="http://blogs.msdn.com/jezzsa/archive/2006/05/27/608873.aspx"&gt;&lt;SPAN style="COLOR: blue; TEXT-DECORATION: underline"&gt;&lt;STRONG&gt;factory schema&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/A&gt;, so I won't repeat all that here. &lt;/P&gt;
&lt;P&gt;But suffice to say in this context: it is the blueprint of the things the factory builds - the product (and its variants) and there configurations. It defines not only what the factory builds, but how to build it, the pieces it's built from, and the tools used to build them. &lt;/P&gt;
&lt;P&gt;Incidentally, the &lt;STRONG&gt;'&lt;A href="http://blogs.msdn.com/jezzsa/archive/2006/08/09/sfxjargon.aspx" mce_href="http://blogs.msdn.com/jezzsa/archive/2006/08/09/sfxjargon.aspx"&gt;factory template'&lt;/A&gt;&lt;/STRONG&gt; is nothing but the tools, runtime, documentation, frameworks and other assets packaged and shipped as 'your factory' – perhaps within an installable MSI. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="TEXT-DECORATION: underline"&gt;&lt;STRONG&gt;A Product Line &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Now to the &lt;STRONG&gt;product line&lt;/STRONG&gt; – what on earth is that? This is not the 'production line'. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"A &lt;STRONG&gt;product line&lt;/STRONG&gt; consists of the &lt;STRONG&gt;product variants &lt;/STRONG&gt;the factory creates"&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;OK, factories are expected to create more than one&amp;nbsp;instance of product to be really useful (we call each one of these a &lt;STRONG&gt;'product variant'&lt;/STRONG&gt;). To be precise, a product 'variant' is the &lt;U&gt;instance&lt;/U&gt; of the product you have created, rather than the actual &lt;U&gt;type&lt;/U&gt; of the product. A factory could define several different 'types' of products (each one fixing perhaps some variable aspect of the product).&lt;/P&gt;
&lt;P&gt;Therefore, the &lt;STRONG&gt;solution domain&lt;/STRONG&gt; of your factory is defined by its product line.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;[There is a more in depth discussion on product variability and variants, (what it&amp;nbsp;is and when to use)&amp;nbsp;&lt;A class="" href="http://blogs.msdn.com/jezzsa/archive/2006/11/19/variability-what-is-it-and-when-to-use-it.aspx" mce_href="http://blogs.msdn.com/jezzsa/archive/2006/11/19/variability-what-is-it-and-when-to-use-it.aspx"&gt;found here&lt;/A&gt;.]&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;So - is your command line app/guidance package/script a software factory?&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=945478" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Factory+FAQ/default.aspx">Factory FAQ</category></item><item><title>FAQ - Round-Tripping</title><link>http://blogs.msdn.com/jezzsa/archive/2006/11/03/q-a-round-tripping.aspx</link><pubDate>Fri, 03 Nov 2006 20:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:943501</guid><dc:creator>jezzsa</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/943501.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=943501</wfw:commentRss><description>&lt;P&gt;The first question I always get asked: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Do you support&amp;nbsp;round-tripping of the generated code your factory creates&lt;/EM&gt;?&lt;/STRONG&gt; In other words, do you support a developer going into the generated code, modifying it in an arbitrary way, and then read back those code changes and their intended meanings into the models used by the factory? &lt;/P&gt;
&lt;P&gt;[Quite often the asking party has the handy &lt;A href="http://msdn.microsoft.com/msdnmag/issues/04/07/Whitehorse/fig08.gif" mce_href="http://msdn.microsoft.com/msdnmag/issues/04/07/Whitehorse/fig08.gif"&gt;Class Diagram&lt;/A&gt; functionality of Visual Studio in mind when they ask this.]&lt;/P&gt;
&lt;H2&gt;Backgrounder&lt;/H2&gt;
&lt;P&gt;It works like this for our particular factory (the EFx Factory): &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;The factory user designs the logical components of the applications and services in architectural layers using a logical model explorer and visual designers. Each component is part of an overall (combined) meta-model that has a set of metadata (properties) associated to the elements in it. This metadata defines things like the naming, structure and concerns of the component within the architectural layer and ultimately governs how that component should be implemented. &lt;A href="http://blogs.msdn.com/photos/jezzsa/images/544743/original.aspx" mce_href="http://blogs.msdn.com/photos/jezzsa/images/544743/original.aspx"&gt;This diagram&lt;/A&gt; shows one of the designers used in this process.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Of course, these metadata 'properties' provide an abstraction to the actual generated solution artefacts and it is defined in architectural terms, since we don't want the factory users to have to be expert C#&amp;nbsp;solution domain experts to use the models. That's on of the powers of using abstraction your factory. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;[As a side note: In this factory, we do allow and support&amp;nbsp;(even facilitate) the developers hand-crafting the business logic in source code, since we don't feel we can sufficiently model business logic successfully or completely for all cases to suit all solutions.&amp;nbsp;The hand-crafted&amp;nbsp;custom source code is referenced by the models and maintained separately from the generated code, so won't be considered as part of this discussion.] &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;At any given point in the design time of the logical models, assuming certain constraints and certain validation rules are satisfied, source code and other artefacts are generated from the model and designated to the appropriate container (project or solution folder) in the physical solution. It is then subsequently compiled into assemblies at a later stage. &lt;/P&gt;
&lt;H2&gt;Answer&lt;/H2&gt;
&lt;P&gt;The answer for this factory is: &lt;STRONG&gt;&lt;EM&gt;No&lt;/EM&gt;&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;We are not saying it can't be done; just saying that the considerable effort required to support this is wasted when: &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;The Model is King.&lt;/STRONG&gt; The model is intended to represent the architecture, its components and the architectural patterns it implements. In this factory, all the components (with business logic components being the exception) are modelled in the architecture and configurable to suit certain identified variability. This 'specification' is meant to define the specification of the solution, not the source code it generates. Since those interested in the abstractions it provides will not necessarily be interested (or skilled in reading) low level source code. The model is king, and the authority on the actual state of the factory product. All analysis and generation tools read and write to these models. 
&lt;LI&gt;&lt;STRONG&gt;Abstraction assumed to be high&lt;/STRONG&gt;: In this factory, the generated solution artefacts that represent the physical incantation of the models is provided by pluggable providers (we call them '&lt;EM&gt;Artefact Generators'&lt;/EM&gt; for obvious reasons). These providers are intended to implement a pattern or technology to satisfy a set of concerns for a set of components at a particular layer of the architecture. For example, we would have one such provider for a service to implement the Service Contract and Data Contracts using a given technology, say - WCF. Now these providers themselves may be mini-factories ('&lt;A href="http://en.wikipedia.org/wiki/Factorette" mce_href="http://en.wikipedia.org/wiki/Factorette"&gt;factorettes&lt;/A&gt;' as we call them) with their own abstractions that remove the requirements for the factory user to be experts in implementing &lt;EM&gt;their&lt;/EM&gt; best practices or patterns in specific technology terminology or using a low level tool – like source code. The providers are expected to hide that complexity, and only expose a simple interface to configure it, in generally understandable terms and patterns. So, the abstractions they provide may not be as simple as perhaps the Class Designer in Visual Studio (which could be said to have little to no abstraction). 
&lt;LI&gt;&lt;STRONG&gt;One-way mapping assumed&lt;/STRONG&gt;. In following with the previous point, but more importantly, since the providers are to implement a technology based upon a meta-model of components and metadata in a well defined architectural model, they are encouraged to provide more than one set of patterns for their technology which vary and are each optimized depending on the configuration of that meta-model. You can imagine this being the same way that source code compilers implement different byte code sequences depending on how the developer wrote their source code. One pattern may not be most optimal for all configurations. So how do you determine from the modified source code which pattern is in use, and how that change in source code should be reflected in the model? It's the same problem most people see when reverse engineering assemblies using a reflector. You never get back the original source code with its abstractions in place – because there is a one to many mapping between source code and compiled code. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The next point is (philosophical)? &lt;/P&gt;
&lt;P&gt;This factory does not want to promote source code development, favouring more powerful abstractions, visual modelling and extensibility (except, as we mentioned above, for the business logic – which we &lt;EM&gt;do&lt;/EM&gt; want the factory users to define in source code). So, we don't expect the developers to tweak the generated source code.&lt;/P&gt;
&lt;P&gt;Having said that, there are legitimate reasons they might want to do this - customization. The assumption here is that; in modifying the generated source code your intention is to define a variability point (or configuration of a variability point) that the factory does not cater for currently. In these cases, this deliberate action is interpreted as a case for further factory customization – which is a valid reason to create a variant of the factory to accommodate this variability. Its part of the natural development cycle of a factory.&lt;/P&gt;
&lt;P&gt;Just as an interesting point of strategy to identify these cases, this factory employs a validation rule that checks the last generated source code artefacts for modifications, before re-generation. Then, if any modifications are found, the generation process is halted and the factory user is notified of the change. In those cases the modification needs to be resolved with an appropriate manual action by the factory user in order for generation to continue. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=943501" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Factory+FAQ/default.aspx">Factory FAQ</category></item><item><title>Software Factories FAQ</title><link>http://blogs.msdn.com/jezzsa/archive/2006/11/03/software-factories-faq.aspx</link><pubDate>Fri, 03 Nov 2006 17:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1069195</guid><dc:creator>jezzsa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/1069195.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=1069195</wfw:commentRss><description>&lt;P&gt;I often get the same basic set of FAQ questions reoccurring when discussing or demonstrating factories to technical focused folk, so much so I thought I'd do a short series on those frequently questions and answers.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The idea being to share the thinking behind some of this stuff that may be useful for other people's factories and helping you make informed decisions in the design of your own factory.&lt;/P&gt;
&lt;P&gt;Also I will be trying to socialise the terms used and use practical examples.&lt;/P&gt;
&lt;P&gt;I will be creating a number of subsequent posts on these time permits.&lt;/P&gt;
&lt;P&gt;If you have some of your own questions you want to ask, simply comment this post and I'll do my best for you.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1069195" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Factory+FAQ/default.aspx">Factory FAQ</category></item></channel></rss>