Last week Beat Schwegler and Ingo Rammer visited Israel with the Software Factories Seminar  (The link is to the same seminar presented in  Finland -  videos are in English)

 

Software Factories is not a new idea  - see for example "Software reuse: From Library to Factory" by M. L. Griss  (published in 1993(!)) which talks about "Software Factories" and "Domain Specific kits": components, frameworks, glue languages etc.  The current Microsoft  incarnation of Software Factories takes a similar approach focusing on Domain Specific Languages, Frameworks but also adding important aspects like multiple viewpoints, patterns and designers. The idea is that  building on modern technologies, as well as learning from the mistakes from sister approaches to code generation (OMG's MDA, in case you are wondering) will enable us to build something that is useable.

 

Microsoft seems to be taking some steps in the right direction (GAT is probably the best example). Nevertheless there is still a long way to go before we can realize the dream of "factories" for vertical applications

 

This is evident if you take a look at the  current crop of DSL examples. These are either some Horizontal languages and tools  (i.e. not aimed at a specific business domain) like UIP designer or the GAT4WS beat talked about @ the event or even worse UML designers... ('nuff said).

 

The other thing is, that developing real factories, and getting them right is a really complicated  task, which requires a lot of domain knowledge and effort. In the recent Microsoft Architect's Journal  there's an article by Jack Greenfield and Mauro Regio regarding a software factory for the Health Level 7 ( a standard for Health organization collaboration) - As far as I know this project has been under way for more than a year now (first time I heard about it was Feb. 2005) and yet the article ends with :

 

"Our experience in developing a factory for HL7 collaboration ports

has shown that we need to define better frameworks, tools, and processes

to specify the factory schema, to manage factory configuration

in a flexible and extensible way, and to better understand how

and when domain-specific languages should be used."



My expericen with MDA shows similar results. Nevertheless, they continue to say that:

 

"At the same time, initial implementations of extension mechanisms like GAT and

DSL have proven their value, filling significant gaps in software factory

infrastructure, and pointing to future innovation in that area.

 

So, maybe there's hope after all :)


 
Monday, March 27, 2006 11:36:44 AM (GMT Standard Time, UTC+00:00)
Arnon,

I've been following your blog for a long time now and I just had to jump on this thread because Software Factories and the stuff from the Microsoft initiative (DSL/GAT) have been my focus recently. The book Jack Greenfield and Keith Short wrote does a great job explaining the reason why the software industry is ripe for an industrial revolution. I feel like all of the points made in the book ring very true to me based on my experience as an architect but this still doesn't help me understand exactly what makes up some of these useful vertical assets.

So here are some of the questions I'm asking myself (and now you):

1. The concepts of product line vs. product developers seems to be a pre-requisite when talking about moving your organization toward a factory mentality. Is there something in Visual Studio Team System that will support this division of responsibility?

2. Do vertical software factory assets make sense in an enterprise? I can see the value in identifying product families and delivering reusable assets first but how often is that really something you do in an enterprise? Typically you spend your entire time attempting to incrementally inject good architecture one application at a time because a full product family initiative introduces too much risk.

3. Based on #2 are vertical product line assets only valuable to ISVs most of the time?

4. The horizontal product line assets or what Jack/Keith call assets that can benefit you through economies of scope seem like the sweetspot for a big enterprise. Will Microsoft start to produce these types of things and layer them into their enterprise library? They're problem domain specific but not industry vertical specific so I can see these being deliverables of Microsofts. Are these in the product plan?

5. In my opinion one of the primary benefits of starting to think about this type of big picture vision now, even when its still half-baked, is that you probably benefit just as much from the journey to the rainbow as you will from the pot o' gold. If you are working as an architect and your goal is to start to extract and redeliver patterns, frameworks, and techniques for developing by assembly (like say SOA) then any part of the maturation process is beneficial. Sounds like a maturity model to me ... anyone want to work on one? Has one already been started or published?

Ok I have many, many more but I figured you wouldn't really have the answers to all of these but maybe you'd be wondering the same things. At the same time I sent an email to the gentlemen that own this vision to see what they have to say. More to come....
Tuesday, March 28, 2006 1:25:43 PM (GMT Standard Time, UTC+00:00)
Hi Tom - thanks for the comment, here are my views on the questions you've posted:

1. As far as I know there isn't much in in VS or VSTS to specifically support this.
2&3 - I believe software product lines are not that useful for Enterprises. Enterprises would probably only benefit from horizontal languages (Service Designer, Custom Business Entities).
Product lines are suitable for ISVs and you've mentioned - It can work for product companies (shrink wrapped ) and even more so for solution providers (tailor a solution for specific customers needs). I believe it can also be useful for consulting organizations (like IGS)
4. VS contains some DSLs today - and I know of several initiative for other DSLs for the next versions. Note however that DSLs alone are not Software Factories
5. Software product lines is a very complicated issue (I guess that is why they hire people like us and not the cleaning lady). I can agree that any work towards helpinggrowing reusable assets is a good thing. However the real key to product lines is strategic thinking about software reuse (vs. for example, opportunistic reuse) and the real work is about understanding the business well enough to be able to identify the candidate assets

Arnon
Tuesday, March 28, 2006 8:16:46 PM (GMT Standard Time, UTC+00:00)
Good update.... I totally agree with what you say. especially about GAT. I think the GAT is going to have the same progression as TDD did with XP. Most shops accept TDD, but they don't bother with the rest of the XP practices.

We are using GAT on our current product line to roll out the core assets framework for application developers. But we aren't giving DSL any thought, except the thought that it is a pain in the butt. The VSTS Team Suite offers a few DSLs, but in my role they are useless. The class designer is ok for the construction phase, but VSTS has no tools for software architecture, analysis, or design. We are depending on Sparx EA for software architecture, analysis, or design.

Software factories like you stated above is no new concept. Just like SOA and ESB. The patterns for these things have existed for years, the market is just introducing them as new concepts because the patterns are being implemented with different technology.

Here is the rest of my opinion on DSLs/Software factories
[http://realworldsa.dotnetdevelopersjournal.com/dsl.htm]
Comments are closed.