The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions. This essence is abstract in that such a conceptual construct is the same under many different representations. It is nonetheless highly precise and richly detailed.
I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation.
在现实开发过程中更常见的办法其实是直接借鉴竞品或者开源的产品或实现代码层面设计。在理解后搬实现的过程,潜移默化的把相应的概念搬到自己的软件中。
这种做法并非没有好处,代码和开源概念上靠的更进有助于技术理解与交流,“长期借鉴”,以及未来的标准化。对于往标品方向做,一部分功能目标就是 me too,或者差异化不在功能性需求上的软件(比如数据库?),这种做法其实是合理的。