The document discusses several ways to implement parallel features or versions including: 1. Substitution - Implementing a feature by substituting one codebase for another. For example, substituting a new hypervisor driver implementation. 2. Feature toggles - Implementing features that can be toggled on or off via configuration to gradually roll out changes. 3. Feature versioning - Implementing different versions of a feature or component side by side to support multiple versions simultaneously via an abstraction layer. The document provides examples of each approach including substituting queue backends and implementing different network configuration versions via an abstraction layer. Overall the techniques allow adding new features or versions in parallel to existing codebases.