Project

Project refers to software that is being developed and maps to some specific source code version control system. In other words, if you are working on a software which has its own Version Control repository or is a component in a Monorepo - that would be a Project.

Developers usually think in terms of Projects when discussing their work.

Product

Product is a customer-facing, operational piece of software. Products never map directly to source code version control, but rather through their components. Components of Products are either Projects or other Products.

Customers, project managers and product marketing teams usually think in terms of Products when describing software produced by organization.

Artifact

Artifact may be a binary, docker image or collection of directories and files. We assume that 2 Artifacts are equal if they are of the same type and their hashes or digests (preferably sha256 or sha512) are equal.

Source Code Entry

Source Code Entry is a pointer to specific commit or revision in a version control system. Unlike commit in a distributed VCS, Source Code Entry also points to specific central VCS repository to ensure auditability.

Release

Release may belong to a Project or a Product.

In the case of a Project Release, Release maps to exactly one Source Code Entry and may have several Artifacts. It may also have any number of components (other Releases).

In the case of a Product Release, Release would only have components (other Releases).

Instance

Instance is a medium which runs software built by organization (Projects or Products). This could be a VM, set of VMs, Kubernetes cluster, PaaS solution - literally anything that is configured to run software. Instrance is defined by its URI.