• Fat Cats Boardgame
  • Wicket UI Library
  • About Me

Java and Wicket web development thoughts, tutorials, and tips

roman@coderdreams.com
Coder DreamsCoder Dreams
  • Fat Cats Boardgame
  • Wicket UI Library
  • About Me

Please dont use client-specific release branches

August 25, 2020 Posted by Roman Sery software design 1 Comment

Recently there was a debate about using client-specific release branches in an attempt to protect them from change. A little background, the software is used by multiple clients. Each client might have a different release deployed to production and new releases of the software are developed every 2 weeks.

There was an idea about using client-specific releases with the intent of isolating them from change to somehow protect those clients from bugs. Let’s take a look at the two approaches.

All clients use the same release branches – Unidirectional updates

Not having client-specific branches is very nice. Any changes you make in one release branch is merged into all subsequent branches.

So let’s say you make a change in 1.0, it gets merged all the way up to 1.3. If one client is using 1.1 and another 1.3, it doesn’t cause any problems. They will all eventually get all bug fixes/updates.

As long as the direction of updates always flows in one direction you’ll be very happy. You will have very few merge conflicts if all changes are merged in a timely manner.

Client-specific branches – Bidirectional updates

Now let’s look at the mess that’s created with client-specific branches. Let’s say clients FAS and MST use their own branches.

There are three majors problems with this approach because we are introducing bidirectional update flows:

#1 Now the process of making changes to 1.0 involves merging into 1.0.FAS and later, into 1.2.MST. The other scenario is when FAS requests changes, you need to merge 1.0.FAS into 1.0 and then do your regular merging. This causes a lot of extra work and results in more merge conflicts.

#2 As soon as FAS switches to using 1.0.FAS, they will stop receiving all bugfixes/improvements that are applied to 1.0. In the effort to isolate FAS from change, it now exists outside of the standard flow of updates.

#3 Now we are making it very difficult for developers to do refactorings/re-structuring of code because it will be extremely difficult to merge. Suppose a developer has worked on significant re-structuring for 1.2. It was merged into 1.3. However, after a few days of being happy, MST now wants changes. Unfortunately, it’s well behind 1.2 and has stopped receiving all updates. You can make the changes directly to 1.2.MST, but in order to merge those into 1.2 and all subsequent branches will be very difficult if not impossible.

Code improvements matter

Another troubling concept came out of these discussions related to #3 above. It seems some people have the notion that code improvements, whether it’s performance improvements or code structure improvements, don’t matter. Clients don’t see code improvements and usually don’t notice performance improvements, therefore they don’t matter.

This idea is absurd and very dangerous. First of all, the goal of performance improvements is for the client not to notice them. As the number of concurrent users/traffic increases, clients should see no change in performance. The only way to accomplish that is to prioritize regularly looking for bottlenecks and other areas of improvement. Clients will most certainly notice performance degradation.

While it’s true that clients usually don’t see the actual code improvements directly, they experience the many benefits of them. If code improvements are regularly prioritized, they experience less future bugs, greater developer productivity, a software product that is easier to change, and more confidence in implementing new significant features.

So please never make the mistake of thinking client satisfaction and regular prioritized code improvements don’t go hand in hand.

1 Comment
Share
4

About Roman Sery

I've been a software developer for over 10 years and still loving Java!

You also might be interested in

Pros and cons of unit testing

Sep 28, 2020

When to use unit testing and when to avoid it.

Customizing your codebase for each customer using Enumerations

Jul 26, 2019

Use enums and properties files to define all the behaviors of your application that are available for customization to your clients.

Why you should favor composition over inheritance

Why you should favor composition over inheritance

Mar 8, 2020

Composition vs inheritance. Some improvements in Java interfaces that make composition much more powerful!

Categories

  • aws
  • customization
  • database
  • debugging
  • enum
  • java
  • models
  • performance
  • projects
  • react
  • software design
  • Spring
  • tool
  • Uncategorized
  • wicket

Recent Posts

  • Rent Day
  • Self-contained Wicket Fragments
  • Pros and cons of unit testing
  • Themeable React Monopoly board
  • Please dont use client-specific release branches

Recent Comments

  • TCI Express Thanks for sharing such insightful information. TCI Express truly stands out as the best air logistics company, offering fast, secure, and efficient air express and cold chain transportation services....

    Tracking down a bug in production Wicket application ·  March 25, 2025

  • Tom Error: A zip file cannot include itself Can you please correct the plugin part so it doesn't use the same folder as input?

    Deploying Spring Boot app to AWS Beanstalk with Nginx customization ·  September 3, 2021

  • Golfman: Reality always wins I've used both Wicket and front-end JS frameworks and, having worked extensively on both, I can tell you that "Speed of development" is definitely NOT with the JS frameworks. You basically end up...

    Five reasons you should use Apache Wicket ·  August 29, 2021

  • Kiriller Sorry can not agree with you, wicket might be a well built technical framework. But the advantages of using a front-end framework like react.js and vue.js can not be beaten by Wicket nowadays. - Speed...

    Five reasons you should use Apache Wicket ·  August 23, 2021

  • Bernd Lauert Sorry but i have to refute your claims with the following arguments: 1. the Wicket community may be small but it is also very responsive, you usually get a helpful answer from the core devs on the...

    Five reasons you should use Apache Wicket ·  July 1, 2021

Archives

  • May 2021
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019

Contact Me

Send Message
Prev Next