Article

9min read

Feature Branching: The Product Manager’s Key to Faster Releases

You’re always looking for methods to release new features faster.

After all— the faster you release new features, the faster you get to collect real-world feedback from your real-world users, and the faster you can use that feedback to release higher and higher quality versions of your product.

Of course, you have many methods you can deploy to accelerate your feature releases. You can perform canary releases. You can test in production. You can master rollbacks. Each of these will accelerate your feature releases, and you should experiment with each of them.

But if you are really serious about accelerating your feature releases, then you have to start thinking about how to speed things up from a development perspective as well. And one of the most powerful ways to accelerate feature development is through parallel development, deployed through a dedicated feature branching strategy. 

In this piece, we’ll explore parallel development, why feature branching offers an ideal form of parallel development, and how you can avoid the pitfalls of feature branching and use it to accelerate your feature releases.

Why Should Product Managers Bother with Parallel Development?

Parallel development is an easy concept to understand, but a challenging practice to master.

Essentially— when you and your team perform parallel development, some of your developers will work on one set of tasks, while your other developers work on another set of tasks.

You don’t need to split your developers into two even groups. You can have three different groups within your pool of developers working on three different sets of tasks— or four, or five, or ten, or more. The exact number doesn’t matter. All that matters is this— instead of having everyone work on the same tasks from the same code base, different groups work on different tasks within the same time period.  

Establishing parallel development accelerates your feature releases in a few ways. Your teams will get to focus on smaller, laser-targeted assignments that are typically easier to knock off. You can avoid instability from one team’s code changes disrupting the working environment of the rest of your teams. And—most important—you can release each team’s work independently, which means you don’t have to wait for everyone to complete their tasks to push something new out to your users. 

This last point is key. While there are many different forms of parallel development available to you, if you want to accelerate your feature releases then you must follow a form called feature branching.  

How Does Feature Branching Work?

Essentially— with feature branching, you will organize your parallel development strategy around feature development. You will create a new “branch” off of your main code base that relates to a specific feature or a cluster of features, and you will assign that branch to a specific, independent team 

At times, these feature-focused branches are called “user stories”, but for the sake of simplicity we are going to just refer to features and branches in this piece.

Once a feature branch is completed, tested, and reviewed, it can then be merged back onto the main code base and released to users— no matter how far along, or how stalled, the product’s other feature branches might be.

By focusing on the parallel development and release of individual features— and not on pushing large-scale releases, or monolithic trunk-based development—feature branching allows you to iterate your product as quickly as possible.  

Click here to learn more about monolithic architecture and how it compares to more distributed systems (microservices approach).

What are the Potential Downsides to Feature Branching?

Now, even though feature branching can rapidly accelerate your feature releases, it is not a magic bullet. Feature branching can go wrong in a few big ways.

First, feature branching can be challenging to pull off from a purely technical perspective. You must establish some sort of easy method to release features independent of each other. If you don’t, then completed features are just going to pile up while you wait for others to wrap up, eliminating the entire point of feature branching in the first place, and reverting you to a more traditional release branching strategy.   

Second, feature branching can cause painful merge conflicts. Even though your teams work independent from each other, their individual branches might all require changes to the same shared elements of the code base. When one team completes their work and merges with the code base, they might alter those shared elements and make other branches incompatible by the time they are ready to release.

Finally, feature branching can create a softer type of misalignment. When teams work in focused isolation for too long, they can lose touch with each other, and lose sight of the product as a whole. Feedback will be challenging to collect and share. Collaboration can disappear entirely. And teams can make big changes to the product’s code base or feature set without anyone else knowing it.

These are big potential problems, but they are not inevitable.

Let’s look at a few ways you can avoid them.

How to Avoid Misalignment When Feature Branching

Let’s start with the most complex problem to solve— misalignment.

When you deploy a feature branching strategy, you get caught in a paradox. On the one hand, isolating your teams is what feature branching (and parallel development as a whole) is all about. On the other hand, too much isolation destroys the unity of your team as a whole and the fundamental product you are developing.

There are some technical solutions to the misalignment that can so easily creep into teams working in parallel. One team can always pull-down changes from your other teams to see what they’re working on, to collaborate on that feature’s development, and to make sure their branch isn’t straying too far from everyone else’s. 

But most of the solutions to misalignment are much subtler and “softer”. You can host daily stand ups for your entire group of developers. You can facilitate constant communication so everyone knows what everyone else is doing at all times. And you can shrink the size of each feature being developed so it has to merge back to the product (and everyone else’s work) before it has enough time to get too badly misaligned in the first place.

Misalignment is not inevitable, but it requires a lot of daily discipline to make sure all of your branches fit together.

How to Avoid Merge Conflicts When Feature Branching

Next, let’s tackle the most common pitfall of feature branching— merge conflicts.

Feature branching usually starts with great intentions. The developer group is broken into multiple teams. Each team is assigned a feature branch. And they are sent off to deliver their work quickly, and to return to merge quickly.

But often, these intentions go awry. Teams keep working on their features long after they were supposed to merge, and they keep pushing back their integrations. Usually this happens because a team gets lost in their work. They want to deliver the highest quality feature possible, and they go down perfectionist rabbit holes. But as they keep developing, they shoot far past their initial scope. And what was supposed to be a single small new feature or a simple update to an existing feature turns into a large, complex set of new features that better resemble a brand new release.

When this happens, it’s almost inevitable that a host of merge conflicts will pop up as soon as the team attempts to integrate their work with everyone else’s.

Like the solution to misalignment, the solution here is simple in concept but challenging in execution. You must maintain the discipline of keeping small feature branches that can be merged early and often. Set a minimum viable product (MVP) prior to creating the branch, and as soon as it is hit—as imperfect as it might be—you merge and release it.

How to Avoid Release Bottlenecks When Feature Branching

Finally, the simplest challenge to solve— developing the technical capability to release features independent of each other.

The solution here can be summed up in two words, “feature flags”.

Feature flags are toggles that let you release or rollback an entire feature with the click of a button. Each new feature, or each feature update, is assigned its own toggle that operates 100% independent of every other feature or update ready to be released. You can push the completed work of any team at any time, no matter how bug-ridden or half-baked the rest of your teams’ features may be at that moment.

The beauty of feature flags lies in their flexibility. If you want to release a completed feature as soon as it’s ready to go, you just toggle it on with one click. If you want to wait to release a few new features at once, then you let them stack up as they complete until the last new feature in the suite is finished, then you can release them all at once. If you release a new feature and then find a hidden merge conflict, you can toggle it off right away with just one more click.

Release Features Faster with the Right Branching Strategy

At this point, you now have a pretty clear picture of what feature branching is all about, and how to deploy it in your product management practice without falling into the strategy’s most common pitfalls.

Structure the smallest feature branches possible to minimize misalignment and merge conflicts.

Maintain the discipline to stick to these small feature branches and not get caught in endless attempts to make them perfect before release.

And streamline your independent feature release process as much as possible with the right tech.

Don’t let the simplicity of this strategy fool you. Once mastered, feature branching gives you a powerful method to accelerate your feature releases.

Subscribe to
our Newsletter

bloc Newsletter EN

We will process and store your personal data to respond to send you communications as described in our  Privacy Policy.

Article

9min read

Drive Digital Transformation With Client-Side and Server-Side Optimization

The further your company is on its digital transformation journey, the more critical experience optimization (EXO) becomes. After all, you want your digital products to deliver the best customer experience to meet your business goals and stay competitive. Marketing and product teams can use a variety of tools to conduct and measure EXO experiments. Most of these solutions fall into two categories: server-side and client-side experimentation tools.

But which is the right solution for your use cases? How do they differ, and what can they do? Let’s find out in this blog post!

What’s the difference between client-side and server-side?

You may already be familiar with the technical concepts behind client-side and server-side tools. In short, client-side solutions operate in your users’ browsers, while server-side tools run on a physical or virtual server.

Client-side tools allow you to test visual or structural variants of your website or web app to optimize the customer experience. In most cases, these tools use JavaScript – a programming language that runs in the browser – to put a new UI layer over your existing website.

Client-side solutions usually don’t require programming skills since they generate the experiment code themselves and don’t modify your site’s code. Instead, they often offer a visual editor in the admin interface, which lets you comfortably alter your website’s look and feel. This makes client-side EXO solutions particularly popular with marketing teams who use them for conversion rate optimization.

Server-side testing require technical expertise and coding skills as you need to incorporate experiments into your code and deploy it. For example, you can use server-side EXO solutions to test business transactions, algorithms, and new functional variants. They’re also incredibly valuable when you want to conduct experiments that shouldn’t be influenced by browser quirks or user devices. 

Yet, these solutions aren’t only relevant to tech teams. Often, non-technical staff team up with product teams to define experiments, which are then executed by the engineers. Once implemented, an experiment can usually be controlled, monitored, and analyzed via a dashboard (if provided by the solution).

The pros and cons of client-side and server-side tools

Now that we’ve covered the two variants in more detail, let’s look at their general advantages and disadvantages.

Client-side pros:

  • Technical independence. Marketing teams can create and edit experiments as they see fit without relying on development and IT resources.
  • Available to everyone. Non-technical teams can quickly and effortlessly set up, modify, and analyze experiments using visual editors.
  • Efficiency. Gain valuable insights and streamline your product’s or service’s customer experience while investing little time and money.

Client-side cons:

  • Flicker effects. Users may notice a brief flicker while the webpage loads. This happens when the experiment’s UI layer is placed on the original website, and the user sees it.
  • Performance. The more JavaScript you load, the slower your website can become. Also, the generated experimentation code’s quality can harm the user interface’s loading speed and responsiveness.
  • Security and secrecy. Everything a browser can read is public and can be read by anyone – if it’s not encrypted. If you want to keep experiments or their logic a secret, it’s usually safer to opt for a server-side solution.

Server-side pros:

  • Flexibility. Tech teams have full control over their server-side code, so they can build experiments precisely as needed without being constrained by the tool.
  • Robustness. Code that runs through deployment processes and QA should meet your company’s quality standards. Experiments cannot be influenced by browsers or devices used and are therefore stable.
  • Omnichannel experiments. You’re not limited to testing websites and web apps in a browser. Conduct experiments on any channel, be it native mobile apps, email, IoT devices, etc.

Server-side cons:

  • Long implementation time. Server-side experiments require code releases. Depending on your deployment and QA strategy, you need to involve different teams and processes, increasing implementation time.
  • Demanding. If the use cases for server-side tools are unclear, you may be using them for the wrong ones. Hence, you may waste time and money implementing and running tests that would have been much easier with a client-side tool.
  • Expensive. Because server-side experiments require many resources to implement, edit and remove, the cost is typically higher than client-side experiments.

As you could see, each solution has drawbacks that you need to consider before choosing the one fit for your use cases. However, should you choose one over the other at all? We believe that the advantages and disadvantages of the tools complement each other well and, if used correctly, can result in significant benefits. 

Let’s find out how you can get the best out of both worlds!

How you can benefit from both methods with AB Tasty

Using client-side and server-side functionalities for experience optimization gives your company the needed agility to meet your consumers’ changing and demanding expectations. Yet, to set up productive workflows, you need to determine when and how which experiments should be utilized by whom.

We recommend splitting up tests and experiments between your marketing and product teams. AB Tasty‘s client-side feature helps your marketers optimize conversions and increase user satisfaction. Product teams use our server-side feature to enhance the functionality of digital products and services. It relies on features flags that could be used in many different ways.

Client-Side vs. Server-Side Experiments [Infographic]

Ultimately, knowing who is responsible for which experiments can save your teams a lot of time and headaches. Let’s paint a clearer picture by talking about how our customers use AB Tasty’s client- and sever-side functionalities to optimize customer experiences.

Temporary changes to your website’s UI

Valentine’s Day, Christmas, and Black Friday provide the perfect opportunity to pamper customers with sales and specials. For the occasion, you may want to give your website the proper festive look or display banners and other new UI elements. However, these events are time-limited, and you want your website to return to its usual look and feel at midnight sharp.

Temporary changes to your website’s UI are the ideal job for client-side experimentation solutions. Marketers and designers can make changes themselves without consuming development resources. As a result, they can put their strategies into practice exactly as they imagined and have full control over what is displayed when.

Experimentation

Experimentation is a big subject and involves many different methods and strategies for client-side and server-side tools. In theory, you can utilize some of these techniques using both solutions, such as A/B tests. As a result, it may not always be clear how you should proceed. Here are a few tips:

Use client-side experiments for anything that focuses on user experience, user engagement, conversion rates, and content personalization. AB Tasty’s client-side experiments offer a quick way to test your ideas to ensure they are getting the ROIs you expect. Conduct A/B tests, Multivariate tests, Split tests, and Multipage tests, and analyze their impact in your ROI dashboard.

Our server-side experimentation feature is primarily used by product and engineering teams. It helps you conduct robust and secure experiments that focus on modifying your products’ functions. For example, you can use it to test a new payment method with a subset of users and see how they adapt. Introduce new features to a specific user group and take the appropriate next steps based on live user feedback and selected KPIs in your dashboard. 

Keep reading: how to run sophisticated experiments using feature flags.

Personalization

Personalization is a powerful way to improve user satisfaction – and something that your consumers may already take for granted. You can utilize personalization on the client and server-side, with each option presenting different possibilities and challenges.

Client-side personalization is based on non-identifiable user data, data segmentation, and data processing by the AB Tasty AI. Put simply, our AI enables marketing teams to create general personalizations based on user group clusters, such as users’ browsing behavior. Let’s say you want to generate personalization campaigns in your electronics web store for users who are interested in Android or Apple. With client-side personalization, you can find and address the right groups of people with ease.

Server-side tools are usually more powerful for 1-to-1 personalization (also known as individualization). The goal is to create unique omnichannel experiences for each user group or even each individual user. For this, however, you need to collect, store, and process assignable user data, e.g., from a logged-in customer. Hence, you need to keep up to date with the latest data protection regulations in your country, such as the GDPR, and make sure that your website or app complies with them.

Wrapping up

Server-side and client-side experimentation are really two sides of the same coin. They are strategically important as they allow marketing and product teams to focus on their core competency for maximum impact. Use both AB Tasty’s client- and server-side functionalities to empower teams to develop a common approach to experimenting, personalizing, and continuously optimizing digital assets. 

Want to learn more about how you can effectively use client-side and server-side experience optimization tools together? Send us a message – we’re happy to help.