SlideShare a Scribd company logo
Note: ““Attached is a very rough first draft of my whitepaper. The first half of it is more or less
complete (though it still needs quite a lot of editing); the second half is still very sketchy. Not
sure if this is enough detail for now, I will try flesh it out in the coming days and can probably
send you an updated version early next week if that is any help.

Frank.”




                             Frank Compagner, Guerrilla Games


Abstract
Over the past years we have developed a strategy for managing our release branches that goes
against accepted wisdom in the Perforce and wider SCM community, but which we have found to
work very well nevertheless. Instead of having our developers work on the release branch, and
integrating their changes back to the main branch, we keep everybody working on main and
integrate selected changes to the release branch. We will explain why this works well in our case, and
what processes and tools we needed to adopt to make this a key factor in a very smooth running
release pipeline.


What did we do?
For every notable deliverable we produced over the last few years, we have created a release
branch. Sometimes a further (say) 1.1 release branch was made from the 1.0 release branch, as
usual. Initially we had most people working on the release branch, fixing bugs which would then be
integrated back to the main branch. Over time, however, we often found it much easier to let people
continue working on the main branch, and only integrate the changes to the release branch under
complete control of the release managers. At first this process was managed by manually keeping
track of the status of all changes, but this did not scale well. In fact, we found it hard to maintain for
more than a week or so, at which point it became very hard to figure out the status of any particular
change.

Still, this allowed us to set up a release cycle as follows: at the beginning of the week, we would do a
complete re synchronization of the main branch to the release branch. The result of this then gets
tested by our internal QA department, any problems found would be fixed on the main branch and
integrated onto the release branch, where the fix would be verified. This normally would enable us to
deliver a fairly high quality build at the end of every week, which would then go on to more stringent
external testing. Several weeks before the final delivery of the release we would stop the full re
synchronizations from the main branch, and spent the remainder of the time ironing out the last
remaining problems.


                                                                                        Release branch


                                                                                            Main branch
       1 week
                         Full (re )synchronization    Bug fix                 Release

This worked well as long as we restricted ourselves to just fixing the highest priority bugs, but it did
not scale well to more complex releases where we could tolerate less problems in the final product.
It was simply not possible to keep track of the status of all needed change s, and the inevitable
divergence between main and release branch meant that after a week or two we stated to see lots of
conflicts in the integration results, often making it next to impossible to get certain changes on the
release branch.

It became clear that if we wanted to continue in this way we would need tools to keep track of all
relevant changes. As an important part of the problem was the lack of visibility of change status to
everybody in the company, we quickly settled on a web app that allowed all developers to easily see
the status of all changes. It also allowed everybody to request promotion of a change to the release
branch, while the members of the release team were additionally allowed to approve or deny
changes. To facilitate the actual integrations we created a simple tool that obtains a list of eligible
changes from the web app, and allows the release team to simply integrate those changes to the
release branch. Together, these tools improved the process considerably, making it possible to stay
in control of the inevitable divergence for much longer, especially after we extended the web app to
show dependency information of all changes.

These tools are shown in more detail below, but let’’s first step back and ask ourselves:


Why did we do it?
The original reason for letting people continue working on the main branch during a release cycle
was a very prosaic one. Even though Perforce branches are shallow on the server, on the client they
are still pretty expensive, especially if you want to branch an entire project with a head revision of
about 300GB. We would often find that we needed somebody to fix a bug who did not yet have the
release branch locally; just getting the branch from the depot would then take the best part of the
day, to say nothing of the subsequent build effort. Allowing people to fix the bug on the main branch
and then integrating them to the Release branch was often by far the most practical solution.

We have investigated the feasibility of creating tools that through a combination of clever workspace
mappings, judiciously applied ‘‘p4 sync –k’’ commands and possibly some client side md5 hash
tables would make branching a shallow process on the client as well as one the server. But while this
does appear to be possible, it is definitely non trivial, and making the process solid and fool proof is
likely to be very hard indeed.
Another reason for not wanting people to work directly on the release branch is that all of our tools
needed to be branch aware. As a high end games production company, we use a large number of
specialized in house developed tools, and we kept finding circumstances under which these would
refuse to work correctly on the release branch. Supporting this became a considerable amount of
work. Finally, we have a considerable amount of users without much technical background, and we
often found people being confused as to what branch they were working on, and submitting changes
to the wrong (or even both) branches.

