怎样开发一个产品

个人的一点看法,欢迎讨论。谢绝转载。

逆向开发

如果是一个成熟产品,市面上有很多现成的产品,那么一个快速开发的捷径是”抄”。硬件可以模仿甚至抄板,软件可以通过学习市场上其他产品的功能,算法可以参考一些公开的论文,结合对其他产品的反向分析。
曾经有过极端的案例是,硬件抄板成一模一样,软件读出来,直接烧录进去就可以出货了。当然了这种极端的做法是侵犯了别人的知识产权,我是不支持的。

正向开发

按照顺序:

  1. 定义问题
  2. 寻找解决方案
  3. 系统架构设计
  4. 硬件设计设计
  5. 软件架构设计
  6. 软件开发
  7. 软件测试
  8. 系统测试

核心竞争力:建立开发(development)和系统性能调优(system preformance tuning)的能力(know-how,toolchain…)。
系统设计可以划分子系统,子系统下面可以划分子模块,每个模块可独立演进,每个模块的算法可以优化迭代。
软件模块开发可以考虑用基于模型的设计(Model-Based design),如Matlab,既可以做SIL(Software In the Loop)或者HIL(Hardware In the Loop),也可以生成代码在嵌入式设备中运行。
有前瞻性的预研团队,可以与高校或者研究所合作,确保技术上不断更新。
当然对汽车行业还要考虑更多:A-SPICE、ISO26262(functional safety),AUTOSAR。

混合模式

就算是已正向开发为主的大公司,也会进行所谓”竞争对手分析”,对比市场上的产品与一家产品的功能及性能差距,优点可以在向客户的推介材料里展示,缺点可以称为改进的方向,以确保产品在市场上有竞争力。
如果一家刚起步的公司两种方法:

  1. 集中精力开发核心模块,其他模块都外包,如Mobieye专攻图像处理器和算法,可以集成到Tier1或者OEM的video里。
  2. 先逆向开发出产品,杀入市场,占领一部分市场,然后慢慢建立自己的正向研发能力,如国内主机厂,华为手机原来是白牌。

reference:

  1. Mobieye