For the second blog in our series on a data-driven approach to customer-centric marketing, we talked with our partner Ryan Lucht, Director of Strategy at Cro Metrics, and AB Tasty data expert Hubert Wassner, who explore the evolution of customer needs, why understanding them is so important for brands today, and the role experimentation plays in meeting those needs. Be sure to check out the series introduction and part 1 if you missed those.
What do we mean when we say “customer needs”?
Today’s savvy customers expect a lot from brands: connected journeys, personalization, innovation, data protection. They’re used to seamless online interactions. They want to find products easily. They want a frictionless experience and flexible payment methods. And if a brand doesn’t deliver, they’ll switch to one that does.“It’s a good thing, it’s forced us to become a lot more customer-centric and make our websites easier to use,” says Ryan.
And it pays to meet customer needs and deliver great customer experiences. In a2020 CX poll, 91% of respondents said they were more likely to make a repeat purchase after a positive experience, and 71% said they’d made a purchase decision based on experience quality.
Why is it important for businesses and brands to understand customer needs?
Ryan believes it’s vital to offer customers the right information at the right time. “Customer needs look different at different stages in the customer journey. When you’re running an experimentation program, the order in which information is presented matters. If you dive into the details too soon, you risk overloading or boring your visitors, but if you wait too long to introduce core information like a refund policy, or a piece of your value proposition, you’ll lose business.
“One of our clients, a leading chain of gyms in the United States, is a good example. A crucial part of their strategy is reassuring customers they’ll feel comfortable in their gyms – that their gyms are inclusive, body-positive, and everyone fits in. It’s an important customer need. But on their homepage, the first thing people wanted to find was ‘Where’s the closest gym to me?’ So they shifted to putting location-centric information first, and establishing their brand afterward: It increased subscriptions immediately. It’s bottom-line revenue impact: if you’re not solving for the right needs at the right time, you’re leaving money on the table.”
Hubert adds, “In online business, your competitors are just a click away, so if users get bored on your site, or it takes them too long to find what they need, they’ll simply go elsewhere. The experience you offer needs to be frustration-free. There are growth results to be found at every stage of the purchase journey, so always think competitively, someone else is surely doing it better somewhere.”
Ryan agrees: “When it comes to understanding your customers’ needs, the more you leverage experimentation and advanced forms of data science, the better your competitive advantage. The reason is that customer needs are unique from one brand to another. An established brand can sell itself differently than a niche brand or a newcomer brand.”
Where can the most valuable data about customer needs be accessed?
There are tools that automate data access. “At AB Tasty,” says Hubert, “we’d begin by installing a tag to gather transaction information for developers to see, for example, when users visit sites and when they leave, to measure bounce rate. Agencies can also gather information about products and purchases, as well as metrics like conversion rate, access to the cart page, dates of sale, and how much conversion rates change within engagement levels (see chart). Once you have enough data, you can begin to test different metrics to see which ones increase the engagement levels of different audience segments.”
Does your site adapt to frequent users or does it treat them as new each time?
Ryan likes to ask executives, “Do you think someone coming to your website for the very first time has the same needs as someone coming for the fifth time? And of course, the answer is ‘no.’ But think ‘new’ vs ‘returning’, or traffic sources – people come to the website from different places: email, advertisements, Facebook, TikTok, Google. All these people have very different contexts, and this gives us a hundred different test ideas. When he asks that same group whether or not they treat a new visitor differently than a returning visitor, unfortunately, the answer is still usually ‘no.’ This is just one of the countless opportunities for brands to use even the most basic data points to start to differentiate experiences.
“It can get very complex very quickly. If you’re going to do an AI or an ML model, it’s important to understand which of the variables we’re asking the model to look at are actually correlative and which are just noise.”
How can data from disparate sources be organized/prioritized for testing?
To combine data in order to act on it in a meaningful way, Hubert explains that the most common tools are CRM plug-ins. “If your user is identified, you can automatically gather more first-party information to save along with the customer journey, which can help you to segment for experimentation a posteriori.”
For Ryan, using disparate data sources isn’t just about prioritizing test ideas, it’s about better understanding test outcomes. “I’ve never met anybody who can use data to predict which test ideas will win. If they could, everyone would have staggering win rates, but even when you look at Microsoft, Google and Netflix, only one in ten ideas pans out. The more impactful side of using disparate data sources occurs after you run an experiment, because experiment results are really only one specific learning; it’s how you tie those results back to other sources of customer data or analytics to piece together a narrative you think might be true and how you use those results to inform your next test idea.”
How can experimentation help you gain insight into customer needs?
For Ryan, insight can be gained on two levels. “An individual experiment can tell you whether you’re getting closer to or further away from fulfilling customer needs, based on if they’re doing the thing you hoped they’d do, but there’s also a meta-analysis level, where once you’ve run a lot of experiments, you start to recognize the patterns. For example, every time we emphasize pricing and make it clearer, we get better outcomes, so perhaps one customer need is better price understanding. Individual experiments help us, but we really learn the broader themes once we’ve run a lot of experiments.”
Hubert adds, “In my mind, when you build the test, you have to answer a question, not focus on making an improvement, because maybe you won’t improve anything, but you will learn something, you’ll increase your knowledge, and that’s the real goal.”
How can insights about customer needs contribute to a better customer experience?
“The better and more granularly you understand your customers and their needs, the more it will seem to them that you’re able to read their minds; you’ll please them and win their loyalty and win in the marketplace. The businesses that are doing this – doing a lot of experiments and doing them well – are the businesses that win. It’s as simple as that”, states Ryan.
“When testing, we shouldn’t be asking business questions, but user questions and only then adding business KPIs,” says Hubert. “It’s vital to ask customer-centric questions first, not business-centric ones. This way, you can boost your business while better satisfying your customers.”
Ryan agrees: “It’s a very positive way to frame it. This is how we win with our customers because if we’re better at meeting their needs, everyone wins.”
Want more coverage of data topics? Be sure to come back in two weeks for the third installment in our Customer-Centric Data Series!
For the first blog in our series on the different ways you can utilize data to help brands build a more customer-centric vision, our partner Aimee Bos, VP of Analytics and Data StrategyatZion & Zion, and AB Tasty’s Chief Data Scientist, Hubert Wassner, delve into how experimentation data can help you better understand your customers. They explore the who, what, and when of testing, discuss key customer insight metrics, the importance of audience sizes, where your best ideas for testing are lurking, and more.
Why is experimentation important for understanding customers?
Put simply, experimentation enables brands to “perfect” their products. By improving upon the value that’s already been developed, the customer experience is improved. And each time a new feature or option is added to a product, consistent A/B testing ensures consistent customer reactions. Experimentation operates in a feedback loop with customers, moving beyond conversions or acquisition, improving adoption and retention, eventually making your product indispensable to your customers.
Which key metrics deliver the best insights about customers?
Hubert says, “Basically, the metrics that deliver reliable customer insights are conversion rate and average cart value, segmented on meaningful criteria such as geolocation, or CRM data. But there are others that are interesting, such as revenue per visitor (RPV). It’s a low-value metric but important to monitor.
“And average order value (AOV) is another. This metric will vary enormously over time so it shouldn’t be taken as fact. Seasonality (think Christmas or Black Friday, for example), or even one huge buyer can skew the statistics. It needs to be viewed in multiple contexts to get a better understanding of progress – not just Year over Year but Month over Month and even Week over Week to be effectively computed.
“AOV and RPV are important because their omission can lead to data bias. People often forget to analyze metrics about non-converting visitors. Of course, AOV only gives you data about those who actually make it fully through the purchase cycle.”
And Aimee agrees, “Well, win rate, of course. For e-commerce it’s conversions, value, RPV, how they’re moving the needle, are they increasing the value of the average order? We want as much data as possible at the most granular level possible for lead generation, gated content, and micro-conversions… These smaller tests can be tied to more customer-centric metrics, as opposed to larger business-level metrics such as revenue, growth, number of customers, ROI, etc.”
Where are the best sources for experimentation ideas?
Aimee has her own process. “I start by asking myself what my business objectives are (micro/macro). Then I check Google Analytics and ask myself ‘Where are conversions not happening?’ For experimentation ideas, I check tools like HotJar, voice-of-customer data (VoC), Qualtrics data, see actual customer feedback, user panelists: give them choices, ask what they prefer. Always hypothesize friction points, these will give you your best ideas for testing!”
Hubert likes to get his ideas from NPS scores. “Net promoter score (NPS) has useful information and comments and can be a good starting point for fact-based rather than random hypotheses, which are a waste of time. NPS can add some real focus to well-designed tests. It’s based on a single question: On a scale of 0 to 10, how likely are you to recommend this company’s product or service to a friend or a colleague? NPS is a good way to identify areas that need improvement, but as a signifier of a company’s CX score, it needs to be paired with qualitative insights to understand the context behind the score.”
How do I pull everything together? What do I need to carry out my tests?
Obviously, you need a tool to run your AB tests and collect the data necessary to make good hypotheses, but a good way to add a big boost to your testing program – and help drive more ROI – is with tools likeContentsquare orFullstory which offer more data on customer behavior and experience to focus your testing data. Designed to bridge the gap between the digital experiences companies think they’re offering their customers and what customers are actually getting, analytics platforms can provide real opportunities for useful testing hypotheses by offering more educated guesses about variables for testing to improve CX.
Aimee has an important note about initial data collection, too. “You also need three months of data before you begin testing if you want reliable results, and you need to be sure it’s accurate. Most people rely on Google Analytics (GA). That’s a lot of data to handle and organize. A Customer Data Platform (CDP) represents a significant investment, but centralizing your data in one is extremely useful for customer segmentation and detailed analysis. The sooner you can invest in a tool like a CDP, the better for a sustainable data architecture strategy.
I’m ready to test, but I have several hypotheses. How to begin?
According to Aimee, “when that happens, we break large problems into smaller ones. We have a customer that wants to triple their business and also wants a CDP this year among other goals. It’s a lot! To help them, we build out a customer journey roadmap to see what influences the client’s goals. We select five or six high-level goals (landing page, navigation measured against click-through rate, for example), then test various aspects of each of these goals.”
Hubert notes, “it’s possible to test more than one hypothesis at once if your sample size is big enough. But first, you need to know what the statistical power of your experiment is. Small sample sizes can only detect big effects: it’s important to know the order of magnitude in order to carry out meaningful experiments. It’s always best to test your variables on a large audience, with varied behaviors and needs, in order to get the most reliable and informed results.”
Is there value in running data-gathering experiments (as opposed to improving conversion / driving a specific metric)?
Hubert is a full believer in testing no matter what you think may happen. “Testing is always useful because a good test teaches you something, you learn something, win or lose. As long as you have a hypothesis. For instance, measuring the effect of a (supposed) selling feature (like an ad or sale) is useful. You know how much an ad or a sale costs, but without experimenting you don’t know how much it pays.
“Or say you have a 100% win rate. That means you’re not learning anymore. So you test to gain new information in other areas, you don’t just stand still. You minimize losses to maximize wins.”
As mobile usage has increased and spread widely all over the world, mobile apps, as a result, have also risen in popularity. This means it’s important for app developers to stay current on the latest development tools in order to build high quality apps.
There are now many tools out there and if you’ve been keeping up with the mobile development world, you’ve probably already come across Flutter, which has generated a lot of buzz since its release in 2017.
What is Flutter?
Flutter is a free and open-source UI software development kit created by Google. It is used to develop natively compiled, multi-platform applications for mobile, web, and desktop from a single codebase and programming language.
This has greatly contributed to Flutter’s appeal and why it’s become so popular today.
It has been designed to support mobile apps that run on both Android and iOS allowing you to build apps on different platforms from the same codebase. This means, for example, that the code you used to publish your Android app can also be deployed on iOS, the web or desktop with little change.
Moreover, Flutter’s support for desktop devices means you can scale your app to Windows, Linux and Mac and hence reach more users on these platforms’ app stores.
Put simply, Flutter essentially provides a widget-based UI library, including UI elements such as text boxes, buttons and image blocks that can be used to create and personalize your app.
To give a better visual of the coding process when writing your first app in Flutter, the below image gives a glimpse of a code for a basic Flutter app-everything in the code is a widget:
We will come back to Flutter widgets in a bit but for a deeper understanding of Flutter, it is worth taking a look at its architecture first to understand the concepts that form its design.
Flutter architecture
Flutter consists of two major parts- a framework with a UI library based on widgets, which contains various reusable UI elements, such as sliders, buttons, text inputs, and others, and a software development kit (SDK)- the tools that help develop apps i.e., to compile code into native machine code for the use of iOS and Android.
The following image shows the major components of Flutter, which are organized around layers. This layered, extensible system exists as a series of independent libraries that each depend on the underlying layer.
The three main architectural layers of Flutter consist of:
Framework: Developers interact with Flutter primarily through the Flutter framework, a modern reactive framework written in the Dart language. This framework provides a rich set of libraries that are divided into layers: basic foundational classes, rendering layer, widgets layer and Material and Cupertino libraries.
Engine: In the diagram above, we can see that the next level of Flutter is an Engine written in C++ and which provides low-level implementation of Flutter’s core APIs.
Embedder: This platform-specific embedder provides an entry point and coordinates with the underlying operating system to access services such as accessibility, rendering surfaces, and input. The embedder is written in a platform-specific language such as Java and C++ for Android, Objective-C/Objective-C++ for iOS and macOS, and C++ for Windows and Linux.
Flutter uses Dart, also created by Google, for writing code. Dart is a client-optimized language for developing fast apps on any platform with the goal of offering the most productive programming language for multi-platform development.
You can look at Flutter as the front-end UI that you use to develop the app and Dart as the backend code that is automatically generated.
Dart compilers and runtimes support the combination of both just-in-time (JIT) compilation, which provides a faster development cycle and allows for hot reloads of the Flutter app, as well as ahead-of-time (AOT) compilation. AOT compiled programs usually run quicker as they are compiled before execution while JIT programs are executed at or just before runtime.
Therefore, Dart combines the advantages of both JIT and AOT compilation: fast development cycles, and fast execution and startup times.
Everything on Flutter is a widget
In Flutter, basically everything is a widget, which is the core concept of the framework. Widgets are the building blocks of a Flutter’s app user interface and represent an immutable declaration of part of the user interface. In other words, they declare how a UI should look.
Thus, to build any app in Flutter, you start with a widget. The main underlying idea is that you build your UI out of widgets. Widgets describe what their view should look like given their current configuration and state. It includes a text widget, row widget, column widget, container widget, and many more.
To be more precise, Flutter draws its own widgets and uses the Skia library for rendering UI instead of relying on platform-specific components, which reduces communication between the Flutter apps and the mobile platforms. In other words, as Flutter uses its own rendering engine, UI built in Flutter can be launched on virtually any platform. This ensures consistency of the application interface across all platforms.
As far as their layout, the widgets within a Flutter app form a hierarchy where a widget is a composition of other widgets and each widget inherits properties from its parent. Widgets, then, are arranged into a tree and nested inside of each other to parent and child widget.
The image below illustrates how the UI is built using widgets:
Flutter has a rich library of pre-built widgets, which speeds up and simplifies the process of creating a UI/UX. It’s also possible to create custom widgets.
There are primarily two types of widgets in Flutter: stateless, whose properties don’t change over time such as Icon, IconButton, and Text, and stateful, which are dynamic in nature such as Checkbox, Radio, Slider, InkWell and Form.
Furthermore, Flutter has specific widgets specific to a particular platform – Material Design for Android or Cupertino style for iOS.
Benefits
Hot reload
Flutter enables faster app development using its hot reload which allows developers to view code changes as soon as they are saved. The changed code can then be reloaded immediately while the app is running and without losing the current application state, which means that developers can make quick changes and see the outcome immediately.
It also makes it easier to test out new ideas and experiment with new features helping boost creativity.
Unlike other cross-platform frameworks, there isn’t any kind of bridge converting Flutter widgets into the native components, which would slow things down and cause performance issues. Instead, Flutter’s core graphic machine, Skia (a 2D graphics rendering library), compiles the UI to native code without the need for any additional software as the user interacts with the app.
React Native, for example, uses JavaScript as a programming language to build an application and it uses a bridge to communicate with native components, which would affect the overall performance of the app.
As Flutter doesn’t need this bridge, apps built using Flutter run faster than apps developed with React Native.
Easy to learn and use
Compared to React Native or Java, Flutter is much easier to learn and use.
As discussed previously, Flutter uses widgets which makes the UI easy to use providing you with all the features you need to build your app.
The language Flutter uses, Dart, is also easy to learn especially for those who have already worked with other popular languages such as Java and C#.
Faster development and release time to market
One of the most prominent features of Flutter is its hot reload, as mentioned above. Hot reload allows developers to see changes to their codes almost instantly. In other words, with the Flutter framework, there is no need to recompile the code every time you make a change. This is what largely makes Flutter app development time faster than others.
Furthermore, since developers are working with one code base for both iOS and Android apps, this means they don’t have to write a platform-specific code. Any 2D-based UI can be implemented in Flutter without interacting with a native application counterpart.
Therefore, using a single code base, you can develop one UI design for both iOS and Android, which helps save time and resources.
Open to everyone
Flutter is open source and free to use and it also provides extensive documentation and community support in case any issues arise. Because of its rising popularity, Flutter has a fast-growing community of developers who are always ready to share their knowledge and experience so there’s a lot of support out there to help you get set up with the tool.
Flutter vs other app development frameworks
As we’ve seen, Flutter offers many advantages that arguably make it a superior choice to other hybrid development frameworks such as React Native.
There are many things that sets Flutter apart from React Native- things we’ve already mentioned such as the fact that the latter’s programming language, Javascript, requires a bridge to communicate with different native components while in Flutter no bridge is needed and so this ensures faster app development.
Also, the great thing about Flutter that also sets it apart is that it has UI widgets packaged within itself without relying on any third-party tools like React Native, which could affect app performance. In other words, within the Flutter framework, you have everything you need for developing mobile apps. Not to mention that Flutter provides a unified UI experience across all platforms.
Flutter is also ideal if you’re looking to build a minimum viable product (MVP) if you’re short on time using its expansive widget collection.
Many major companies today have used Flutter to develop their apps including:
Google Ads, Alibaba, Hamilton Musical as well as Reflectly (who provide their own take on why they decided to switch from React Native to Flutter).
To sum it all up…
Flutter is a great choice for mobile app development projects of any size. Because it’s easy to learn and comes with clear and detailed documentation, developers can become acquainted with the Flutter framework quite quickly.
You can even integrate a feature flag solution inside your Flutter app, which will give you more control over your app releases by targeting certain user groups as well as allowing you to easily roll back releases in case anything goes wrong with minimal impact.
Feature flags will allow you to bypass app store validation as with remote config implemented through feature flags, any changes can be made instantly and remotely and then released to a small subset of users to get feedback before releasing it to everyone else. Therefore, you can upgrade your app continuously in real-time based on feedback from your users without waiting on app store approval.
With AB Tasty, you can easily get your Flutter app up and running on our feature flagging platform using our client library with preconfigured methods to implement the Decision API.
At AB Tasty, we think, breathe, eat, drink, and sleep experimentation – all in the name of improving digital experiences. Over the coming months, we’re going to peel back a layer to take a closer look at what’s under the hood of experimentation: the data. Data drives the experimentation cycle – all of the ideation, hypotheses, statistical management, and test-result analysis. It’s no secret that today’s world runs on data, and the development of your digital experience should be no different.
Customers today – whether speaking of a business buyer or an everyday consumer – prioritize experience over other aspects of a brand. Over the coming months, we’ll be talking with some of our partners and data experts at AB Tasty to explore how brands can use data to better profile customers, understand their needs, and forge valuable emotional connections with them, as well as to measure overall digital impact and build a data-based, customer-centric vision.
Before we jump right in, let’s take a moment to center our discussions of data within a privacy-conscious scope.
Every marketer knows that nothing is more precious than customer data, but acquiring it has become increasingly thorny. Europe’s far-reaching General Data Protection Regulation (GDPR), enforced in 2018, was a game-changer, requiring companies to get consent before collecting personal data. The California Consumer Privacy Act (CCPA) soon followed, giving consumers the right, among other things, to opt-out from the sale of their data.
Even if you think your business isn’t subject to such regulations, you might need to consider compliance anyway. E-commerce has erased national borders, allowing goods and services to be purchased with little regard for their origin. The globalization of brands means that an influencer in Pennsylvania who posts about your products could drive Parisian customers to your site, and suddenly you’re collecting data subject to GDPR guidelines – which require customer consent for use.
Leveraging the right customer data
Understanding your customers and their needs and changing behaviors is key to delivering timely, relevant messages that boost loyalty and drive revenue. Whether your company sells yoga mats, yams, or yacht insurance, you need data to enhance their experience with you and strengthen your relationship with them.
But how can you leverage the data you need while ensuring your customers continue to trust you? In recent years, consumers have grown skeptical of handing over their personal data. According to a 2021survey by KMPG, 86% of consumers questioned said they feel a growing concern about data privacy. And they should be: the same survey showed that 62% of business leaders felt that their companies should do more to protect customer data.
Thanks to the well-deserved death of third-party cookies, marketers are now seeking the data they need by forging consent-driven first-party relationships with their audiences. While this is a step in the right direction, data privacy needs to go further.
Enhancing brand value through consent- and privacy-oriented processes
Consumers are more likely to buy from companies with transparent privacy practices that clearly explain how personal data is collected, used, and stored. Giving or withholding consent for the use of their data should be effortless, and if requested, customers should know that brands will not only delete all the data they’ve stored, but also remove any access privileges they may have granted to partners or third parties.
By making consent and preferences easily manageable, a multitude of data can be shared at every customer touchpoint, revealing customer behaviors, preferences, attitudes, and values. To deal with this omnichannel data, a Consent Management Platform (CMP) can help you collect and handle personal information in a privacy-first way. A CMP enables you to maintain consent logs across all customer-facing channels, ensuring that the personal data processing is always in line with the data subject’s preferences, adding an ethical dimension to the customer experience.
Ethical handling of customer data is mission-critical if brands are to succeed today. From big tech to retail, companies of every stripe are taking an ethical and privacy-centered approach to data, because, as anarticle in the Harvard Business Review aptly put it, “Privacy is to the digital age what product safety was to the Industrial Age.”
Customer data can help you deliver relevant, personalized, and innovative experiences.
It can build your brand by generating new leads, predicting sales and marketing trends, and enabling you to create the personalized messages that customers love. But unless your data is protected and unbreachable, your customer base is at risk.
At AB Tasty, we’re actively committed to ensuring compliance with all relevant privacy regulations and to being entirely transparent with our users with regard to the consensual first-party and impersonal statistical data we collect when they visit our site. We strive to ensure that our partner agencies and SMEs take accountability and responsibility for the use of their customers’ personal data and respond rapidly should customers want to opt-out or be forgotten.
In this series of articles, we’ll be looking at using data to get value from anonymous visitors, using experimentation to discover customer needs, creating emotional connections to customers with data, and using data to measure your digital impact – all of this featuring data experts from the industry to guide us on our journey. See you soon!
In modern software development, speed and agility are crucial when it comes to developing and releasing software. However, when you have a large team of developers working simultaneously, branching and merging code can become messy fast.
Therefore, teams need to have a process in place to implement multiple changes at once. This is where having an efficient branching strategy becomes a priority for these teams.
If you’re looking to enhance your team’s development workflow and streamline release processes, book a free demo to see how AB Tasty can help.
What is a branching strategy?
Branches are primarily used as a means for teams to develop features giving them a separate workspace for their code. These branches are usually merged back to a master branch upon completion of work. In this way, features (and any bug and bug fixes) are kept apart from each other allowing you to fix mistakes more easily.
This means that branches protect the mainline of code and any changes made to any given branch don’t affect other developers.
A branching strategy, therefore, is the strategy that software development teams adopt when writing, merging and deploying code when using a version control system.
It is essentially a set of rules that developers can follow to stipulate how they interact with a shared codebase.
Such a strategy is necessary as it helps keep repositories organized to avoid errors in the application and the dreaded merge hell when multiple developers are working simultaneously and are all adding their changes at the same time.
Such merge conflicts would eventually deter shipping code quickly and thus hindering from creating and maintaining an efficient DevOps process as the whole purpose of DevOps is creating a fast workflow that would allow for the release of small batches of code.
Thus, adhering to a branching strategy will help solve this issue so that developers can work together without stepping on each other’s toes. In other words, it enables teams to work in parallel to achieve faster releases and fewer conflicts by creating a clear process when making changes to source control.
When we talk about branches, we are referring to independent lines of code that branch off the master branch, allowing developers to work independently before merging their changes back to the code base.
In this post, we will outline some of the branching strategies that teams use in order to organize their workflow where we will look at their pros and cons and which strategy you should choose based on your needs, objectives and your team’s capabilities.
Why you need a branching strategy
As mentioned above, having a branching strategy is necessary to avoid conflicts when merging and to allow for the easier integration of changes into the master trunk.
A branching strategy aims to:
Enhance productivity by ensuring proper coordination among developers
Enable parallel development
Help organize a series of planned, structured releases
Map a clear path when making changes to software through to production
Maintain a bug-free code where developers can quickly fix issues and get these changes back to production without disrupting the development workflow
In short, implementing effective Git branching strategies is crucial for streamlined collaboration. Complementing this with robust Feature Experimentation allows teams to test and deploy features confidently, ensuring optimal performance across all channels
Git branching
Branches are not just exclusive to Git. However, in this article we focus on Git due to the many advantages this model of branching offers.
Consequently, before we delve into the various branching strategies out there, including Git branching strategies, we will take a look at how Git actually handles branches and why it’s a standout among other VCS tools.
Git branches allow developers to diverge from the main branch by creating separate branches to isolate code changes. The default branch in Git is the master branch.
The biggest advantage of a Git branch is that it’s ‘lightweight’, meaning that data consists of a series of snapshots so with every commit you make, Git takes a picture of what your files look like at that moment and stores a reference to that snapshot. This means that these branches aren’t just copies of the file system but simply a pointer to the latest commit.
Meanwhile, other VCS tools store information as a list of file-based changes which may slow things down and use up significant space.
In Git, a branch is essentially a reference or a pointer to the latest commit in a given context; it’s not a container for commits. As you create new commits in the new branch, Git creates new pointers to track the changes. Git branches, then, can be seen as a pointer to a snapshot of your changes.
The images below illustrate this concept, where the top image shows the master branch and a pointer pointing to the last commit and the image right below it shows what happens when you create a new branch called ‘dev’- a new pointer now points to the latest commit.
To sum up, the Git branching model is lightweight compared to other version control systems; this is why it’s so easy and cheap to create branches in Git, as the whole code doesn’t need to be copied to the branch creating a large amount of duplicate files, as opposed to other VCS tools.
What are some common Git branching strategies?
GitFlow
Considered to be a bit complicated and advanced for many of today’s projects, GitFlow enables parallel development where developers can work separately from the master branch on features where a feature branch is created from the master branch.
Afterwards, when changes are complete, the developer merges these changes back to the master branch for release.
This branching strategy consists of the following branches:
Master
Develop
Feature- to develop new features that branches off the develop branch
Release- help prepare a new production release; usually branched from the develop branch and must be merged back to both develop and master
Hotfix- also helps prepare for a release but unlike release branches, hotfix branches arise from a bug that has been discovered and must be resolved; it enables developers to keep working on their own changes on the develop branch while the bug is being fixed.
The main and develop branches are considered to be the main branches, with an infinite lifetime, while the rest are supporting branches that are meant to aid parallel development among developers, usually short-lived.
Author: Vincent Driessen source License: Creative Commons BY-SA
GitFlow pros and cons
Perhaps the most obvious benefit of this model is that it allows for parallel development to protect the production code so the main branch remains stable for release while developers work on separate branches.
Moreover, the various types of branches make it easier for developers to organize their work. This strategy contains separate and straightforward branches for specific purposes though for that reason it may become complicated for many use cases.
It is also ideal when handling multiple versions of the production code.
However, as more branches are added, they may become difficult to manage as developers merge their changes from the development branch to the main. Developers will first need to create the release branch then make sure any final work is also merged back into the development branch and then that release branch will need to be merged into the main branch.
In the event that changes are tested and the test fails, it would become increasingly difficult to figure out where the issue is exactly as developers are lost in a sea of commits.
Indeed, due to GitFlow’s complexity, it could slow down the development process and release cycle. In that sense, GitFlow is not an efficient approach for teams wanting to implement continuous integration and continuous delivery.
Thus, in that case a much simpler workflow such as GitHub Flow is recommended.
GitHub Flow
GitHub Flow is a simpler alternative to GitFlow ideal for smaller teams as they don’t need to manage multiple versions.
Unlike GitFlow, this model doesn’t have release branches. You start off with the main branch then developers create branches, feature branches that stem directly from the master, to isolate their work which are then merged back into main. The feature branch is then deleted.
The main idea behind this model is keeping the master code in a constant deployable state and hence can support continuous integration and continuous delivery processes.
GitHub Flow pros and cons
Github Flow focuses on Agile principles and so it is a fast and streamlined branching strategy with short production cycles and frequent releases.
This strategy also allows for fast feedback loops so that teams can quickly identify issues and resolve them.
Since there is no development branch as you are testing and automating changes to one branch which allows for quick and continuous deployment.
This strategy is particularly suited for small teams and web applications and it is ideal when you need to maintain a single production version.
Thus, this strategy is not suitable for handling multiple versions of the code.
Furthermore, the lack of development branches makes this strategy more susceptible to bugs and so can lead to an unstable production code if branches are not properly tested before merging with the master-release preparation and bug fixes happen in this branch. The master branch, as a result, can become cluttered more easily as it serves as both a production and development branch.
A further disadvantage is as this model is more suited to small teams and hence, as teams grow merge conflicts can occur as everyone is merging to the same branch and there is a lack of transparency meaning developers cannot see what other developers are working on.
GitLab Flow
GitLab Flow is a simpler alternative to GitFlow that combines feature-driven development and feature branching with issue tracking.
With GitFlow, developers create a develop branch and make that the default while GitLab Flow works with the main branch right away.
GitLab Flow is great when you want to maintain multiple environments and when you prefer to have a staging environment separate from the production environment. Then, whenever the main branch is ready to be deployed, you can merge back into the production branch and release it.
Thus, this strategy offers propers isolation between environments allowing developers to maintain several versions of software in different environments.
While GitHub Flow assumes that you can deploy into production whenever you merge a feature branch into the master, GitLab Flow seeks to resolve that issue by allowing the code to pass through internal environments before it reaches production, as seen in the image below.
Therefore, this method is suited for situations where you don’t control the timing of the release, such as an iOS app that needs to go through the App store validation first or when you have specific deployment windows.
Trunk-based development
Trunk-based development is a branching strategy that in fact requires no branches but instead, developers integrate their changes into a shared trunk at least once a day. This shared trunk should be ready for release anytime.
The main idea behind this strategy is that developers make smaller changes more frequently and thus the goal is to limit long-lasting branches and avoid merge conflicts as all developers work on the same branch. In other words, developers commit directly into the trunk without the use of branches.
Consequently, trunk-based development is a key enabler of continuous integration (CI) and continuous delivery (CD) since changes are done more frequently to the trunk, often multiple times a day (CI) which allows features to be released much faster (CD).
This strategy is often combined with feature flags. As the trunk is always kept ready for release, feature flags help decouple deployment from release so any changes that are not ready can be wrapped in a feature flag and kept hidden while features that are complete can be released to end-users without delay.
As we’ve seen, trunk-based development paves the way for continuous integration as the trunk is kept constantly updated.
It also enhances collaboration as developers have better visibility over what changes other developers are making as commits are made directly into the trunk without the need for branches. This is unlike other branching methods where each developer works independently in their own branch and any changes that occur in that branch can only be seen after merging into the main branch.
Because trunk-based development does not require branches, this eliminates the stress of long-lived branches and hence, merge conflicts or the so-called ‘merge hell’ as developers are pushing small changes much more often. This also makes it easier to resolve any conflicts that may arise.
Finally, this strategy allows for quicker releases as the shared trunk is kept in a constant releasable state with a continuous stream of work being integrated into the trunk which results in a more stable release.
However, this strategy is suited to more senior developers as this strategy offers a great amount of autonomy which non-experienced developers might find daunting as they are interacting directly with the shared trunk. Thus, for a more junior team whose work you may need to monitor closely, you may opt for a Git branching strategy.
Additionally, in fast-paced environments using trunk-based development, feature flags can provide the flexibility needed to ship incomplete features safely.
How to choose the best branching strategy for your team
When first starting out, it’s best to keep things simple and so initially GitHub Flow or Trunk-based development may work best. They are also ideal for smaller teams requiring only a single version of a release to be maintained.
GitFlow is great for open-source projects that require strict access control to changes. This is especially important as open-source projects allow anyone to contribute and so with Git Flow, you can check what is being introduced into the source code.
However, GitFlow, as previously mentioned, is not suitable when wanting to implement a DevOps environment. In this case, the other strategies discussed are a better fit for an Agile DevOps process and to support your CI and CD pipeline.
The following table summarizes the strategies discussed in this article and which strategy is appropriate in which context:
Product type and its release method
Team size
Collaboration maturity
Applicable mainstream branch mode
All
Small team
High
Trunk-Based Development (TBD)
Products that support continuous deployment and release, such as SaaS products
Middle
Moderate
GitHub-Flow and TBD
Products with a definite release window and a periodic version release cadence, such as iOS apps
Middle
Moderate
Git-Flow and GitLab-Flow with release branch
Products that are demanding for product quality and support continuous deployment and release, such as basic platform products
Middle
Moderate
GitLab-Flow
Products that are demanding for product quality and have a long maintenance cycle for released versions, such as 2B basic platform products
Large
Moderate
Git-Flow
To sum up, there is no such thing as the perfect strategy. The strategy you choose will depend on your team and the nature and complexity of your project and so this should be evaluated on a case-by-case basis.
It’s also fine to start off with one strategy and adapt it over time according to your needs. Needless to say, whatever strategy you end up choosing should aim to increase your team’s productivity by giving them a clear and consistent strategy to organize their work.
💡 Pro Tip: Want to personalize developer experiences across branches or environments? Explore our Personalization Guide for insights.
You’ve spent months building your brand and getting your website just right, but it’s all for nothing if you can’t turn your hard work into sales. And landing pages are one of the best resources you can use to optimize your conversions. Well-designed landing pages can lead customers to specific products or services, encourage them to take immediate action and capture contact details to build your customer base.
Landing pages are highly effective conversion tools (Source)
Landing pages have conversion rates ranging from 3% to 11.45% and higher, depending on the features they include. How well your page performs depends entirely on how well you’ve designed it and running tests on your page can help you continuously find the winning formula.
What is a landing page?
Landing pages are website pages designed to target a specific visitor according to a particular demographic, interest, or buying behavior. Your landing page should attract leads in the most effective way possible and then convert your visitors into buyers or nudge them towards taking another kind of action.
Landing pages are designed to encourage exploration and could have a number of goals. Technically, any page on your website can become a landing page for a campaign, but this could distract your customers and send them down a rabbit hole instead of focusing on the action you want them to take. Good landing pages have a singular focus or call to action (CTA), making them excellent marketing and lead generation tools.
Why is landing page design so important?
Landing pages let you nudge your leads straight towards a conversion through strategically placed call to action elements like links, forms, buttons, and others. A well-designed landing page lures visitors through a message that piques their interest, like a discount, a piece of content they’d like to read, or a free trial to test a product.
Landing pages target customers based on specific demographics, like browsing behavior (Source)
While it doesn’t fully show off your brand’s personality, it does lay the groundwork for getting to know it better. When a customer clicks on a call to action, they want to find more information about whatever has caught their eye, and that’s when you’ll convert them from a visitor to a solid lead or even a paying customer.
Aside from optimizing your users’ actions, landing pages make it easy to track visitors and modify your pages as required. Through A/B testing, one item on your landing page is changed on the variation to determine the impact of the change.
The importance of lead capture landing pages
Lead capture landing pages (sometimes called squeeze pages) can also gather important customer details (such as names, email, phone numbers). Lead capture landing pages offer your customers something of interest (e.g., a free trial or e-book) in exchange for completing a short form that collects their personal information.
You can use these personal details to target them in the future, with email campaigns, social media advertising, or follow-up calls by your sales representatives. Targeting potential customers strengthens the likelihood of a conversion down the line.
The essential elements of a landing page
A landing page should always have one conversion goal. From headlines to images to buttons, every element should bring you closer to that objective.
Clear and effective copywriting
An excellent landing page needs punchy, clear copywriting to convert. You should describe the benefits of your product/service and what your company does as concisely as possible. Don’t overstuff your landing page with copy that doesn’t add value!
A few copywriting tips to bear in mind:
Always direct your visitors to the primary call to action with your copy.
Keep sentences short and to the point.
Avoid using too many adverbs (quickly, obviously, actually).
Instead of passive voice, use active voice to inspire action.
Edit your work to delete anything that adds more detail than necessary.
Visually attractive and clear CTAs
Your call to action (CTA) is the most important element on your landing page. When you create your CTA, use copy that inspires the visitor to continue along their journey with you. Compare generic calls to action like “Click Here” or “Submit” to powerful statements like “Yes, I want to save money” or “Update my wardrobe.” The latter sounds better!
Always make sure that your CTA button stands out from the other elements on the page. Follow the example set by the Dutch watch brand Cluse: When their team noticed the bounce rate for their landing pages was high and that not many users advanced to the product display pages, it became evident that the CTA on the page wasn’t clear enough.
By changing the call to action used in their landing page design to best match practice guidelines, they instantly saw an uplift in conversions and sales. The winning variation increased the click-through rate to their product display page by 2.39% and realized a 1.12% uplift in transactions.
Eye-catching headers
Good landing pages have simple, compelling and uncluttered headers. If you include an image, make sure it’s related to your product or service. Keep all the action above the fold and use directional cues to steer visitors to that all-important CTA button. Additionally, you should avoid including distracting elements like links or phone numbers.
Social proof
People will conform to the majority in order to be accepted or liked. This is known as social proof. If a prospect sees that another person likes a product or has had a positive experience with your company, your odds of conversion go up.
When you’re browsing a landing page and see a testimonial from an industry expert you respect, that’s social proof. When you’re cruising a pricing page and you see that an industry giant is already using the tool, that’s social proof. When you sign up for a demo because you know the tool solved the exact problem you have for a similar company, that’s social proof.
Think of it as borrowing third-party influence to sway potential customers. Brightlocal found that the average consumer reads at least ten reviews before trusting a business. Your odds of converting goes up when you see that others had used the product before them and were happy with the end result.
Social proof may include customer reviews, a list of existing customers, user testimonials and awards you may have earned. Take a page from Decathlon’s playbook: By testing different options, you can also identify which works best for winning over your customers!
A unique selling proposition (USP)
What makes you different from everyone else? You don’t need to be more advanced or offer huge discounts; you just need a convincing brand promise. Are you the fastest? Most reliable? Most knowledgeable? You only have a few lines of copy and limited visuals to get your point across, so be short and sharp.
Hero images
First impressions are essential — and when it comes to website optimization, they’re more important than ever! A hero image is a large banner that appears at the top of your page, usually occupying the full length of the screen. Look for an image that represents (or is relevant) to your product or company. You can even include a call to action and/or a text overlay to guide your users down the conversion funnel.
Additional information in the footer
Remember that even though you never want to distract customers from the call to action, you’ll still want them to find more information about your company if they don’t convert immediately.
Keep your calls to action and more compelling arguments above the fold, but include additional information like newsletter sign-ups, links to your social media pages, or ‘About us’ pages in the footer for customers that need to know a little more about you before proceeding.
Landing pages should be simple and focus on the call to action (Source)
How to design and optimize your landing pages
Now that you understand some of the best practices for designing high-converting landing pages, let’s dig into the nitty-gritty of your landing pages’ design. Here are ten best practices to design a landing page that converts successfully:
1. Identify your target audience and their needs
Designing a visually stunning landing page doesn’t necessarily mean it’s effective. Truly great landing pages understand what visitors are looking for and provide quality content tailored to your target audience. Before designing your page, establish who it’s for and what they would like to know. Keep testing variations of the page to see which elements resonate the most with your audience and your landing page can become a powerful conversion tool.
2. Use strategic and relevant hero images
There should be a clear connection between your brand and the hero image you display on your landing page. Misplaced images can confuse visitors or create a poor impression of the brand. Make sure that the image you use fosters an instant connection between you and your users by either answering a question, nudging them to advance down the conversion funnel, or just encouraging them to find out more about you.
3. Refine your headlines
We’ve already spoken about the role copywriting plays in conversion, so make sure that you continually test and refine your headlines. Landing page headlines promote your value proposition, while the subheadings provide further explanations. Keep these short, sharp and to the point. If you aren’t sure which value proposition to promote, try testing different versions to see which version resonates the most with visitors and results in the most click-throughs.
4. Keep navigation simple
Landing pages have to be optimized to create the best user experience possible. Keeping navigation simple, intuitive and straightforward will boost user retention and lead generation while driving your core message home. ECCO Shoes are a great example of this: By making their call to action button larger and repositioning it above the fold, cutting a few visual distractions and adding icons highlighting special offers like free delivery, their new landing page was able to outperform the original by over 17%!
5. Harmonize your colors
Colors can evoke powerful emotions or cause confusion. Use color strategically and sparingly on your landing page so it highlights the most important elements like your call to action, add-to-cart button or contact forms. You can also use negative space to break up the page and make it easier to digest the most important information.
6. Place your important elements above the fold
The ‘above the fold’ section is the part of your website that’s visible in the browser without scrolling down. It’s the first thing people see, so make sure you grab their attention with compelling imagery, copy and headers.
7. Make sure it displays properly across devices
Today’s consumers are using a host of different devices and operating systems. This means your website has to display properly across all of them if you want their business. Ensure that your landing pages are optimized to display correctly on all available platforms.
8. Optimize your site’s load times
Your site’s loading time affects your user experience and your Google ranking. Slow websites contribute to high bounce rates and cart abandonment. You can optimize your load times by enabling compression, using web-friendly imagery and keeping redirects to a minimum.
9. Improve your SEO to increase traffic and conversions
SEO (Search Engine Optimization) is a complex subject, but anyone can make small tweaks to their landing page to improve their ranking. Ensure that your title tags and meta-descriptions are accurate and relevant to what visitors will find on your page. Always include the main keywords you want to rank for, but don’t overstuff your page with them; it will negatively affect your user experience and Google may penalize you for it.
Effective landing pages can lead to increased sales (Source)
10. Perform testing on your landing pages
A/B testing allows you to compare two versions of the same page to see which version resonates the most with your users. By changing an element on one page, you can compare the two to see which changes will increase conversions. You can learn more about testing on your landing page in this article, or try our A/B testing tool.
A/B testing has numerous benefits for your landing pages and your business because it reveals incredible insights that can be used to:
Improve user engagement by learning which messages/images resonate with customers;
Present more relevant messages and content that customers actively respond to;
Reduce bounce rates by improving relevance;
Increase conversion rates;
Deliver quick results and improvements that provide a return on investment.
Common landing page mistakes
We’ve covered what you should do when you are designing your landing page, but there are also a few things you should avoid doing:
Multiple CTAs: Too many calls to action dilute your message and decrease the likelihood of performing a conversion.
Broken CTAs: If your call to action doesn’t link to the right page or function properly, all of your efforts are wasted.
Low-resolution images/no images: Copy alone won’t sell your product or service. Use high-resolution, web-optimized images to boost your brand and convey your message visually.
Poorly written copy: Spelling mistakes and grammatical errors impact the trust that consumers have in your brand.
Lengthy forms: If your lead capture forms are too long, your customers will get frustrated and may give up halfway through. You’ll lose the information — and their business.
Examples of great landing page design
While landing page design is an ongoing process and you need to keep constantly optimizing it, there are a few brands with really great landing pages to inspire your own.
Coinbase uses a stylish and focused lead generation page with a clear message and unique value proposition. While trading cryptocurrency is a complex topic, the landing page simply asks you to enter your email address to get started. This example works because the call to action is clear, the copy is straightforward and the design is uncluttered.
Xero uses negative space and compelling copy to get its message across. There are two call to action buttons (with the same message) to steer visitors in the right direction. Xero’s page is attractive and colorful, uncluttered and emphasizes the call to action button, making it highly effective.
Monday.com uses colorful buttons to encourage visitors to create their free account. They’ve also added compelling social proof messages by mentioning the number of visitors to the site. This use of social proof and a clear, uncluttered layout — coupled with direct, pointed copy — increases their landing page’s ability to convert.
Astra uses compelling copy in their click-through button that assures users that they can secure your website against hackers in just three minutes. They’ve also added some big-name logos in their footer to build trust in the brand. The tagline, ‘Are you next?’ is compelling, with a solid and distinct call to action leading prospects to the sign-up page.
Take your landing pages to the next level
These tips provide a great starting point for designing a high-converting landing page, but no one gets it right the first time. Building an effective landing page requires ongoing optimization and innovation to determine what resonates with your audience.
Continuously testing your pages leads to new insights and continual improvements (Source)
Experimentation can help your brand improve the performance of your landing pages. Continuously testing your pages leads to new insights and improvements that’ll help you constantly adapt to new customer preferences even as they are being formed.
Looking for inspiration to take your landing pages to the next level? Check out our e-book, “50 Tests You Should Know For Website Optimization”: It contains 50 successful experiments from e-commerce businesses who have continuously optimized their websites to offer relevant and personalized experiences.
During software development, software goes through a series of stages. Testing, for its part, is a critical stage of the software development life cycle as it can determine the quality of the software that is to be released to live production environments.
In this article, we will be focusing on test environments and the types of testing that can be run in such environments and why test environments are an important part of your software pre-release strategy.
What is a test environment?
Once software tests are designed, they need an interface where they can be run or executed; this is what is referred to as a test environment.
A test environment is basically a combination of hardware, software, data and configurations in order to run tests.
Test environments need to be configured according to the needs of the software being tested and must be set to ensure that the software operates in the right conditions. In other words, there is no one-size-fits-all solution as it is the code that dictates the environment’s setup.
Thus, no two test environments are the same as they require a different setup to test different parts of the code- the parts that make the whole.
Certain test cases may also require the environment to be prepared according to a particular set of data. This is what is referred to as a test bed. Thus, a test bed is a test environment prepared with test data to help you identify cases requiring a particular data setup.
The main purpose of such environments is to allow QA teams to check system components and uncover errors and issues so the environment must closely replicate real user conditions. Once issues are detected, they can be fixed without affecting real users and negatively impacting their experience.
The elements of a test environment include the following:
The software to be tested
Test data
Network configuration
Device on which the software is to be tested
Database server
Types of environments
Before we delve deeper into test environments, we will first discuss the types of environments that precede and follow test environments. In this context, environments refer to the server location of the application or software, which are divided according to the state of the software.
Generally speaking, there are four types of environments in software development:
Development
Testing
Staging
Production
We will briefly go through each of these environments to better understand how they are linked to distinct stages in the release process.
Development environment
As the name suggests, this is where the development of the software takes place. It is the first environment where developers write the first lines of code and do all the code updates.
This environment usually consists of a server that is shared by several developers working together on the same project.
Therefore, when multiple developers are involved, a developer would have a copy of the source code on their own machine and then changes are submitted to the repository which are then integrated into the trunk or branch.
A number of preliminary testing takes place at this stage before moving on to the next stages.
For example, if developers have adopted a continuous integration methodology for their software development process then several changes daily would be committed to the trunk.
Testing environment
The testing environment allows QA engineers to test new and changed code whether via automated or non-automated techniques.
Development environments are ever-changing as developers keep adding new functionalities which makes it difficult for QA teams to run time-consuming tests so a testing environment is where they can execute more complex and time-consuming tests.
The code at this stage usually goes through more than one QA environment where unit tests are first conducted and the code is moved to further test environments.
Thus, you can either run tests one after the other or you can create several testing environments that allow for parallel testing to take place, depending on the sophistication of your testing environment.
More details about the different types of software tests will be discussed in the next sections.
Nonetheless, the focus here is testing individual components rather than the entire application, to check the compatibility between old and new code, the system’s performance and so on.
If there is a test failure, the faulty code can be removed in this environment. Thus, testers can ensure the quality of the code by finding any bugs and reviewing all bug fixes. However, if all tests pass, the test environment can automatically move the code to the next deployment environment.
Staging environment
This environment is a nearly exact replica of the production environment so it seeks to mirror an actual production environment as closely as possible to ensure the software works correctly.
The staging environment is often restricted to a small number of selected users and so it is limited to certain IPs and developer teams.
The purpose of this environment is to test on a near-production level but in a non-production environment to verify that the application will behave correctly after deployment. Thus, it represents a safe space away from the public eye to make sure everything works as expected; it is kept invisible from end-users.
The focus here is to test the application or software as a whole. In other words, staging environments are where you can conduct tests to ensure that no problems come up in production and limit negative impact on users there so that when the software is deployed to the production environment, there will be fewer errors to fix.
Examples of the kind of test that can be run in this environment include smoke testing and in particular load testing since it can be difficult to replicate high volumes of traffic in a staging environment to test the software or application under stress.
However, keep in mind that a staging environment is not meant to be a substitute for a real-world production environment.
To ensure your product works as it should, you need both a testing and staging environment, where the testing environment makes sure that every component does its job while the staging environment ensures that your software would behave correctly in an environment almost exactly the same as production.
While you can run many tests in a staging environment, the best way to truly determine how a feature performs is to test it on users in real-time, for example, through testing in production.
Production environment
This is where the software is produced and is running on a production server. It has officially gone live to real users.
When deploying a new release to production, rather than immediately deploying to all users, the release can be deployed in phases to a segment of your users first to see how it performs to catch and fix any additional bugs before deploying to the rest of your users.
In other words, just because you’re in the production environment, it doesn’t mean tests have to end here. You can and should still be testing in production. This can be done with the help of feature flags, which allow you to safely test in production on a pre-selected number of users.
Now that we’ve covered the main environments a software progresses through in its lifecycle, we will turn back to test environments and the type of testing that can be conducted in that particular environment.
Why is software testing required?
While we’re big advocates of testing in production, we acknowledge that some cases require dedicated test environments before moving forward onto production environments.
Before we move further to the types of software tests, it is important to shed light on why software testing is an essential modern software development practice. Choosing to skip this process is not advisable and may end up negatively impacting your products and business.
Before we move further to the types of software tests, it is important to shed light on why software testing is an essential modern software development practice. Choosing to skip this process is not advisable and may end up negatively impacting your products and business.
Below are just some of the reasons why software testing is so imperative nowadays:
Cost effective– testing your software will end up saving you money in the long run as testing the software will allow you to uncover bugs early on when it would cost less to fix them.
Security– software testing ensures that the software you’re releasing is free of any issues and thus you can guarantee your customers that your products are trust-worthy and safe to use.
Product quality-as software goes through continuous and diversified levels of testing, this ensures that bugs are detected along the software’s development process resulting in higher quality products.
Customer satisfaction– one of the main reasons tests are conducted are to ensure they provide the best user experience possible by making sure that the releases are stable and without any issues thereby achieving customer satisfaction.
Continuous delivery– an efficient setup of software testing would allow developers to push code changes into a CI/CD pipeline to go through the various levels of testing. If the code passes the tests, it can be automatically into production and if it fails it would notify developers so that they fix the issue. In other words, setting up automated testing allows you to maintain continuous delivery and to deliver higher-quality releases to end-users quickly.
Meanwhile, having a test environment to run these tests is essential as it provides you with a dedicated environment where you can isolate the code and verify the behavior of the application so it provides you with accurate feedback about the quality and performance of the software you’re testing.
Types of software testing
There are different types of tests that help analyze various elements of the software such as performance, security and user experience.
While a staging environment allows teams to replicate real testing conditions, tests will still need to be run beforehand to test its individual components to make sure that it all works well together to satisfy quality assurance requirements.
Below, we will highlight some of the most common tests which can be run during the software’s lifecycle:
Performance testing
These tests measure how fast an application responds to an interaction and so various aspects of the application such as page load speeds, stability and reliability are tested so that developers can make improvements as needed.
System integration testing
The main purpose of this testing is to ensure that all modules of an application work together smoothly and can communicate with each other. The interaction with the database is also tested.
Thus, it is all about making sure that the individual parts can function together as a whole.
User acceptance testing (UAT)
This testing is conducted to ensure that the application meets the business requirements of users and to ensure that functionalities of the application achieves customer satisfaction. UAT requires the whole application to be up and running and so usually represents the final stage of testing.
This type of testing also usually requires a staging environment- identical to a production environment but not accessible to end-users.
Alpha testing
After user acceptance testing is carried out within the development and product teams, testing can be expanded to include other kinds of users.
During Alpha testing, the release is tested outside of the teams involved in the project. It is typically conducted on internal users or employees within the organization and is usually followed by beta testing.
This test helps identify any bugs or issues before finally releasing the software to the end-user.
It attempts to simulate a real user environment by carrying out the same tasks and operations that the actual user will perform within the release to make sure it satisfies all of its functionalities.
Beta testing
In this testing environment, the software is released to a limited number of real-world users outside the organization to obtain their feedback which is then forwarded back to developers to optimize and improve the release as needed before releasing to all users.
It also tests the application or software under stress, where such load testing will help uncover any bugs that were not previously spotted.
As we’ve seen, testing is an essential part of the software development life cycle and so test environments must be efficient and reliable to ensure the quality of your products and they must be well-managed.
In this section, we’ll highlight some of the essential best practices for test environment management:
First, it is important you start testing early on in the development process. In other words, don’t wait too long to run tests on every commit.
Otherwise, when teams don’t test early, they end up with a number of bugs later on and at that point fixing these bugs would require a lot of time, cost and effort.
Second, try to reduce manual processes by introducing more automation as that will save you time and resources while your team can dedicate their time to building and improving the product instead of tedious manual tasks.
Furthermore, before creating yet another new test environment, verify if it’s possible to use an existing one. If you already have an existing infrastructure, then that will go a long way in saving you time and money.
Another thing to verify is that you actually have all the required software and hardware, which includes physical servers, licenses, operating systems, etc.
It also goes without saying that you need to consider how to ensure the maintenance of the test environment such as who’s responsible for its maintenance and how to ensure the reliability of the environment.
The main takeaway here should be to…
Test, test and then test some more starting early on in the software development process.
To reiterate, test environments represent an efficient and a safe space to conduct all your essential and most basic tests.
However, don’t forget that just because you think you have run a sufficient number of tests in your test environment that you should discard testing in production altogether.
Yes, test environments are great for ruling out bugs early on but they are not an actual production environment. The best way to guarantee the quality of your products is to test them on a segment of your users during production, i.e in the production environment.
You can now do this safely with feature flags, which allow you to test on a small segment of users and disable any buggy features instantly.
At AB Tasty, we love to help you improve your customers’ experiences – and we are here to do the same for you on the AB Tasty platform! We’re constantly gathering feedback from our users, and next month, you’ll see us roll out our new navigation based on that feedback.
We’re doing this for a few reasons:
We want to give you the best – and that means further improving the quality of your experience on the platform. 💖
We want you to be able to find exactly what you need, when you need it – which means improving the organization of information, classifying your favorite (and new!) features in an easy-to-navigate way. 🕵️
We want you to have the most intuitive experience possible – by providing you with better guidance from the first time you log in and get you from A to B as quick as can be. 🗺
What does that mean for you?
We’ll guide you through the updates in the coming weeks, but here’s a sneak peek of what to expect:
Better visibility with a new sidebar navigation, allowing you to easily access any area of the platform with a single click – and collapse it for more workspace.
We’ve gotten rid of the hamburger menu in favor of giving you more control over where you want to go within the platform – whether it be Tests, Personalization, Audience, Analysis, or ROI – plus a login button to take you directly to Flagship, our feature management solution. 🧭
Improved access to Settings, reorganized to match our customers’ most-used options.
We’ve designed a sleeker look, consolidating settings menu for a cleaner appearance and easier navigation. 💅
New header to accompany you through every step of the workflow, from campaign creation to reporting, giving you a better bird’s eye view of a campaign’s status.
Your step-by-step buttons will remain exactly where they are, but the header will shift to make everything more easily visible to you – including an editable campaign name, status, and reporting, right alongside the tag and account info. 👀
We hope these exciting changes make a big impact on how you use AB Tasty! 💥
We know you might have questions as you go through the new navigation, and we are here to help! We also know you might have feedback – about the new design and beyond – and we invite you, as always, to share it with us on our Canny board, accessible via this link.
When it comes to kickstarting experimentation within an organization, Lukas Vermeer recommends starting small and (keeping it) simple.
Lukas Vermeer took this advice to heart when he dove head-first into the world of AI and machine learning during the early stages of its development, when there was little industry demand. Through consulting for various companies, Lukas discovered his ideal work environment: a scale-up, where he could put his data and machine learning expertise to use.
Enter Booking.com. Lukas joined the Dutch digital travel company during the scale-up phase and went on to lead the experimentation team for eight years, scaling the team from three people to 30 people.
Once the experimentation team at Booking.com had reached maturity, he embarked on a new adventure in 2021 as director of experimentation at Vista. He is building and shaping the experimentation culture and tapping into the potential of their data, to further Vista’s impact as an industry leader in design and marketing solutions for small businesses.
Lukas spoke with AB Tasty’s VP of Marketing Marylin Montoya about the process and culture of experimentation; from the methods to the roles of the teams involved within an organization. Here are some of the key insights from their conversation.
Get strategic about experimentation
Knowing the purpose of your experiment is key. Lukas recommends focusing your efforts on testing big features that can drive real change or impact the company’s bottom line, rather than UI design.
Ask yourself, “What are the biggest questions that are driving your business case at the moment? What are the biggest assumptions that are behind your strategic planning?” he says. Rather than increasing the number of experiments, focus on the correct execution of more significant experiments.
When it comes to building a culture of experimentation within an organization, Lukas suggests using the flywheel method. The first experiment should garner attention by splitting the company’s opinion 50/50, as to whether it will work. This demonstrates that it can be hard to predict the success of experiments, thereby underlining the “unquantifiable value of experimentation.” We need to acknowledge that it is equally valuable to avoid shipping a bad product (that could reduce revenue), as it is to figure out strategically what you should invest in going forward.
Structure your organization for experimentation success
The way your business and teams are structured will impact how seamlessly your experiments are executed. Lukas recommends that the product development team take full ownership of the experiments.
The experimentation team should be facilitating experiments by providing the tools, education and troubleshooting support to the product development team, who can then run their experiments autonomously.
By training product managers in the process of experimentation — such as the different tests and tools available, their strengths and weaknesses, the assumptions they make and when to use them — they can work autonomously to test their ideas and select from a portfolio of experimental methods in order to make a decision.
There is, however, a social aspect to experimentation that should not be ignored. Given the subjective nature of data interpretation and analysis, Lukas highlights the importance of discussing the outcomes and giving feedback on the experimentation process in order to optimize it.
“The whole point of an experiment is to (…) drive a decision, and the decision should be supported by the evidence at hand,” Lukas says. Just as scientists peer-review their papers before publishing, experiments using the scientific method should follow the same guidelines to document the hypothesis, method, results and discussion in the reporting. (An opinion that has been echoed by 1,000 Experiments Club podcast guest Jonny Longden.)
The biggest threat to experimentation culture: leadership or roadmaps?
When people in product development talk about “roadmaps,” they’re not actually roadmaps, Lukas says. It’s more of a linear wishlist of steps that they hope will bring them to the goal. The problem is that there’s rarely alternative routes or redirections should they stray from the original plan.
It’s hard to change direction at the first failed experiment, Lukas explains, due to the “escalation of commitment.” That is, the more time and energy you have invested into something, the more difficult it is to change course.
So, is it time to ditch roadmaps altogether? Lukas advises that roadmaps should simply acknowledge that there is inherent uncertainty. There are many unknowns in product development, and these only become visible once the products are being built and exposed to customers. This is why the build-measure-learn model works, because we take a few steps and then check if we’re heading in the right direction.
Lukas says the goal should not be to “deliver a final product in two months,” rather you should incorporate the uncertainty into the deliverables and word the objective accordingly, for example: to check if customers are responding in the desired way.
What else can you learn from our conversation with Lukas Vermeer?
When to start experimenting and how to build a culture of experimentation
The importance of autonomy for experimentation teams
The three levels of experimentation: method, design, execution
How to accelerate the experimentation process
About Lukas Vermeer
Lukas Vermeer is an expert in implementing and scaling experimentation with a background in AI and machine learning. Currently, Lukas is the director of experimentation at Vista. Prior to this, he spent over eight years at Booking.com, from data scientist, product manager to director of experimentation. He continues to offer his expert consulting services to companies that are starting to implement experimentation. His most recently co-authored paper, “It Takes a Flywheel to Fly: Kickstarting and Keeping the A/B Testing Momentum,” helps companies get started and accelerate experimentation using the “investment follows value follows investment” flywheel.
About 1,000 Experiments Club
The 1,000 Experiments Club is an AB Tasty-produced podcast hosted by Marylin Montoya, VP of Marketing at AB Tasty. Join Marylin and the Marketing team as they sit down with the most knowledgeable experts in the world of experimentation to uncover their insights on what it takes to build and run successful experimentation programs.
The topic of feature flags is gaining popularity with developers and marketers alike using these flags to test and deploy safely in production among other many uses.
In this article, we’ve decided to compile our top picks of the best content out there on feature flags for your reading pleasure.
Whether your team has already been using feature flags to safely release new software or whether you’re just tentatively dipping your toes and looking to get more information on this powerful software development tool, you’re bound to find something in our selection that best suits your needs.
So, without further ado and in no particular order, here are our top picks:
This is certainly one of the most popular articles about feature flags. Indeed, a quick Google search will always include an article from Martin Fowler and his many articles written by him or by colleagues on the software development life cycle and how to build software effectively.
Why we picked it:
It’s a no-brainer. This article, one of the oldest out there first published back in 2016, is a classic and explains in great detail and clarity the topic of feature toggles or flags from their birth to their different categories and implementation techniques.
In our opinion, this is a great article especially for those trying to become more acquainted with this topic. It also uses simplified figures for easier understanding.
This is another great article that breaks down the complexity of feature flags from what they are to their importance and the different ways to implement them.
It’s a good starting point for anyone who’s just embarking on their feature flag learning journey.
GitHub, a provider of internet hosting for software development, provides excellent resources to help developers build and develop software, among which highlight the topic of feature flags.
Why we picked it:
We always think the best way to truly understand something is by providing concrete and practical examples. This is what this article from a company in the industry does.
This article paints a clear picture of the uses and benefits of feature flags by illustrating how GitHub reaps the benefits of these flags in its deployment processes. It explains in great detail how feature flags have allowed them to efficiently work on new features and to test these features, thereby inviting developers to embrace this software development methodology in their own releases.
We’ve often heard about how developers use feature flags as they are the ones coding them. However, product and marketing teams have long started to recognize the benefits of using feature flags themselves to test out their ideas on customers. A sophisticated feature flagging platform, in particular, allows different teams to access and control flags (and not just developers).
Therefore, the author argues that feature flags are a major win not only for developers but also product managers by boosting productivity and reducing the stress of new releases. The article also weighs in on the infamous build vs buy decision.
This article really lays out the value behind feature flags by depicting how each team within an organization utilizes them to solve many issues that usually come up in development, making life much easier for these teams.
Much like the previous article, it highlights the importance of feature flags and how they have revolutionised the Agile development process.
We have carefully crafted a platform to suit both development and product teams and equip them with the right tools to safely deploy code into production and eliminate the risk of new releases.
Why we picked it:
At the risk of tooting our own horn, we think that this article on our blog covers a wide range of use cases that could be implemented using feature flags from preparing for launch to other scenarios where such flags could come in handy, targeted towards both product and development teams.
This article provides an interesting discussion on the benefits of feature flags while acknowledging their potential costs and listing the requirements that should be put in place to carefully manage these flags to avoid the build-up of heavy costs over time. Among such requirements include documenting when a flag is introduced and setting an owner for each flag to be able to make the decision to remove the flag when it is no longer needed.
You might have already come across the dreaded ‘technical debt’. In this article, the engineering team at Uber tackles the dark side of feature flags and how they developed a tool in order to deal with the issue of removing stale feature flags to prevent accumulation of this debt.
Piranha is an open-source tool but it’s currently only available for Objective-C, Swift, and Java programs.
Nonetheless, we think that this article provides a detailed look into the issue of technical debt and why it’s important to keep track of feature flags, particularly stale ones, in your code.
Conclusion
And there it is: our non-exhaustive list of our favorite posts that cover the ever-expanding and fascinating topic of feature flags!