Branch &Variant
Managements
Achmad Arwan, SKom, MKom
Introduction
Promotions & Release on previous chapter are focused on single
thread development.
Developers work on multiple improvements concurrently.
i.e., the navigation map effort works with the most recent versions
of the NClient and the Server, while the query history effort works
with the most recent version of the EClient and an older, stable
version of the Server.
This approach works only if changes affect nonoverlapping sets of
components and if subsystems interfaces remain backward
compatible.
However, when two changes require modifications to the same
component, a different approach is required.
Concurrent branches and subsequent merging can be used to
coordinate changes.
Example
One team of developers implement the navigation map
functionality (extends the functionality).
Second team the task of improving the response time of the
Server. (The developers first need to identify performance
bottlenecks and design heuristics to speed up common
requests.)
Finally, separating both changes provides us with more
flexibility during delivery: if the response time improvement is
completed early, we can merge it with the functional
improvement and release it at the same time, otherwise, we can
deliver it later as a patch.
Example (cont’d)
To support both changes concurrently while keeping teams
independent, we set up a branch.
The teams working on functional improvements continue
working on the main trunk (starting at Server.1.5 and
NClient.1.6).
The team responsible for the response time improvement
works on the branch (starting at Server.1.5.1.1).
The performance improvement team restricts its changes to
the Server subsystem and decides to avoid modifying the
Server interface.
Example (cont’d)
Both teams then work independently until they complete their
improvements.
The navigation map improvement is completed first and made
part of the second release of myCarParts, as we saw in Figure 13-10
(as Server.2.4).
The response time improvement is considered successful, yielding
a fourfold decrease in response time for common requests, while
marginally extending the client server protocol.
At this point, we need to integrate this improvement with the
main trunk, hoping to produce a version of myCarParts which has
both the navigation map functionality and the fourfold
improvement in response time.
Problems?
Merges can usually be done with the help of the
configuration management tool, which attempts to
merge the most recent parts of the versions.