Tuesday, September 12, 2006

Factory Software

I came across the idea of "Software Factories" on the MSDN site. A Software Factory is an immensely complicated, um, thing, that makes application development easier. Basically, it seems to be a movement to create large frameworks at numerous domain levels, that can then be combined to deliver specific application systems.

Is this whole notion misguided? There's certainly a fair amount of work going on over Microsoft way in building Software Factories -- which appear to be mostly installable plug-ins for IDE's to make it easy to build components. My feeling is that this makes it easier for bad developers to build complicated things.

I'm not sure that's a good feeling I have.

In a mature software factory, application development consists primarily of component selection, customization, adaptation, extension and assembly. Instead of writing large amounts of new code, application developers obtain most of the required functionality from existing components.

I think this means in much the same way developers make use of existing components like the Swing or Struts frameworks, Hibernate or EJB. Of course, those are all Java technologies, so I guess it behooves Microsoft to pretend they don't exist.

But Microsoft seems to want to go deeper than that, with business-domain-specific frameworks that application developers can draw on.

Looking around the industry today, however, we see only a few cases of systematic family based product development, most notably packaged enterprise applications. Why don't we see more? One reason may be lack of knowledge. Product line practices are not well understood in the software industry. Another reason may be inertia. Established practices are often hard to replace, especially when not only technical, but business and organizational changes are required. Perhaps the most significant reason, however, is the high cost of developing the reusable assets, especially the tools.


The cost, however, decreases as your available time increases. This is the secret of open-source development -- as the number of people contributing to your product increases, so does your available time, and therefore your development costs decrease. Obviously there's all sorts of other conditions and issues that arise, so it's not just a straightforward growth line, but in essence one open-source project after another has proven that this model works great.

It IS very expensive. Domain-specific frameworks are only financially viable for groups that can expect to implement them again and again -- huge companies (like, um, Microsoft) or large open-source movements. So far, the evidence suggests that open-source movements are better at it. Firefox, Apache, Linux/Unix: all these systems consistently outperform their closed-source counterparts.

As product developers increasingly depend on external suppliers, supply chains will emerge, as they have in other industries.


The difference being that there's zero cost to acquiring these supplies, and storing/creating them (again assuming you have infinite time, which you essentially do).

Philosophically, I pretty much agree with Microsoft here that this is the direction software development is going. Ever-more sophisticated and interoperable frameworks and component libraries that application developers can assemble to build their systems. But I don't see how we get away from developers needing to know HUGE amounts of stuff. You're still going to need people who know this shit inside and out, if you want high-performance systems, because each system needs tuning to its own conditions.

Or I guess a better way to put it is you're still going to get what you pay for, relatively. Joel Splosky's always going on about how the very best software developers are TEN TIMES more productive than average software developers. I agree with that. I just wonder if maybe the best cobblers were equally more productive than their average shoe-making folk. Didn't make it impossible for people to get pretty darn good shoes from an assembly line.

Where I differ from Microsoft's stated position is predictable given my investment compared to theirs in maintaining an immense software company. Microsoft seems to be making a pitch to non-technical corporate decision-makers, reassuring them that only the big boys can really supply what they need, which will generate the financial investment that these ginormous frameworks and tool sets will require.

Because otherwise it seems clear to me the open-source community will continue motoring on ahead, doing exactly what Microsoft says only they can do. Because this IS a way in which software development is different from other crafts: the only thing you need to work on it is a PC. You don't need leather, you don't need steel, you don't need a workshop, you don't need to pay your workers, even. And that makes it pretty difficult to argue that only those with massive financial resources will be able to make this happen. It's already happening, more effectively and more creatively than Microsoft is going to be able to accomplish.

Says me. Big thinker.