POC vs Product

POC

  • Focus is on functionality, Algorithms, data structures.  no need to handle all error cases.
  • Proving performance
  • Need reliability to the extent of not having too many issues/bugs while doing performance tests/ basic functionality tests.
  • Test coverage is limited to End to End testing.
  • No need for unit testing for every function/class.
  • No integration with management layer (UI)
  • Have automation to reduce the setup related tasks. (use Ansible playbooks/ shell scripts/ python scripts)
  • Have clear document on what functionality is skipped and what needs to be taken care in the productization phase. ( requirements, features and functionality)

Productization

  • All error handling.
  • Log messages, and log file management
  • Stats to get insights into the product layers.  (need for debugging purpose)
  • Stats to customer
  • Management (Tools or UI) layer integration.
  • Class/Function level unit testing.
  • Sub component level testing.  Make sure there are no race conditions and memory leaks.
  • Integration testing (End to End testing)
  • Performance related tests. Stress and Load testing.
  • All possible functionality related testing at each level. Both Positive and Negative tests. Ask developers to get the infrastructure to induce errors.
  • Tools/Utilities to manage and monitor the product.
  • Call Home feature, where events are sent from customer machine to the  Servicing company.
  • Notifying users on specific events like failures/warnings.
  • Testing on real Hardware.