So far, the reasons for keeping people working on the main branch are essentially negative. But as
more and more people were working this way, we discovered an unexpected benefit: we gained
control over the order and timing of changes on the release branch. This allowed us, for instance, to
test certain more complex features in isolation on the relatively stable release branch, without much
interference from other unrelated changes. It also allowed us to sometimes postpone risky changes
until just after an intermediate deliverable, thereby maximizing testing time. In the end the amount
of control over the entire release cycle we regained in this way is the main reason we have really
grown to like this process.

Of course, there are a number of obvious downsides to this idea. First and foremost is the fact that
nobody in the entire company has the actual release branch on their machine; it exists solely on our
build servers and as a finished build at the QA department. This means users cannot easily see the
actual state of the release branch, so that reproduction of bugs is potentially a problem. It also
becomes vitally important that everybody has an easy way of finding out whether their change has
made it onto the release build, and, if so, in which build it ended up. As the order in which changes
are integrated to the release branch is sometimes completely different from the order in which they
were originally submitted on main, there is much potential for very complex resolve conflicts.
However, through the use of a small amount of process and some well thought out tools we have
found it very possible to keep these problems under control, resulting in a pretty smooth release
process.


How did we do it?
        Created web app that shows all changes on the main branch
        Using Python, Cherrypy and p4python.
        Easy overview of own changes for each user
        All users can request any change to be integrated
        Supports any number of simultaneous release branches
        For each release branch, we have a page with pending changes and a page with submitted
        changes
        Pending changes can be categorized by the release team.
        Pending page also lists dependencies (color coded for easy viewing), showing potential
        merge conflicts.
        Comments can be added by everyone
        Changes can be viewed in detail, with through links to the p4web diff pages
        Released changes list also shows builds done from release branch
        All released changes (also on user tab) will show first build that that change ended up in.
Simple integration with bug tracking system (devtrack)
Not (yet) using jobs
‘‘Manual’’ changes directly to the Release branch also supported.
Link between changes on release and main branches made through changelist comments;
sounds brittle, but not a problem in practice
User changes:
 s
Pending changes:
           n
Released changes:
   e        n
Inte
                                  egration tool:
For build/rel
            lease team o
                       only
Also
A python, with wx GU lib
            ,         UI
Simple and foolproof
S           f
Commandlin variant ex
C           ne         xists
Conclusion
     Not for everyone (list necessary conditions)
     But can be very good when you get it to work
     Visibility and transparency to all users is key (and beneficial in any branching strategy)
     Pretty easy to implement with a couple of Perforce api’’s

More Related Content

What's hot

Git Branching for Agile Teams
Git Branching for Agile Teams Git Branching for Agile Teams
Git Branching for Agile Teams
Atlassian
 
Transforming Organizations with CI/CD
Transforming Organizations with CI/CDTransforming Organizations with CI/CD
Transforming Organizations with CI/CD
Cprime
 
Achieving DevOps Automation for the Database at NBCUniversal
Achieving DevOps Automation for the Database at NBCUniversalAchieving DevOps Automation for the Database at NBCUniversal
Achieving DevOps Automation for the Database at NBCUniversal
Datical
 
The 10 Commandments of Release Engineering
The 10 Commandments of Release EngineeringThe 10 Commandments of Release Engineering
The 10 Commandments of Release Engineering
Solano Labs
 
Intro to DevOps 4 undergraduates
Intro to DevOps 4 undergraduates Intro to DevOps 4 undergraduates
Intro to DevOps 4 undergraduates
Liran Levy
 
Successful testing continuous delivery - coding serbia 2013
Successful testing continuous delivery - coding serbia 2013Successful testing continuous delivery - coding serbia 2013
Successful testing continuous delivery - coding serbia 2013Miel Donkers
 
Understanding DevOps in simpler way with Continuous Delivery
Understanding DevOps in simpler way with Continuous DeliveryUnderstanding DevOps in simpler way with Continuous Delivery
Understanding DevOps in simpler way with Continuous Delivery
Swapnil Jain
 
Gitflow Workflow
Gitflow WorkflowGitflow Workflow
Gitflow Workflow
Hean Hong Leong
 
Continuous Integration Testing Techniques to Improve Chef Cookbook Quality
Continuous Integration Testing Techniques to Improve Chef Cookbook QualityContinuous Integration Testing Techniques to Improve Chef Cookbook Quality
Continuous Integration Testing Techniques to Improve Chef Cookbook Quality
Josiah Renaudin
 
Metrics driven dev ops 2017
Metrics driven dev ops 2017Metrics driven dev ops 2017
Metrics driven dev ops 2017
Jerry Tan
 
Fundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CDFundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CD
Batyr Nuryyev
 
