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)