First.... woo hoo! My real copy of Software Factories arrived. I've been reading PDFs and hard-copy of the PDFs for a month or so now and there's just no comparison with a real-live-book.
While reading Software Factories I began to remember something I started to realize many years ago: Some developers are really good at building software for developers and some developers are really good at building software for non-developers.
In my previous post (Macros, Macros, Macros) I opined that more-and-more developers are going to need to think, in advance, about "parameterizing" their work in order to achieve widespread re-use. As I began to ponder the implications of this further I realized that not all developers are equally good at this. Equally important not all developers like to think that way.
I think that the runaway success of Visual Basic (and other "non-developer" languages) is due to the ability of the non-developer-focused developer being able to achieve their goals by working at a higher level of abstraction and consequently a higher level of productivity and, equally important, a higher level of developer satisfaction.
It's simply easier to drag-and-drop and code "snippets" than it is to write from scratch!
I have worked with hundreds of developers and I am convinced that these two areas of focus require different skills. The developer-focused developer loves tweaking things, loves knowing they are building tools and takes satisfaction in the wide-spread adoption of their technology. The non-developer-focused developer loves things that "just work", loves knowing they are solving problems for non-technical user and takes satisfaction in the wide-spread adoption of their solutions.
Both of these kinds of developers have the same eventual objective (customer satisfaction) but they have dramatically different ways of contributing to that goal
So why care about this and what does it have to do with Software Factories?
In the Software Factories paradigm there are product-line developers and product developers.
Product-line developers build reusable, parameterized artifacts (code, documentation, patterns, etc.) that can be used to create a series of products that share common traits.
Product developers use the work of the product-line developers by adding high-level customizations, joining components by compostional means (adapters, web services, etc.) to create a series of solutions for customers.
The conclusion I draw from all this is that when building a team to develop a product, carefully consider both kinds of skills and make sure you put the right people in the right jobs.
- Certainly product-line developers can perform product development, but they don't like it!.
- Using product developers as product-line developers can range from difficult to near-disasterous (as I saw repeatedly during the dot-com/dot-bomb era).
As always, I welcome your comments and encourage you to share your tales of the real world.