Developing with versioning and CI/CD
Developing with versioning and CI/CDDeveloping with versioning and CI/CD
Developing with versioning and CI/CD
Matteo Di Carlo
 
Continuous integration and delivery
Continuous integration and deliveryContinuous integration and delivery
Continuous integration and delivery
Danilo Pianini
 
Git with t for teams
Git with t for teamsGit with t for teams
Git with t for teams
Sven Peters
 
The benefits of using an APM solution while performance testing
The benefits of using an APM solution while performance testingThe benefits of using an APM solution while performance testing
The benefits of using an APM solution while performance testing
DevOpsGroup
 
DevOps Pragmatic Overview
DevOps Pragmatic OverviewDevOps Pragmatic Overview
DevOps Pragmatic Overview
Mykola Marzhan
 
Develop Operation, Operate Development: A journey towards service delivery at...
Develop Operation, Operate Development: A journey towards service delivery at...Develop Operation, Operate Development: A journey towards service delivery at...
Develop Operation, Operate Development: A journey towards service delivery at...
Behrooz Nobakht
 
"DevOps > CI+CD "
"DevOps > CI+CD ""DevOps > CI+CD "
"DevOps > CI+CD "
Innovation Roots
 
Using JMeter in CloudTest for Continuous Testing
Using JMeter in CloudTest for Continuous TestingUsing JMeter in CloudTest for Continuous Testing
Using JMeter in CloudTest for Continuous Testing
SOASTA
 

What's hot (20)

Git Branching for Agile Teams
Git Branching for Agile Teams Git Branching for Agile Teams
Git Branching for Agile Teams
 
Transforming Organizations with CI/CD
Transforming Organizations with CI/CDTransforming Organizations with CI/CD
Transforming Organizations with CI/CD
 
Achieving DevOps Automation for the Database at NBCUniversal
Achieving DevOps Automation for the Database at NBCUniversalAchieving DevOps Automation for the Database at NBCUniversal
Achieving DevOps Automation for the Database at NBCUniversal
 
The 10 Commandments of Release Engineering
The 10 Commandments of Release EngineeringThe 10 Commandments of Release Engineering
The 10 Commandments of Release Engineering
 
Intro to DevOps 4 undergraduates
Intro to DevOps 4 undergraduates Intro to DevOps 4 undergraduates
Intro to DevOps 4 undergraduates
 
Successful testing continuous delivery - coding serbia 2013
Successful testing continuous delivery - coding serbia 2013Successful testing continuous delivery - coding serbia 2013
Successful testing continuous delivery - coding serbia 2013
 
Understanding DevOps in simpler way with Continuous Delivery
Understanding DevOps in simpler way with Continuous DeliveryUnderstanding DevOps in simpler way with Continuous Delivery
Understanding DevOps in simpler way with Continuous Delivery
 
Gitflow Workflow
Gitflow WorkflowGitflow Workflow
Gitflow Workflow
 
Continuous Integration Testing Techniques to Improve Chef Cookbook Quality
Continuous Integration Testing Techniques to Improve Chef Cookbook QualityContinuous Integration Testing Techniques to Improve Chef Cookbook Quality
Continuous Integration Testing Techniques to Improve Chef Cookbook Quality
 
Metrics driven dev ops 2017
Metrics driven dev ops 2017Metrics driven dev ops 2017
Metrics driven dev ops 2017
 
Fundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CDFundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CD
 
Developing with versioning and CI/CD
Developing with versioning and CI/CDDeveloping with versioning and CI/CD
Developing with versioning and CI/CD
 
Continuous integration and delivery
Continuous integration and deliveryContinuous integration and delivery
Continuous integration and delivery
 
Git with t for teams
Git with t for teamsGit with t for teams
Git with t for teams
 
The benefits of using an APM solution while performance testing
The benefits of using an APM solution while performance testingThe benefits of using an APM solution while performance testing
The benefits of using an APM solution while performance testing
 
DevOps Pragmatic Overview
DevOps Pragmatic OverviewDevOps Pragmatic Overview
DevOps Pragmatic Overview
 
Develop Operation, Operate Development: A journey towards service delivery at...
Develop Operation, Operate Development: A journey towards service delivery at...Develop Operation, Operate Development: A journey towards service delivery at...
Develop Operation, Operate Development: A journey towards service delivery at...
 
"DevOps > CI+CD "
"DevOps > CI+CD ""DevOps > CI+CD "
"DevOps > CI+CD "
 
