All products start with a prototype. By definition, a prototype is a preliminary model of a product. On a functional note, I define prototype as a quick mashup of different components that implement the main features of a product.
So far, I had the opportunity of prototyping three computer vision products in my career that taught me a great deal about thinking through a process before implementing it.
Here I would like to discuss five things that I learned from my experience which, you can use as guidelines while prototyping your next product.
- Don’t worry about optimization.
Do not spend time in optimizing the code for speed and the best possible approach to implement a task initially. You can always come back and improve it once you confirm that a piece of code is going into your final product. This also includes not spending time in perfectly formatting your code. This step will help you achieve the second point below.
2. Be fast, be modular.
Be modular while implementing a functionality. Wrap it up in a function and keep the data and algorithm separate. This will help you gallop through swapping the algorithm or changing the data storage method, and quickly testing the impact of change on performance.
3. Run different configurations easily.
If you follow the second point above, you can select a method using a switch statement and extend it to do this using command line interface. This saves time and improves efficiency as testing can be done with the same build. A single build can be used with the right command to run the tests in parallel.
4. Avoid using redundant graphic libraries.
Visualization is a clear and intuitive way to analyze your results, whether it is numeric data or a location of rectangle on an image. Looking at a graph and drawing the rectangle on the image is an effective way to understand and present numbers. Instead of looking for a full-fledged graphics library, I prefer using OpenCV’s in built drawing functions to generate visualizations. This avoids cluttering the project with an redundant graphics library that does not provide any other functionality to the project.
5. Write test scripts for every module
Writing test scripts will help you debug models in the future. It also helps you design interfaces for those modules. For example, writing a script for a sort function will help you debug it if you find that the sorting is incorrect. It enables you to test different algorithms that provide the same functionality.
In a nutshell, when you are prototyping, keeping these points in mind can help thwart digressions from the goal.
Please share your prototyping experiences through the comments below.
Image source: https://pxhere.com/en/photo/1587047, https://pxhere.com/en/photo/1449503