SlideShare una empresa de Scribd logo
1 de 9
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

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/CDCprime
 
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 NBCUniversalDatical
 
The 10 Commandments of Release Engineering
The 10 Commandments of Release EngineeringThe 10 Commandments of Release Engineering
The 10 Commandments of Release EngineeringSolano 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 DeliverySwapnil Jain
 
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 QualityJosiah Renaudin
 
Metrics driven dev ops 2017
Metrics driven dev ops 2017Metrics driven dev ops 2017
Metrics driven dev ops 2017Jerry Tan
 
Fundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CDFundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CDBatyr Nuryyev
 
Developing with versioning and CI/CD
Developing with versioning and CI/CDDeveloping with versioning and CI/CD
Developing with versioning and CI/CDMatteo Di Carlo
 
Continuous integration and delivery
Continuous integration and deliveryContinuous integration and delivery
Continuous integration and deliveryDanilo Pianini
 
Git with t for teams
Git with t for teamsGit with t for teams
Git with t for teamsSven 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 testingDevOpsGroup
 
DevOps Pragmatic Overview
DevOps Pragmatic OverviewDevOps Pragmatic Overview
DevOps Pragmatic OverviewMykola 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
 
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 TestingSOASTA
 

La actualidad más candente (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 a 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.docxalinainglis
 
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 CycleGuerrilla
 
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 CycleSamsung 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 deploymentBert Hajee
 
Continuous Everything
Continuous EverythingContinuous Everything
Continuous EverythingAndrea Tino
 
The Journey of Test Automation
The Journey of Test AutomationThe Journey of Test Automation
The Journey of Test Automationopkey
 
DevOps and Build Automation
DevOps and Build AutomationDevOps and Build Automation
DevOps and Build AutomationHeiswayi Nrird
 
Scaling Up Lookout
Scaling Up LookoutScaling Up Lookout
Scaling Up LookoutLookout
 
version control system (2).pptx
version control system (2).pptxversion control system (2).pptx
version control system (2).pptxDipanshuRaj19
 
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 talkD Z
 
The Different Versions of Dot NET
The Different Versions of Dot NETThe Different Versions of Dot NET
The Different Versions of Dot NETAlvin Gom
 
Executing Deployment & Release Strategies
Executing Deployment & Release StrategiesExecuting Deployment & Release Strategies
Executing Deployment & Release StrategiesOpenSense 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 EtsyMike 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 RapidValueRapidValue
 
Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)Sergio Navarro Pino
 
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 a 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)
 

Más de 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 NeedsPerforce
 
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 SOPsPerforce
 
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 ProcessPerforce
 
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 DevOpsPerforce
 
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 WorkflowPerforce
 
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 WorldPerforce
 
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 EnterprisePerforce
 
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 ALMPerforce
 
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 2Perforce
 
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.4Perforce
 
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
 

Más de 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
 

Último

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbuapidays
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 

Último (20)

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 

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