Tuesday, August 08, 2006

Software development is a difficult endeavor. Development teams are expected to produce ever more complex software systems, yet economic forces require them to do it faster, better and cheaper. As software developers we have an unprecedented array of amazing tools at our disposal for developing, building and testing and deploying our software applications. We’ve made enormous strides in our methods with agile practices like iterative incremental development and test driven development. And yet we continue to build software applications the same way that automobiles used to be built - hand crafted one by one.

Let’s compare software development to the production of automobiles. Today a few very special automobiles are still built by hand. But if we had continued to build all automobiles in this way, then they would be enormously expensive and in very short supply. Quality would be erratic, safety and reliability would be problematic, performance would be unpredictable and parts would be hard to come by.  Thanks to the industrialization of the automobile industry, we have an amazing variety of safe, reliable automobiles that address a wide array of needs at a reasonable cost.

Since industrialization was so phenomenally successful for automobile production, can the same approach be applied to software? Can we industrialize the software development? In short the answer is yes! But what does industrialization mean in this context? Clearly software is not the same thing as automobiles. But is it really that different?

Every automobile has many features in common. Each automobile has an engine, transmission, brakes, headlights, a steering wheel, etc. Some features are required – like wheels, while other features are optional – like a GPS navigation system. Some features offer choices – like the color of the body, while other features offer no choice – such as the gas pedal.

When automobiles were first mass produced, each automobile was identical. Today when you order a car you have many choices – type of engine, type of interior, type of wheels, as well as options such as a sun roof, compact disc player and anti-theft security system. These choices are made possible through a technique called flexible manufacturing. Although each car coming down the production line is the same make and model, each one is also a unique. Each car is configured with a different set of features based on the needs and preferences of the customer. Through flexible manufacturing, the production line is capable of producing many variations of the same automobile without the need for retooling.

A software factory applies the same concept of flexible manufacturing to software development.  A software factory is a development environment configured to produce a specific type of application quickly and efficiently. The factory provides the tooling and guidance to rapidly develop a family of applications.

Each software application belongs to a class of applications; e.g., accounting system, word processor, ecommerce web site, etc. Within that class there are common features and variable features, in the same way that automobiles have required features and optional features.

The software factory combines a core set of common features with variable features that you select and configure. Once you have your custom feature set specified you use the software factory to automatically generate an implementation. You then manually tailor the implementation as needed to produce the finished product. In this way the software factory is a flexible manufacturing environment for software.

A software factory allows you to build software through mass customization, the ability to produce a range of similar applications by simply selecting the feature set for each application from a pre-defined set of features. This approach leads to economy of scope, where you achieve a significant increase in efficiency by leveraging reusable assets to build a variety of similar products.

posted on 8/8/2006 5:28:44 PM (Mountain Daylight Time, UTC-06:00)  #    Comments [1]
 Wednesday, April 12, 2006

In an earlier post I promised to make the MSF Analysis Tool available for download.

You can now download it at GotDotNet.

Go there, try it out and let me know what you think. Or better yet, improve the tool and share your enhancements at project workspace on GotDotNet.

You can get a sneak peak at the read me file here:

Read Me - MSF Analysis Tool.doc (34.5 KB)

posted on 4/12/2006 9:11:02 AM (Mountain Daylight Time, UTC-06:00)  #    Comments [0]
 Wednesday, March 22, 2006

The first-ever Boise Code Camp was a huge success! It was an all-volunteer effort based on the Code Camp Manifesto. There were 35 presentations on a variety of topics, and the 138 attendees gave it a big thumbs up. I thoroughly enjoyed the event, both as an attendee and a presenter.

As the lead for the methodology track I had the honor and privilege of moderating a panel discussion that explored methodology from several angles: people, environment and tools. The panel members were (from left to right) Dan Ray (Healthwise), Doug Seven (Microsoft), Kevin Call (Micron Technology), Jason Grundy (Treetop Tech), David Starr (Healthwise) and Jim McKeeth (Washington Group). These guys had a wealth of experience to share, and the audience came up with some great questions and observations as well.

I also gave a 90 minute presentation on Software Factories that included a demonstration of the DSL Tools as well as a demonstration of the Guidance Automation Toolkit. The presentation included a discussion of Software Product Lines and also covered the software factory process. Apparently the audience thought it went pretty well, giving the presentation an average rating of 8 out of 9.

 
 

posted on 3/22/2006 9:43:22 AM (Mountain Daylight Time, UTC-06:00)  #    Comments [6]
 Monday, February 06, 2006
The MSF Analysis Tool parses MSF Process Guidance XML source documents into a SQL Server database, allowing you to explore the structure of any process guidance based on the MSF template.
posted on 2/6/2006 10:45:45 PM (Mountain Standard Time, UTC-07:00)  #    Comments [0]
 Monday, December 05, 2005

Ron Jacobs, a Product Manager on Microsoft's Patterns and Practices team, just started a podcast called ARCTalk on MSDN Channel 9 . His first show is an interview with Steve Cook on the subject Software Factories and Domain Specific Languages.

Steve brings a unique perspective to this subject. He is a Software Architect in the Enterprise Frameworks and Tools group in Microsoft Visual Studio, working on the DSL Tools modeling technology. He is also a co-author of the book Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools, which is destined to become a classic. What's really interesting about Steve is that he was a Distinguished Engineer at IBM, whom he represented in the UML 2.0 specification process at the OMG. After having worked so closely on the UML 2.0 specification, he decided it was not moving in the right direction and instead teamed up with Jack Greenfield and company to take things in a completely new direction.

The interview was very informative and well produced. Check it out!

posted on 12/5/2005 3:48:15 PM (Mountain Standard Time, UTC-07:00)  #    Comments [0]

You might be interested in listening to a podcast on MSDN's Channel 9 web site on the subject of model-driven development. Part of the ARCast series of Architecture podcasts, this podcast consists of a panel discussion between Jack Greenfield, Stevn Kelly, Bran Selic, Mauro Regio and myself. The first installment from this panel, ARCast #5, already has over 9,000 views, making it the second most popular of all of Microsoft's podcasts.

ARCast #5 (Model-driven development, week 1)
ARCast #6 (Model-driven development, week 2)
Architecture Podcast Series 

After you listen to the podcast, be sure to leave a comment on the Channel 9 web site, or post a comment to this blog with your thoughts.  Thanks!

 

posted on 12/5/2005 3:13:57 PM (Mountain Standard Time, UTC-07:00)  #    Comments [0]