VeVe Product Delivery
Problem
VeVe’s product team was hindered by a lack of standardisation across a distributed global team, leading to:
Subjective quality standards: With teams operating across different regions, there was no "single source of truth" for quality. What one team considered "production-ready," another saw as a "beta," leading to inconsistent user experiences.
Environmental & contextual drift: Beyond technical differences between staging and production, there was a "knowledge drift" where global contributors lacked visibility into the details required for a successful VeVe launch.
Handover bottlenecks: Quality checks were frequently missed or misunderstood during handovers between time zones, causing critical defects to bypass staging and reach the live production environment.
Approach
Standardising the global workflow, we shifted from a siloed approach to a unified, transparent delivery model focused on:
Universal quality gates: Establishing objective benchmarks that remove subjectivity from the QC process regardless of which team developed the feature. This was done through better documentation, and more collaborative functional refinement sessions.
Democratised release control: Moving away from a "centralised gatekeeper" (Engineering) and empowering the Product team, who often have the closest context to the market and user needs.
Production-first testing: Ensuring that "internal-only" releases could happen safely in a real environment to bridge the gap between staging assumptions and production reality.
Solution
We implemented Harness (previously Split.io) as the bridge between global development and localised product control:
Global feature flags: We implemented flags to decouple the deployment of code from the activation of features. This allowed global teams to merge code continuously without the pressure of an immediate, high-stakes launch.
Targeted "canary" testing: Using Harness to create specific segments for internal teams and localised user groups. This allowed us to test features in the "real world" with a small audience before a global rollout.
Product-led orchestration: The Product team now have the responsibility of enabling the feature flags. This ensured that those responsible for the quality outcome had the direct power to manage the feature's lifecycle in production.
Deliverables
Release dashboard (Harness): A real-time view of all active/inactive features across every region and user group.
Standardised QC framework: A documented set of requirements that define a "quality outcome" for all global contributors.
Segmented user roles: A permissions matrix allowing internal QA, Product, and specific user groups to have features made available to them for testing.
Outcomes
Alignment on quality by using shared and documented definitions has helped us to remove assumptions. Using feature flags has also allowed us to ensure the testing, and release responsibility is in the hands of the Product team. As a result, we have achieved the following:
Zero-impact rollbacks: If a feature doesn’t meet the expected quality standards, the Product team can instantly disable it via a flag, eliminating the need for emergency code reverts and global coordination.
Improved team velocity: Global teams can ship code at their own pace (Continuous Deployment) while the Product team manages the marketing coordination and launch timing (Continuous Release).
High-fidelity feedback: Internal teams are able to provide feedback based on production-level detail before a single customer sees the new feature.
Learnings
Ownership Over Approval: Empowering Product teams with the ability to control feature releases has increased accountability and reduced the friction between departments.
Combating "flag fatigue": In a global environment, clear naming conventions and "stale flag" alerts are essential to prevent the system from becoming overly complex. We are working on the removal of flags that are no longer required in production.
Bridging the time zone gap: Feature flags act as a communication tool; the state of a flag is a clear indicator of the feature’s live status.