Methodologies involved in software project development and software product development differ widely because there are significant differences which can be grouped under user expectations, sponsors’ ROI expectations and the causes which initiated the need. Normally, the methodologies involved in product development should be relatively detailed and sophisticated than its counterpart. Software product companies generally find the need of a product by identifying vacuum in the market-space for similar products or by identifying the fact that there are not enough proven collaborative designs for a product or by realizing a market potential for an in-house developed project for custom needs. In all of these cases, any software product development company would strive to maximize the value of the product, achieve scalability & robustness, and to cut down the development and engineering costs significantly so that they can remain competent in the market. And it introduces typical challenges to the product managers and business analysts.
This article is an attempt to list some of the important facets which need to be analyzed while designing a suitable product development methodology to achieve the goals.
Generalizing the requirements of the product is one of the key factors to achieve scalability of the product. The user-base or client-base which would use the product would be diversified in business models, geographies, legislations and culture. Before transferring the requirements – probably heard from fewer number of user-base – into features, it is important to evaluate if the features being designed or built would address wide spectrum of user-base. The requirements need to be generalized enough by including configuration and customization layers so that same feature of the same product can be used by the entire user-base by just tweaking the settings.
The product managers need to hold meetings with business experts on the domain, conduct meetings with a few handpicked clients (who are essentially diversified) to gain varied perspective on the requirements and features that they expect. Also, it is very important to evaluate if business analyst can shadow the end-user so that the practical usage of the features in the respective users’ work place and its impact on the efficiency of the people of work can be evaluated. This analysis would help the system designers and architects to come up with a generic design and architecture that would address a wide spectrum of user-base.
Though many of the software system designers and architects appreciate the need of component oriented design, many a times I have noticed in many designs that components are not loosely coupled and it leads into inter-dependency across components resulting into problems while attempting to extend the product into other platforms. For example, if ASP.NET front end and corresponding middleware development are not meticulously componentized there would be significant challenges and troubles while trying to use the same middleware for Windows mobile application though the technology is going to be same.
In an efficient design, the front end should visualize the middleware as API and middleware should visualize the backend programs and storage as API. The middleware should never make any assumptions on the internal facets of the front end and backend programs should not make any assumptions on the internal facets of front end and middleware components. If loosely coupling involves significant costs on engineering and development the trade-off need to be analyzed by bringing all the stake holders into a common consensus before jumping into a conclusion because we never know when a product sponsor would say I am ok with the cost.
Configuration and Customization Design
Since it is a product, it is expected to address wide variety of requirements due to which configuration and customization layer is very important to effectively configures and customize a product for one’s needs. In an efficient design, the configuration and customization layer would be able to completely stripped-off without any hassles. The users should be able to import and export the configuration and customization settings. And most importantly, the exported and imported settings should be backward compatible at least to 2-3 major versions. The ability to export and import the settings not only achieves user friendliness but also helps significantly troubleshooting particularly when your support team tries to troubleshoot from remote locations.
Frequent releases increase the cost of the maintenance whereas infrequent releases make the known bug to live for relatively longer duration. A better trade-off need to be identified and a release strategy need to be designed. I, normally, tend to increase the release frequency for a manageable support process. Also, it is important to mandate all the product instances to receive releases on product upgrades and patches periodically. Normally, it is a nightmare to support very inferior versions because support force would be trained with latest versions of the product or service.
The quality assurance engineers play significant role in product development right from the requirement gathering process to support process. Quality assurance engineers should act as business analysts and they need be trained to debate over the product features during functional design meetings. They should be able to envision the kind of support and maintenance challenges based on user-base study. Most of the re-engineering costs are due to poor study of user-base or incorrect establishment of use-cases. An effective quality assurance team can bridge this gap and can significantly reduce the re-engineering costs in product development.
During testing enough importance need to be paid to test the backward compatibility issues as poor backward compatibility is one of the major reasons for inflated support cost.
Outsourced Product Development
Outsourced product development is one of strategies followed by many of the software product marketing companies because it is widely realized that product development expertise is effectively outsourced rather than developing in-house which is relatively a huge investment. Outsourced software product development companies are specialized in product development methodologies understanding the nuances involved in the product lifecycle. They share the experience and maintain a talent pool within and across the teams which is one of the biggest value additions for maintaining and developing a product. The software product companies can focus on product marketing methodologies and increase the sales by completely offloading the challenges and techniques involved in successful product development.