Wednesday, August 01, 2007

Productizing

It's remarkable how much stuff can be added to a product without adding any new end user features. Often an initial product release is tied to a specific sale to an individual customer. The customer has a specific environment and the development team is able to get the initial release done on time by building to just that setup.

After the initial sale you want to sell it to additional customers. At this point the initial customer specific release becomes more productized. That is, the application is made able to run in different settings. These are some of the things we've added to the main product in my office since the original release.

-added support for additional application servers
-added support for additional databases
-added support for new host servers i.e. Windows
-fully tokenized the user interface labels to support additional languages
-add support for right to left rendering in the user interface
-make it easier to customize or rebrand the user interface
-add support for running in a clustered application server with failover
-spent time on performance analysis and improved performance in high load environments
-Javadoc code review and improvements
-JUnit code review and improvements
-refactoring and streamlined the internal modules structure
-use xdoclet to generate EJB baggage
-added support for several new iterations of the device specification and new data models, while maintaining backwards compatibility and workarounds for non compliant devices
-rewrote almost the entire inherited code base

Together these changes required several person years of effort to implement. These structural changes added no new end user features, but were necessary to make the product saleable outside of the original customer.

This type of productizing is what makes future releases take longer than the original v1.0 release for a specific customer and environment. Making things generic and customizable always takes longer than being customer specific and rigid. Adding support for new databases, application servers and host servers causes the number of development and testing combinations to become much larger and that necessarily slows down the development cycle.

No comments: