At the early stage of your startup you build a POC / prototype (a Minimal Viable Product)
in order to be able to present your idea as a product and show that it delivers value.
Your POC / prototype is presented to potential customers, investors.
You receive the desired feedback and you get to the conclusion that you need to transform the
prototype into a production ready application as soon as possible.
Some of the challenges you will probably face (as there is a major difference between a POC and a release ready product):
• lack of documentations and product requirements
• lack of architecture for the existing codebase (the codebase is not reliable / reusable. It is difficult to maintain the codebase or to add new functionality. No documented architecture)
• POC quality codebase (low quality codebase built quick and dirty, functionalities hacked together, hardcoded data, strong dependencies between components with no reusability, no design patterns, no unit tests)
• no visibility about potential software security issues, risks and vulnerabilities
• lack of tools & procedures
• there is the desire to iterate fast and constantly add new functionality but also the product quality requires significant improvements
Steps to consider when you need to transform a prototype into a production ready app - before adding new functionality
• measure the quality of the existing codebase - use static code analysis to identify the most critical problems and vulnerabilities - code bugs, code smells, technical dept, code duplication. Improve the quality of the codebase by fixing the most critical items
• software security scan - especially if you are dealing with sensitive user data (don't forget about GDPR if applies). Run your code through a software security scan in order to identify and fix potential security issues and vulnerabilities
• Integrate crash reporting tools, analytics (log events related to application usage) and have the possibility to measure the app performance (KPI's related to memory, CPU, storage etc)
• Create a requirements hub and document at least high level what was implemented (you end up with high level product requirements for the existing functionality)
• Review the existing project architecture - identify gaps, opportunities for improvement (have clarity about what you need to do in order to end up with a reusable, reliable architecture that is easy to maintain & expand)
• Consider following agile methodologies in order to organise your work (potentially Scrum or Kanban based on what suits you more). Have clarity about the project timelines, rollout, deliverables
• Consider following a basic set of engineering procedures related to software project execution (coding standards, code reviews, branching strategies, unit testing etc)
• Introduce the necessary tools - issue tracking, version control, tools for creating automatic builds, static code analysers and others
• Create a basic test plan and testing strategy
• Introduce automated tests for the main application flows and functionality (gain confidence about the quality, reduce the manual QA effort and improve the effectiveness of validating intermediary and release builds)