3 Reasons Youa3 reasons you need experimentation when building software Need Experimentation When Building Software
Optimizely’s CTO, Lawrence Bruhmuller, took to the virtual stage at the CTO Summit alongside fellow technical leaders from Magnetic and Silicon Valley Alliances to talk about Building a Culture of Experimentation. Lawrence spoke about how experimentation has become a crucial part of best-in-class engineering organizations, and how it directly links to current trends in software delivery.
He highlighted the impact that experimentation has for engineering organizations that have realized the potential of using experimentation and feature flagging to create a comprehensive progressive delivery process. Moreover, the companies who spearheaded this culture of experimentation have been able to bring products to market faster while delighting customers. Companies like Farfetch, who use a test and learn approach to take bigger risks, in a controlled environment, for the potential to see higher rewards.
Bringing the Power of Experimentation to Engineering Teams
The agile mindset has been around for many years with most engineering teams adopting this practice to deliver value to customers quickly. Bringing experimentation into Product and Engineering organizations is essential to accelerating learning and ensuring you’re launching the features your customers need. To get the full value of experimentation, it must become deeply integrated into Product and Engineering processes, and likewise, deep into your applications and infrastructure.
So, why is both experimentation and Progressive Delivery important when building software?
1. You don’t break things while building
Spending weeks building complex code and anticipating a specific release date is no longer worth the risk. Engineering teams that have adopted an agile mindset are able to detect bugs more quickly and deploy hotfixes. However, with feature flags, you are able to limit the blast radius of your changes to a small subset of your environment and users. This methodology ensures that a feature can be rolled back as easily as it can be released. The use of this “kill switch” and feature flagging limits negative user sentiment and potential revenue loss.
2. Your team can safely test in production
Progressive Delivery is really testing in production, the smart way. No matter how hard you try to make pre-production environments match production, it’s extremely difficult to catch all of the issues, especially those related to scale or data. With Progressive Delivery, you can do testing in production, but safely with feature flags. Progressive delivery with experimentation and feature flags gives teams new ways to test in production and validate changes before releasing them to everyone, instead of scrambling to roll back changes or deploy hotfixes.
With experimentation, development teams gain the confidence of knowing you’re building the most impactful products and features because you can validate product decisions well before expensive investments are lost. Progressive Delivery also de-couples release from the deploy, enabling Product Managers to decide when to rollout changes more broadly by simply switching a toggle in the UI.
3. Take control of your entire tech stack
How much time is being wasted by cross-functional dependencies and a disjointed tech stack? Giving teams the ability to release and deploy code separately without a centralized schedule is one of the many reasons engineering organizations are turning to experimentation coupled with Progressive Delivery. This is enabling teams to take control of the entire product development lifecycle through the use of feature flags, feature variables, experiments and rollouts.
Your team can safely test and monitor a new experience of a feature to a small subset of traffic. After you’ve gathered your results you can roll out the best iteration to your audience in a controlled way. This allows you to create innovative experiences for your customers in a more agile, iterative way without having to do another code deploy.