I would guess, that as an architect the answer to such a general question would be "it depends". Obviously Software Factories are no "silver bullet", but they might have the potential to elevate software development to the next maturity level, at least in certain scenarios. How do I get to this conclusion? Well, let me exlain......
After working for a large enterprise for over 10 years, and being with Microsoft for a few weeks, I felt that it would be fun to bring my perspective to this blog too. In my previous life I worked as quasi in-house consultant in many different domains. Mainly we worked on technology strategy evaluations and definitions, proof of concepts, software architecture reviews, and mentors for new product development. In many of our engagements with product groups, we analyzed different solutions for different products. Nevertheless, when we digg deeper, in many cases, it turned out that the different solutions actually started from the same code base. On the one hand, often a cut and paste of an existing source code base was the initiation procedure to start a new product development. More often than not, the product sources drifted apart through modification and extensions, ultimately leading to multiple code bases for the products. Therefore, the maintenance of these products often turned slowly into nightmares and became very difficult to manage. Especially in domains with long living products (such as the medical, or financial domains for example) this turned out to strain the development resources and made it difficult to innovate new products with new or extended features the customer wanted and/or needed. On the other hand, even if the product source code was not duplicated at the beginning of the product development, we often encountered architectures that were fragile, strained to the limit, and difficult to maintain because they were designed with only one specific product in mind but had to be evolved to support many very different products without time and resources for the required refactoring to take place in order to keep a uniform and "clean" architecture.
Software Factories address the most important issues leading to this situation:
- One off development
- Low quality
- Inefficient development tools and techniques
- Steep learning curve for new developers
- Reuse, or lack thereof
Therefore, I believe Software Factories are relevant (also, or especially to ISVs) in cases where we can find a well understood, well defined, and stable domain that is targeted by multiple similar, yet distinguished products. With tools like Visual Studio, Team Foundation Server, Domain Specific Languages Toolkit, Guidance and Automation, .NET Framework, and the Visual Studio SDK Software Factories are realizable today and I will explore more on this topic in my next post.
For more information check out the article I wrote with a former colleague for the DNDJ and our book on Software Factories........
To be continued.........