Using JMeter in CloudTest for Continuous Testing
Using JMeter in CloudTest for Continuous TestingUsing JMeter in CloudTest for Continuous Testing
Using JMeter in CloudTest for Continuous Testing
 
fall2013-team14-Interim-second_report
fall2013-team14-Interim-second_reportfall2013-team14-Interim-second_report
fall2013-team14-Interim-second_report
 

Similar to White Paper: Release This! - Tools for a Smooth Release Cycle

54 c o m m u n i c at i o n s o f t h e a c m n o.docx
54    c o m m u n i c at i o n s  o f  t h e  a c m       n o.docx54    c o m m u n i c at i o n s  o f  t h e  a c m       n o.docx
54 c o m m u n i c at i o n s o f t h e a c m n o.docx
alinainglis
 
Release This! Tools for a Smooth Release Cycle
Release This! Tools for a Smooth Release CycleRelease This! Tools for a Smooth Release Cycle
Release This! Tools for a Smooth Release Cycle
Guerrilla
 
Bring Your Project From a 10 Years to a 3 Months Release Cycle
Bring Your Project From a 10 Years to a 3 Months Release CycleBring Your Project From a 10 Years to a 3 Months Release Cycle
Bring Your Project From a 10 Years to a 3 Months Release Cycle
Samsung Open Source Group
 
Easy oracle & weblogic provisioning and deployment
Easy oracle & weblogic provisioning and deploymentEasy oracle & weblogic provisioning and deployment
Easy oracle & weblogic provisioning and deployment
Bert Hajee
 
Continuous Everything
Continuous EverythingContinuous Everything
Continuous Everything
Andrea Tino
 
The Journey of Test Automation
The Journey of Test AutomationThe Journey of Test Automation
The Journey of Test Automation
opkey
 
DevOps and Build Automation
DevOps and Build AutomationDevOps and Build Automation
DevOps and Build Automation
Heiswayi Nrird
 
Scaling Up Lookout
Scaling Up LookoutScaling Up Lookout
Scaling Up Lookout
Lookout
 
version control system (2).pptx
version control system (2).pptxversion control system (2).pptx
version control system (2).pptx
DipanshuRaj19
 
Ansible
AnsibleAnsible
DevOps - Continuous Integration, Continuous Delivery - let's talk
DevOps - Continuous Integration, Continuous Delivery - let's talkDevOps - Continuous Integration, Continuous Delivery - let's talk
DevOps - Continuous Integration, Continuous Delivery - let's talk
D Z
 
The Different Versions of Dot NET
The Different Versions of Dot NETThe Different Versions of Dot NET
The Different Versions of Dot NET
Alvin Gom
 
Executing Deployment & Release Strategies
Executing Deployment & Release StrategiesExecuting Deployment & Release Strategies
Executing Deployment & Release Strategies
OpenSense Labs
 
Principles and Practices in Continuous Deployment at Etsy
Principles and Practices in Continuous Deployment at EtsyPrinciples and Practices in Continuous Deployment at Etsy
Principles and Practices in Continuous Deployment at Etsy
Mike Brittain
 
DevOps Continuous Integration & Delivery - A Whitepaper by RapidValue
DevOps Continuous Integration & Delivery - A Whitepaper by RapidValueDevOps Continuous Integration & Delivery - A Whitepaper by RapidValue
DevOps Continuous Integration & Delivery - A Whitepaper by RapidValue
RapidValue
 
Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)
Sergio Navarro Pino
 
Continuous Integration vs Continuous Delivery vs Continuous Deployment
Continuous Integration vs Continuous Delivery vs Continuous Deployment Continuous Integration vs Continuous Delivery vs Continuous Deployment
Continuous Integration vs Continuous Delivery vs Continuous Deployment
LGS, GBHS&IC, University Of South-Asia, TARA-Technologies
 
