Of late I have been thinking about this a lot. How is developing a software product different from building a custom solution. And quite often indulge into casual discussions with some of my friends out here in Singapore. I was thinking of putting together a well-structured elaborate post on this topic, but seems that it would take a while for me to sit down and collate all my learnings, discussions and thoughts on this. For now just thought of putting up random thoughts on this topic.
First of all let me put on the table, what I mean by Software product and custom solution. By software product I mean those set of software, which are build to sell off the shelf. These are the software, which are NOT developed for any specific customer, but for general use. Of course this software comes with various features and functionalities out of box and there are some points of extension and customization. The software product is installed or setup or implemented by the customer to address their specific business or personal need. There are tons of ways to classify the software product but the details are outside the scope of this post. But the basic principle of software product or to that matter any product is that it is meant for a particular community and not a specific customer. Needless to give the examples but nevertheless here are few: Microsoft Office, Acrobat Reader, Oracle database 10g etc
The other category is what I call custom solutions or custom software solution to be precise. By this I mean the software build to address a custom need. This solution is targeted for one particular customer or a particular requirement or a specific business processes. The software (or the solution) is not build to sell of-the-shelf. Even maintaining existing enterprise applications and enhancing them falls under custom solutions. A custom solution could be one build from scratch like a Web Based Budgeting and Reporting solution build using Java and HTML technology. Or it could be extending the functionality of standard applications by adding necessary customization.
I do acknowledge that there is no easy way to classify all that is happening in the software world into these two categories. There are some things, which are in the boundary and don’t really fall straight in to one of this category. We keep hearing things like frameworks or blue prints, which are sold commercially these days. These frameworks are in turn used to develop custom solutions around it. So where do they fall? Similarly there are offerings forms Google like Gmail, or Clendar or to that matter any web service, which is out there in Internet. Should we call it a software product or a custom solution? Lets us keep ourselves away for all these debates.
Getting back to the main idea of the post: how does developing a software product differ from a custom solution.
Developing a software product according to me is:
- More organized and planned engagement.
- Lot of planning goes before embarking the actual development.
- There is lot study done in terms of gathering the requirement.
- Things like Focus group and user community are foundation for this product
- Involves Studying features and functionalities of other competitive products in market.
- Most of the time, a prototype or a proof of concept precedes the actual development
- There is lot of flexibility while developing the software product it terms of choosing the technology, etc.
- The teams are relatively bigger. Flexibility for the a developer to be focused on particular module or set of module
- The quality process is more elaborate. Lot of testing both internal and external is done
- API and maintaining reusable components libraries is critical
- Wide adoption of software best practices and better design principles
- Bug fixing and support is more comprehensive
- Licensing and software delivery are important consideration
- Software packaging and installation mechanism are important component
- Change control is ubiquitous
- System design documents are user manuals are of good quality. Also the documents are constantly maintained with the new release of software product.
On the other side developing a custom solution is:
- Planning process is not very elaborate
- Studying of requirement is not very comprehensive. At times requirement gathering processes continues long after the actual software development has started.
- The scope of the solution at times is not well defined
- Prototypes or proof of concepts is not that frequent.
- In terms of choosing the technology or tools the decision has already been taken by the customer or the during the presales exercise
- The teams are relatively smaller with one person playing multiple roles at times.
- API and maintaining reusable components is not that critical if the custom solution is relatively small.
- In larger solutions there is proper bug fixing setup. However for the smaller solution the bug fixing and patching is very adhoc
- Licensing is not of that grave importance. However there is lot to deal with in terms of SLA (Service level Agreement) while delivering a custom solution.
- Software packaging and installation mechanism are not of significant unless the solution is build for large user base, which needs to install the software on their PC.
- Change control in place for most medium and large-scale custom solution.
- Design documents are part of any custom solution project however at times these documents are not maintained with the new releases or the changes in the existing release.
All said, the above does not always stand true. With the smaller software product developed with Agile methodologies do forego some of the items mentioned in the software product development. Similarly with the large custom solution developed under a strict quality process does follow lot of the items in the software product development