_Note: "Module" here refers to an abstract entity that's relatively small and self-sufficient. It could be a function, a custom type or a module containing a bunch of collaborative types._
Figure out functional/behavioral requirements: do _wishful thinking_ on how to use it.
logseq.order-list-type:: number
Figure out universal properties in the lens of category theory. Look for relevant categorical objects providing guarantee on those properties.
logseq.order-list-type:: number
Figure out algebraic structure and algebraic laws your module must conform to. Look for relevant algebraic data types (ADTs) obeying those laws.
logseq.order-list-type:: number
Based on results of discussion of the 2nd and 3rd steps, derive _canonical API_ for your module. Canonical roughly means the API is minimal and unique to meet all requirements. It might not be performant or convenient yet.
logseq.order-list-type:: number
Implementation: add convenient APIs, implement methods, review non functional requirements like performance, latency, compatibility, etc.
logseq.order-list-type:: number
Testing: _property-based_ unittests
logseq.order-list-type:: number