In my journey through the world of software development, one practice has consistently stood out as a game changer for organisations striving for more frequent delivery: the use of feature flags. This approach not only facilitates continuous delivery but also allows teams to deploy new features to production incrementally, ensuring that they can gather valuable feedback before fully rolling out changes to all users.
Embracing Incremental Delivery
When we talk about continuous delivery, it’s essential to accept that we might deploy features that aren’t quite ready for the end user. This doesn’t mean we’re throwing caution to the wind; rather, it’s about delivering small increments of functionality. For instance, you might have a feature that requires multiple deployments to reach its final form. Imagine you want to deliver 10% of a feature now, with the remaining 90% to follow later. This is where feature flags come into play.
A Real-World Example: Azure DevOps
The Azure DevOps team exemplifies this practice beautifully. When you log into their platform, you’ll notice a button in the top right corner that allows you to access preview features. This is a clear indication of how they manage feature flags. Here’s how it works:
- Development Phase: When developers are working on an update, they often ship smaller changes directly. However, for significant new functionalities, they hide these behind feature flags.
- Internal Testing: Initially, the feature is enabled only for the developers’ accounts. They monitor telemetry to assess performance and identify any issues.
- Private Preview: Once the team is satisfied with the internal testing, they may open the feature to a select group within Microsoft. Users can opt in to test the feature, providing feedback and telemetry data.
- Public Preview: If the feature performs well, it transitions to a public preview, where it becomes available to all users who wish to try it out. This stage is crucial for gathering broader feedback.
The Importance of Feedback
Feedback is the lifeblood of this process. When users turn off a feature, they’re prompted to provide reasons. This engagement is invaluable. I’ve personally experienced this when I’ve turned off a feature and received follow-up communication from the product manager. They genuinely want to understand what’s missing or what could be improved. This level of engagement not only helps refine the feature but also fosters a sense of community between the development team and users.
Continuous Monitoring and Adaptation
As the feature progresses through its lifecycle, the team continuously monitors its performance. They assess whether enough users are engaging with the feature and whether it meets their needs. If the telemetry indicates that the feature isn’t performing well, they can quickly disable it, ensuring that it doesn’t negatively impact the user experience.
The Long Road to Full Deployment
It’s worth noting that transitioning a feature from development to full deployment can be a lengthy process. For example, the Azure DevOps team took nearly three years to fully migrate users from old boards to new boards. This was due to the need for ongoing adjustments and improvements based on user feedback and performance metrics.
Conclusion: The Power of Feature Flags
Incorporating feature flags into your development process is a powerful strategy for enabling continuous delivery while safeguarding your users and system. By allowing for incremental releases and gathering real-time feedback, you can ensure that you’re building the right features that truly meet user needs.
As you consider your own practices, I encourage you to reflect on how feature flags could enhance your delivery process. Embrace the opportunity to engage with your users, gather insights, and ultimately deliver a product that resonates with them. After all, in the world of software development, it’s not just about delivering features; it’s about delivering value.