Jenkins - Automating Yourself Out Of A Job (One That You Don't Want)
Jenkins - Automating Yourself Out Of A Job (One That You Don't Want)Jenkins - Automating Yourself Out Of A Job (One That You Don't Want)
Jenkins - Automating Yourself Out Of A Job (One That You Don't Want)
lloydbenson
 
Version Uncontrolled - How to Manage Your Version Control (whitepaper)
Version Uncontrolled - How to Manage Your Version Control (whitepaper)Version Uncontrolled - How to Manage Your Version Control (whitepaper)
Version Uncontrolled - How to Manage Your Version Control (whitepaper)
Revelation Technologies
 

Similar to White Paper: Release This! - Tools for a Smooth Release Cycle (20)

54 c o m m u n i c at i o n s o f t h e a c m n o.docx
54    c o m m u n i c at i o n s  o f  t h e  a c m       n o.docx54    c o m m u n i c at i o n s  o f  t h e  a c m       n o.docx
54 c o m m u n i c at i o n s o f t h e a c m n o.docx
 
Release This! Tools for a Smooth Release Cycle
Release This! Tools for a Smooth Release CycleRelease This! Tools for a Smooth Release Cycle
Release This! Tools for a Smooth Release Cycle
 
Bring Your Project From a 10 Years to a 3 Months Release Cycle
Bring Your Project From a 10 Years to a 3 Months Release CycleBring Your Project From a 10 Years to a 3 Months Release Cycle
Bring Your Project From a 10 Years to a 3 Months Release Cycle
 
Easy oracle & weblogic provisioning and deployment
Easy oracle & weblogic provisioning and deploymentEasy oracle & weblogic provisioning and deployment
Easy oracle & weblogic provisioning and deployment
 
Continuous Everything
Continuous EverythingContinuous Everything
Continuous Everything
 
The Journey of Test Automation
The Journey of Test AutomationThe Journey of Test Automation
The Journey of Test Automation
 
DevOps and Build Automation
DevOps and Build AutomationDevOps and Build Automation
DevOps and Build Automation
 
Scaling Up Lookout
Scaling Up LookoutScaling Up Lookout
Scaling Up Lookout
 
version control system (2).pptx
version control system (2).pptxversion control system (2).pptx
version control system (2).pptx
 
Ansible
AnsibleAnsible
Ansible
 
DevOps - Continuous Integration, Continuous Delivery - let's talk
DevOps - Continuous Integration, Continuous Delivery - let's talkDevOps - Continuous Integration, Continuous Delivery - let's talk
DevOps - Continuous Integration, Continuous Delivery - let's talk
 
The Different Versions of Dot NET
The Different Versions of Dot NETThe Different Versions of Dot NET
The Different Versions of Dot NET
 
Executing Deployment & Release Strategies
Executing Deployment & Release StrategiesExecuting Deployment & Release Strategies
Executing Deployment & Release Strategies
 
Principles and Practices in Continuous Deployment at Etsy
Principles and Practices in Continuous Deployment at EtsyPrinciples and Practices in Continuous Deployment at Etsy
Principles and Practices in Continuous Deployment at Etsy
 
DevOps Continuous Integration & Delivery - A Whitepaper by RapidValue
DevOps Continuous Integration & Delivery - A Whitepaper by RapidValueDevOps Continuous Integration & Delivery - A Whitepaper by RapidValue
DevOps Continuous Integration & Delivery - A Whitepaper by RapidValue
 
Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)
 
Continuous Integration vs Continuous Delivery vs Continuous Deployment
Continuous Integration vs Continuous Delivery vs Continuous Deployment Continuous Integration vs Continuous Delivery vs Continuous Deployment
Continuous Integration vs Continuous Delivery vs Continuous Deployment
 
Jenkins - Automating Yourself Out Of A Job (One That You Don't Want)
Jenkins - Automating Yourself Out Of A Job (One That You Don't Want)Jenkins - Automating Yourself Out Of A Job (One That You Don't Want)
Jenkins - Automating Yourself Out Of A Job (One That You Don't Want)
 
Jenkins
JenkinsJenkins
Jenkins
 
Version Uncontrolled - How to Manage Your Version Control (whitepaper)
Version Uncontrolled - How to Manage Your Version Control (whitepaper)Version Uncontrolled - How to Manage Your Version Control (whitepaper)
Version Uncontrolled - How to Manage Your Version Control (whitepaper)
 

More from Perforce

How to Organize Game Developers With Different Planning Needs
How to Organize Game Developers With Different Planning NeedsHow to Organize Game Developers With Different Planning Needs
How to Organize Game Developers With Different Planning Needs
Perforce
 
Regulatory Traceability: How to Maintain Compliance, Quality, and Cost Effic...
Regulatory Traceability:  How to Maintain Compliance, Quality, and Cost Effic...Regulatory Traceability:  How to Maintain Compliance, Quality, and Cost Effic...
Regulatory Traceability: How to Maintain Compliance, Quality, and Cost Effic...
Perforce
 
Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Efficient Security Development and Testing Using Dynamic and Static Code Anal...Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Perforce
 
Understanding Compliant Workflow Enforcement SOPs
Understanding Compliant Workflow Enforcement SOPsUnderstanding Compliant Workflow Enforcement SOPs
Understanding Compliant Workflow Enforcement SOPs
Perforce
 
Branching Out: How To Automate Your Development Process
Branching Out: How To Automate Your Development ProcessBranching Out: How To Automate Your Development Process
Branching Out: How To Automate Your Development Process
Perforce
 
How to Do Code Reviews at Massive Scale For DevOps
How to Do Code Reviews at Massive Scale For DevOpsHow to Do Code Reviews at Massive Scale For DevOps
How to Do Code Reviews at Massive Scale For DevOps
Perforce
 
How to Spark Joy In Your Product Backlog
How to Spark Joy In Your Product Backlog How to Spark Joy In Your Product Backlog
How to Spark Joy In Your Product Backlog
Perforce
 
Going Remote: Build Up Your Game Dev Team
Going Remote: Build Up Your Game Dev Team Going Remote: Build Up Your Game Dev Team
Going Remote: Build Up Your Game Dev Team
Perforce
 
Shift to Remote: How to Manage Your New Workflow
Shift to Remote: How to Manage Your New WorkflowShift to Remote: How to Manage Your New Workflow
Shift to Remote: How to Manage Your New Workflow
Perforce
 
Hybrid Development Methodology in a Regulated World
Hybrid Development Methodology in a Regulated WorldHybrid Development Methodology in a Regulated World
Hybrid Development Methodology in a Regulated World
Perforce
 
Better, Faster, Easier: How to Make Git Really Work in the Enterprise
Better, Faster, Easier: How to Make Git Really Work in the EnterpriseBetter, Faster, Easier: How to Make Git Really Work in the Enterprise
Better, Faster, Easier: How to Make Git Really Work in the Enterprise
Perforce
 
Easier Requirements Management Using Diagrams In Helix ALM
Easier Requirements Management Using Diagrams In Helix ALMEasier Requirements Management Using Diagrams In Helix ALM
Easier Requirements Management Using Diagrams In Helix ALM
Perforce
 
How To Master Your Mega Backlog
How To Master Your Mega Backlog How To Master Your Mega Backlog
How To Master Your Mega Backlog
Perforce
 
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Perforce
 
How to Scale With Helix Core and Microsoft Azure
How to Scale With Helix Core and Microsoft Azure How to Scale With Helix Core and Microsoft Azure
How to Scale With Helix Core and Microsoft Azure
Perforce
 
Achieving Software Safety, Security, and Reliability Part 2
Achieving Software Safety, Security, and Reliability Part 2Achieving Software Safety, Security, and Reliability Part 2
Achieving Software Safety, Security, and Reliability Part 2
Perforce
 
Should You Break Up With Your Monolith?
Should You Break Up With Your Monolith?Should You Break Up With Your Monolith?
Should You Break Up With Your Monolith?
Perforce
 
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Perforce
 
What's New in Helix ALM 2019.4
What's New in Helix ALM 2019.4What's New in Helix ALM 2019.4
What's New in Helix ALM 2019.4
Perforce
 
Free Yourself From the MS Office Prison
Free Yourself From the MS Office Prison Free Yourself From the MS Office Prison
Free Yourself From the MS Office Prison
Perforce
 

More from Perforce (20)

How to Organize Game Developers With Different Planning Needs
How to Organize Game Developers With Different Planning NeedsHow to Organize Game Developers With Different Planning Needs
How to Organize Game Developers With Different Planning Needs
 
Regulatory Traceability: How to Maintain Compliance, Quality, and Cost Effic...
Regulatory Traceability:  How to Maintain Compliance, Quality, and Cost Effic...Regulatory Traceability:  How to Maintain Compliance, Quality, and Cost Effic...
Regulatory Traceability: How to Maintain Compliance, Quality, and Cost Effic...
 
Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Efficient Security Development and Testing Using Dynamic and Static Code Anal...Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Efficient Security Development and Testing Using Dynamic and Static Code Anal...
 
Understanding Compliant Workflow Enforcement SOPs
Understanding Compliant Workflow Enforcement SOPsUnderstanding Compliant Workflow Enforcement SOPs
Understanding Compliant Workflow Enforcement SOPs
 
Branching Out: How To Automate Your Development Process
Branching Out: How To Automate Your Development ProcessBranching Out: How To Automate Your Development Process
Branching Out: How To Automate Your Development Process
 
How to Do Code Reviews at Massive Scale For DevOps
How to Do Code Reviews at Massive Scale For DevOpsHow to Do Code Reviews at Massive Scale For DevOps
How to Do Code Reviews at Massive Scale For DevOps
 
How to Spark Joy In Your Product Backlog
How to Spark Joy In Your Product Backlog How to Spark Joy In Your Product Backlog
How to Spark Joy In Your Product Backlog
 
Going Remote: Build Up Your Game Dev Team
Going Remote: Build Up Your Game Dev Team Going Remote: Build Up Your Game Dev Team
Going Remote: Build Up Your Game Dev Team
 
Shift to Remote: How to Manage Your New Workflow
Shift to Remote: How to Manage Your New WorkflowShift to Remote: How to Manage Your New Workflow
Shift to Remote: How to Manage Your New Workflow
 
Hybrid Development Methodology in a Regulated World
Hybrid Development Methodology in a Regulated WorldHybrid Development Methodology in a Regulated World
Hybrid Development Methodology in a Regulated World
 
Better, Faster, Easier: How to Make Git Really Work in the Enterprise
Better, Faster, Easier: How to Make Git Really Work in the EnterpriseBetter, Faster, Easier: How to Make Git Really Work in the Enterprise
Better, Faster, Easier: How to Make Git Really Work in the Enterprise
 
Easier Requirements Management Using Diagrams In Helix ALM
Easier Requirements Management Using Diagrams In Helix ALMEasier Requirements Management Using Diagrams In Helix ALM
Easier Requirements Management Using Diagrams In Helix ALM
 
How To Master Your Mega Backlog
How To Master Your Mega Backlog How To Master Your Mega Backlog
How To Master Your Mega Backlog
 
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
 
How to Scale With Helix Core and Microsoft Azure
How to Scale With Helix Core and Microsoft Azure How to Scale With Helix Core and Microsoft Azure
How to Scale With Helix Core and Microsoft Azure
 
Achieving Software Safety, Security, and Reliability Part 2
Achieving Software Safety, Security, and Reliability Part 2Achieving Software Safety, Security, and Reliability Part 2
Achieving Software Safety, Security, and Reliability Part 2
 
Should You Break Up With Your Monolith?
Should You Break Up With Your Monolith?Should You Break Up With Your Monolith?
Should You Break Up With Your Monolith?
 
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
 
What's New in Helix ALM 2019.4
What's New in Helix ALM 2019.4What's New in Helix ALM 2019.4
What's New in Helix ALM 2019.4
 
Free Yourself From the MS Office Prison
Free Yourself From the MS Office Prison Free Yourself From the MS Office Prison
Free Yourself From the MS Office Prison
 

Recently uploaded

Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Zilliz
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 

Recently uploaded (20)

Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 

White Paper: Release This! - Tools for a Smooth Release Cycle

  • 1. Note: ““Attached is a very rough first draft of my whitepaper. The first half of it is more or less complete (though it still needs quite a lot of editing); the second half is still very sketchy. Not sure if this is enough detail for now, I will try flesh it out in the coming days and can probably send you an updated version early next week if that is any help. Frank.” Frank Compagner, Guerrilla Games Abstract Over the past years we have developed a strategy for managing our release branches that goes against accepted wisdom in the Perforce and wider SCM community, but which we have found to work very well nevertheless. Instead of having our developers work on the release branch, and integrating their changes back to the main branch, we keep everybody working on main and integrate selected changes to the release branch. We will explain why this works well in our case, and what processes and tools we needed to adopt to make this a key factor in a very smooth running release pipeline. What did we do? For every notable deliverable we produced over the last few years, we have created a release branch. Sometimes a further (say) 1.1 release branch was made from the 1.0 release branch, as usual. Initially we had most people working on the release branch, fixing bugs which would then be integrated back to the main branch. Over time, however, we often found it much easier to let people continue working on the main branch, and only integrate the changes to the release branch under complete control of the release managers. At first this process was managed by manually keeping track of the status of all changes, but this did not scale well. In fact, we found it hard to maintain for more than a week or so, at which point it became very hard to figure out the status of any particular change. Still, this allowed us to set up a release cycle as follows: at the beginning of the week, we would do a complete re synchronization of the main branch to the release branch. The result of this then gets tested by our internal QA department, any problems found would be fixed on the main branch and integrated onto the release branch, where the fix would be verified. This normally would enable us to deliver a fairly high quality build at the end of every week, which would then go on to more stringent external testing. Several weeks before the final delivery of the release we would stop the full re
  • 2. synchronizations from the main branch, and spent the remainder of the time ironing out the last remaining problems. Release branch Main branch 1 week Full (re )synchronization Bug fix Release This worked well as long as we restricted ourselves to just fixing the highest priority bugs, but it did not scale well to more complex releases where we could tolerate less problems in the final product. It was simply not possible to keep track of the status of all needed change s, and the inevitable divergence between main and release branch meant that after a week or two we stated to see lots of conflicts in the integration results, often making it next to impossible to get certain changes on the release branch. It became clear that if we wanted to continue in this way we would need tools to keep track of all relevant changes. As an important part of the problem was the lack of visibility of change status to everybody in the company, we quickly settled on a web app that allowed all developers to easily see the status of all changes. It also allowed everybody to request promotion of a change to the release branch, while the members of the release team were additionally allowed to approve or deny changes. To facilitate the actual integrations we created a simple tool that obtains a list of eligible changes from the web app, and allows the release team to simply integrate those changes to the release branch. Together, these tools improved the process considerably, making it possible to stay in control of the inevitable divergence for much longer, especially after we extended the web app to show dependency information of all changes. These tools are shown in more detail below, but let’’s first step back and ask ourselves: Why did we do it? The original reason for letting people continue working on the main branch during a release cycle was a very prosaic one. Even though Perforce branches are shallow on the server, on the client they are still pretty expensive, especially if you want to branch an entire project with a head revision of about 300GB. We would often find that we needed somebody to fix a bug who did not yet have the release branch locally; just getting the branch from the depot would then take the best part of the day, to say nothing of the subsequent build effort. Allowing people to fix the bug on the main branch and then integrating them to the Release branch was often by far the most practical solution. We have investigated the feasibility of creating tools that through a combination of clever workspace mappings, judiciously applied ‘‘p4 sync –k’’ commands and possibly some client side md5 hash tables would make branching a shallow process on the client as well as one the server. But while this does appear to be possible, it is definitely non trivial, and making the process solid and fool proof is likely to be very hard indeed.
  • 3. Another reason for not wanting people to work directly on the release branch is that all of our tools needed to be branch aware. As a high end games production company, we use a large number of specialized in house developed tools, and we kept finding circumstances under which these would refuse to work correctly on the release branch. Supporting this became a considerable amount of work. Finally, we have a considerable amount of users without much technical background, and we often found people being confused as to what branch they were working on, and submitting changes to the wrong (or even both) branches. So far, the reasons for keeping people working on the main branch are essentially negative. But as more and more people were working this way, we discovered an unexpected benefit: we gained control over the order and timing of changes on the release branch. This allowed us, for instance, to test certain more complex features in isolation on the relatively stable release branch, without much interference from other unrelated changes. It also allowed us to sometimes postpone risky changes until just after an intermediate deliverable, thereby maximizing testing time. In the end the amount of control over the entire release cycle we regained in this way is the main reason we have really grown to like this process. Of course, there are a number of obvious downsides to this idea. First and foremost is the fact that nobody in the entire company has the actual release branch on their machine; it exists solely on our build servers and as a finished build at the QA department. This means users cannot easily see the actual state of the release branch, so that reproduction of bugs is potentially a problem. It also becomes vitally important that everybody has an easy way of finding out whether their change has made it onto the release build, and, if so, in which build it ended up. As the order in which changes are integrated to the release branch is sometimes completely different from the order in which they were originally submitted on main, there is much potential for very complex resolve conflicts. However, through the use of a small amount of process and some well thought out tools we have found it very possible to keep these problems under control, resulting in a pretty smooth release process. How did we do it? Created web app that shows all changes on the main branch Using Python, Cherrypy and p4python. Easy overview of own changes for each user All users can request any change to be integrated Supports any number of simultaneous release branches For each release branch, we have a page with pending changes and a page with submitted changes Pending changes can be categorized by the release team. Pending page also lists dependencies (color coded for easy viewing), showing potential merge conflicts. Comments can be added by everyone Changes can be viewed in detail, with through links to the p4web diff pages Released changes list also shows builds done from release branch All released changes (also on user tab) will show first build that that change ended up in.
  • 4. Simple integration with bug tracking system (devtrack) Not (yet) using jobs ‘‘Manual’’ changes directly to the Release branch also supported. Link between changes on release and main branches made through changelist comments; sounds brittle, but not a problem in practice
  • 8. Inte egration tool: For build/rel lease team o only Also A python, with wx GU lib , UI Simple and foolproof S f Commandlin variant ex C ne xists
  • 9. Conclusion Not for everyone (list necessary conditions) But can be very good when you get it to work Visibility and transparency to all users is key (and beneficial in any branching strategy) Pretty easy to implement with a couple of Perforce api’’s