SlideShare a Scribd company logo
Outsmarting Merge Edge Cases in
Component Based Development
Mike Hobbs
Software Engineer
2
Overview
 Background
 Edge Cases, Pitfalls, and Solutions
 Conclusion / Q&A
Background
4
Background – MathWorks
 We are a 3500+ person company dedicated to accelerating
the pace of engineering and science
 We have ~90 products based upon our
core platforms
• MATLAB – The Language of Technical Computing
• Simulink – Simulation and Model-Based Design
5
Background - Definitions
 Product
• MATLAB
• Parallel Computing Toolbox
• Signal Processing Toolbox
 Component
• Set of strongly-related files
6
Background - Componentization
 ~90 products
• 5,000+ components, acyclical dependencies
• 100,000s of tests and test points
• ~36 hours to build and test from the ground up
• Managing an over 1 million file code base
 Benefits of componentization
• Develop in isolation
• Identify problems ahead of time
• Run only a subset of building and testing
7
Background – Solution Chosen
 Single stream per product, mostly
• //mw/Bparallel
• CTB (“Components to Build”) list, can change
• Virtual stream enforcing a view
 How to manage getting changes from one stream to
another?
• Tools (What I work on, automatically merging between streams)
 More background: “Moving 1000 Users and 100 Branches
Into Streams” – John LoVerso, MERGE 2014
8
Background - Architectural Issues
 Renames with regards to crossing the
stream view boundary
 Submitting both a delete and an add onto
the same filename
 Filename-based versus file object-based source control
system
9
Background – Filename / File Object
 Filename
• //mw/productA/file1
• //mw/productA/file2
10
Background – Filename / File Object
 Filename
• //mw/productA/file1
• //mw/productA/file2
 File Object
• p4 add file1
• p4 submit
Edge Cases
12
Edge Cases – Complex Merge
 What is it?
• Multiple changes to merge to a destination
• Cannot be represented in one single change
 Classic example
 Easy solution, no?
• “Just merge the left half first.”
 Can’t ask the developer to manually apply the solution to
each issue we find
13
Edge Cases – Complex Merge
 How do you identify one?
• First pitfall: Problem definition
 Incorrect: Counting endpoints
• Correct in many cases (95% or so)
• False positives and false negatives
14
Edge Cases – Complex Merge
 How do you identify one?
• First pitfall: Problem definition
 Incorrect: Set of changes that cannot
be represented in just one change
• How do you know you are correct?
15
Edge Cases – Complex Merge
 How do you identify one?
• First pitfall: Problem definition
 Correct: Identify the actual, big-ticket item
• For us, this was the fact that people were renaming files often
• Much easier to identify “filenames which need both a delete, and then an
add applied to them” (i.e. complex merge on filename A)
16
Edge Cases – Complex Merge
 How do you resolve one?
• Second pitfall: Merging at an earlier change
• Third pitfall: Asking the user to do it
 Incorrect: Complex merge identified at
c123456, so run the command at c123455
• Or at c123000, and then at c123100,
and then at c123150, and then…
• Manually resolve!
17
Edge Cases – Complex Merge
 How do you resolve one?
• Second pitfall: Merging at an earlier change
• Third pitfall: Asking the user to do it
 Correct: Automatically submit
18
Edge Cases – Deadwood
 What is it?
• Stream has fileA in view
• Stream CTB changes, fileA no longer in view
• fileA continues to exist, no changes are received
Files in view
“Dead wood”
Files out of view
19
Edge Cases – Deadwood
 Why is it bad?
Files in view
“Dead wood”
Files out of view
20
Edge Cases – Deadwood
 First pitfall: Leave it alone
Files in view
“Dead wood”
Files out of view
21
Edge Cases – Deadwood
 Second pitfall: Merge everything from the beginning of time
Files in view
“Dead wood”
Files out of view
22
Edge Cases – Deadwood
 Implementation we settled on: Iteratively merge everything
in a smaller chunk of changes
• Has downsides, manual resolves scheduled when they’re not needed
Files in view
“Dead wood”
Files out of view
23
Edge Cases – Deadwood
 Implementation we want to eventually get to: Sparse
Branches (John LoVerso’s MERGE 2016 presentation)
Files in view
“Dead wood”
Files out of view
24
Edge Cases – Renames Across View
Files in view
“Dead wood”
Files out of view
 What is it?
• FileA -> FileB -> FileC on the source
• FileB is not in view
25
Edge Cases – Rename Across View
What should happen: What actually happens:
26
Edge Cases – Rename Across View
What should happen: What actually happens:
27
Edge Cases – Rename Across View
What should happen: What actually happens:
28
Edge Cases – Rename Across View
What should happen: What actually happens:
29
Edge Cases – Rename Across View
What should happen: What actually happens:
30
Edge Cases – Renames Across View
 Pitfalls:
• Only include the first and last names in view
• Only consider one rename, not multiple renames
• Add too many things to the view of a virtual stream
31
Edge Cases – Renames Across View
 Solution:
• Merge everything in a given range, selectively revert edits and branches
• Same solution we use for keeping deadwood relatively managed
32
Edge Cases – Shadowed Delete
 What is it?
• Delete that does not show up when you merge
• Not the head revision
• Integration engine thinks it’s done at the move/add
33
Edge Cases – Shadowed Delete
What should happen: What actually happens:
34
Edge Cases – Shadowed Delete
What should happen: What actually happens:
35
Edge Cases – Shadowed Delete
What should happen: What actually happens:
36
Edge Cases – Shadowed Delete
What should happen: What actually happens:
37
Edge Cases – Shadowed Delete
 How to identify it?
• Look for deletes not at the head revision
in the range you are merging
 How to resolve it?
• Merge at a specific revision for the problem file
38
Edge Cases – Shadowed Delete
 How to identify it?
• Look for deletes not at the head revision
in the range you are merging
 How to resolve it?
• Merge at a specific revision for the problem file
 Pitfalls?
• Merging multiple times without resolving
Conclusion
40
Conclusion – Lessons Learned
 Things to do:
• Look at the big picture, solve a problem instead of its symptoms
• Ask users to follow a simple, managed workflow
• Test everything across releases and decide to upgrade or not
 Things not to do:
• Assume you’ve found all cases of a problem
• Assume Perforce behavior will stay the same
41
Conclusion – What We’d Like
 Source control on an object-by-object basis
• Reconcile would work in most / all cases
• Renames, view, and componentization would be easier to handle and
define by file object content rather than specific filenames
 Truly sparse streams
• Prevent issues from ever happening, if the files never actually exist
on a stream
Questions?
Mike Hobbs
Mike dot Hobbs at mathworks dot com

More Related Content

What's hot

Using Perforce Data in Development at Tableau
Using Perforce Data in Development at TableauUsing Perforce Data in Development at Tableau
Using Perforce Data in Development at Tableau
Perforce
 
The devops approach to monitoring, Open Source and Infrastructure as Code Style
The devops approach to monitoring, Open Source and Infrastructure as Code StyleThe devops approach to monitoring, Open Source and Infrastructure as Code Style
The devops approach to monitoring, Open Source and Infrastructure as Code Style
Julien Pivotto
 
Infrastructure as Code for Network
Infrastructure as Code for NetworkInfrastructure as Code for Network
Infrastructure as Code for Network
Damien Garros
 
Webinar slides: Replication Topology Changes for MySQL and MariaDB
Webinar slides: Replication Topology Changes for MySQL and MariaDBWebinar slides: Replication Topology Changes for MySQL and MariaDB
Webinar slides: Replication Topology Changes for MySQL and MariaDB
Severalnines
 
How Samsung Engineers Do Pre-Commit Builds with Perforce Helix Streams
How Samsung Engineers Do Pre-Commit Builds with Perforce Helix StreamsHow Samsung Engineers Do Pre-Commit Builds with Perforce Helix Streams
How Samsung Engineers Do Pre-Commit Builds with Perforce Helix Streams
Perforce
 
Measure and Increase Developer Productivity with Help of Serverless at AWS Co...
Measure and Increase Developer Productivity with Help of Serverless at AWS Co...Measure and Increase Developer Productivity with Help of Serverless at AWS Co...
Measure and Increase Developer Productivity with Help of Serverless at AWS Co...
Vadym Kazulkin
 
Introduction to Git for developers
Introduction to Git for developersIntroduction to Git for developers
Introduction to Git for developers
Dmitry Guyvoronsky
 
A Practical Guide to Selecting a Stream Processing Technology
A Practical Guide to Selecting a Stream Processing Technology A Practical Guide to Selecting a Stream Processing Technology
A Practical Guide to Selecting a Stream Processing Technology
confluent
 
OnAndroidConf 2013: Accelerating the Android Platform Build
OnAndroidConf 2013: Accelerating the Android Platform BuildOnAndroidConf 2013: Accelerating the Android Platform Build
OnAndroidConf 2013: Accelerating the Android Platform Build
David Rosen
 
Deployment pipeline for databases
Deployment pipeline for databasesDeployment pipeline for databases
Deployment pipeline for databases
Eduardo Piairo
 
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
Gaetano Giunta
 
12 Factor Scala
12 Factor Scala12 Factor Scala
12 Factor Scala
Joe Kutner
 
Continuous integration using Jenkins and Sonar
Continuous integration using Jenkins and SonarContinuous integration using Jenkins and Sonar
Continuous integration using Jenkins and Sonar
Pascal Larocque
 
Adopting Java for the Serverless world at AWS User Group Pretoria
Adopting Java for the Serverless world at AWS User Group PretoriaAdopting Java for the Serverless world at AWS User Group Pretoria
Adopting Java for the Serverless world at AWS User Group Pretoria
Vadym Kazulkin
 
Systematic Load Testing of Web Applications
Systematic Load Testing of Web ApplicationsSystematic Load Testing of Web Applications
Systematic Load Testing of Web Applications
Jürg Stuker
 
HA SOA Application with GlusterFS
HA SOA Application with GlusterFSHA SOA Application with GlusterFS
HA SOA Application with GlusterFS
zeridon
 
Code Yellow: Helping Operations Top-Heavy Teams the Smart Way
Code Yellow: Helping Operations Top-Heavy Teams the Smart WayCode Yellow: Helping Operations Top-Heavy Teams the Smart Way
Code Yellow: Helping Operations Top-Heavy Teams the Smart Way
Todd Palino
 
Legacy Sins
Legacy SinsLegacy Sins
Legacy Sins
Eberhard Wolff
 
URP? Excuse You! The Three Metrics You Have to Know
URP? Excuse You! The Three Metrics You Have to Know URP? Excuse You! The Three Metrics You Have to Know
URP? Excuse You! The Three Metrics You Have to Know
confluent
 
DESIGN West 2013 Presentation: Accelerating Android Development and Delivery
DESIGN West 2013 Presentation: Accelerating Android Development and DeliveryDESIGN West 2013 Presentation: Accelerating Android Development and Delivery
DESIGN West 2013 Presentation: Accelerating Android Development and Delivery
David Rosen
 

What's hot (20)

Using Perforce Data in Development at Tableau
Using Perforce Data in Development at TableauUsing Perforce Data in Development at Tableau
Using Perforce Data in Development at Tableau
 
The devops approach to monitoring, Open Source and Infrastructure as Code Style
The devops approach to monitoring, Open Source and Infrastructure as Code StyleThe devops approach to monitoring, Open Source and Infrastructure as Code Style
The devops approach to monitoring, Open Source and Infrastructure as Code Style
 
Infrastructure as Code for Network
Infrastructure as Code for NetworkInfrastructure as Code for Network
Infrastructure as Code for Network
 
Webinar slides: Replication Topology Changes for MySQL and MariaDB
Webinar slides: Replication Topology Changes for MySQL and MariaDBWebinar slides: Replication Topology Changes for MySQL and MariaDB
Webinar slides: Replication Topology Changes for MySQL and MariaDB
 
How Samsung Engineers Do Pre-Commit Builds with Perforce Helix Streams
How Samsung Engineers Do Pre-Commit Builds with Perforce Helix StreamsHow Samsung Engineers Do Pre-Commit Builds with Perforce Helix Streams
How Samsung Engineers Do Pre-Commit Builds with Perforce Helix Streams
 
Measure and Increase Developer Productivity with Help of Serverless at AWS Co...
Measure and Increase Developer Productivity with Help of Serverless at AWS Co...Measure and Increase Developer Productivity with Help of Serverless at AWS Co...
Measure and Increase Developer Productivity with Help of Serverless at AWS Co...
 
Introduction to Git for developers
Introduction to Git for developersIntroduction to Git for developers
Introduction to Git for developers
 
A Practical Guide to Selecting a Stream Processing Technology
A Practical Guide to Selecting a Stream Processing Technology A Practical Guide to Selecting a Stream Processing Technology
A Practical Guide to Selecting a Stream Processing Technology
 
OnAndroidConf 2013: Accelerating the Android Platform Build
OnAndroidConf 2013: Accelerating the Android Platform BuildOnAndroidConf 2013: Accelerating the Android Platform Build
OnAndroidConf 2013: Accelerating the Android Platform Build
 
Deployment pipeline for databases
Deployment pipeline for databasesDeployment pipeline for databases
Deployment pipeline for databases
 
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
 
12 Factor Scala
12 Factor Scala12 Factor Scala
12 Factor Scala
 
Continuous integration using Jenkins and Sonar
Continuous integration using Jenkins and SonarContinuous integration using Jenkins and Sonar
Continuous integration using Jenkins and Sonar
 
Adopting Java for the Serverless world at AWS User Group Pretoria
Adopting Java for the Serverless world at AWS User Group PretoriaAdopting Java for the Serverless world at AWS User Group Pretoria
Adopting Java for the Serverless world at AWS User Group Pretoria
 
Systematic Load Testing of Web Applications
Systematic Load Testing of Web ApplicationsSystematic Load Testing of Web Applications
Systematic Load Testing of Web Applications
 
HA SOA Application with GlusterFS
HA SOA Application with GlusterFSHA SOA Application with GlusterFS
HA SOA Application with GlusterFS
 
Code Yellow: Helping Operations Top-Heavy Teams the Smart Way
Code Yellow: Helping Operations Top-Heavy Teams the Smart WayCode Yellow: Helping Operations Top-Heavy Teams the Smart Way
Code Yellow: Helping Operations Top-Heavy Teams the Smart Way
 
Legacy Sins
Legacy SinsLegacy Sins
Legacy Sins
 
URP? Excuse You! The Three Metrics You Have to Know
URP? Excuse You! The Three Metrics You Have to Know URP? Excuse You! The Three Metrics You Have to Know
URP? Excuse You! The Three Metrics You Have to Know
 
DESIGN West 2013 Presentation: Accelerating Android Development and Delivery
DESIGN West 2013 Presentation: Accelerating Android Development and DeliveryDESIGN West 2013 Presentation: Accelerating Android Development and Delivery
DESIGN West 2013 Presentation: Accelerating Android Development and Delivery
 

Viewers also liked

LAB - Component Based Development
LAB - Component Based DevelopmentLAB - Component Based Development
LAB - Component Based Development
Perforce
 
Configuration and Build Management of Product Line Development with Perforce
Configuration and Build Management of Product Line Development with Perforce  Configuration and Build Management of Product Line Development with Perforce
Configuration and Build Management of Product Line Development with Perforce
Perforce
 
[Nvidia] Extracting Depot Paths Into New Instances of Their Own
[Nvidia] Extracting Depot Paths Into New Instances of Their Own[Nvidia] Extracting Depot Paths Into New Instances of Their Own
[Nvidia] Extracting Depot Paths Into New Instances of Their Own
Perforce
 
Infographic: Perforce vs Subversion
Infographic: Perforce vs SubversionInfographic: Perforce vs Subversion
Infographic: Perforce vs Subversion
Perforce
 
Granular Protections Management with Triggers
Granular Protections Management with TriggersGranular Protections Management with Triggers
Granular Protections Management with Triggers
Perforce
 
[Lucas Films] Using a Perforce Proxy with Alternate Transports
[Lucas Films] Using a Perforce Proxy with Alternate Transports[Lucas Films] Using a Perforce Proxy with Alternate Transports
[Lucas Films] Using a Perforce Proxy with Alternate Transports
Perforce
 
[Mentor Graphics] A Perforce-based Automatic Document Generation System
[Mentor Graphics] A Perforce-based Automatic Document Generation System[Mentor Graphics] A Perforce-based Automatic Document Generation System
[Mentor Graphics] A Perforce-based Automatic Document Generation System
Perforce
 
[Webinar] The Changing Role of Release Engineering in a DevOps World with J. ...
[Webinar] The Changing Role of Release Engineering in a DevOps World with J. ...[Webinar] The Changing Role of Release Engineering in a DevOps World with J. ...
[Webinar] The Changing Role of Release Engineering in a DevOps World with J. ...
Perforce
 
Cheat Sheet
Cheat SheetCheat Sheet
Cheat Sheet
Perforce
 
[AMD] Novel Use of Perforce for Software Auto-updates and File Transfer
[AMD] Novel Use of Perforce for Software Auto-updates and File Transfer[AMD] Novel Use of Perforce for Software Auto-updates and File Transfer
[AMD] Novel Use of Perforce for Software Auto-updates and File Transfer
Perforce
 
[SAP] Perforce Administrative Self Services at SAP
[SAP] Perforce Administrative Self Services at SAP[SAP] Perforce Administrative Self Services at SAP
[SAP] Perforce Administrative Self Services at SAP
Perforce
 
Infographic: Perforce vs ClearCase
Infographic: Perforce vs ClearCaseInfographic: Perforce vs ClearCase
Infographic: Perforce vs ClearCase
Perforce
 
[NetApp] Simplified HA:DR Using Storage Solutions
[NetApp] Simplified HA:DR Using Storage Solutions[NetApp] Simplified HA:DR Using Storage Solutions
[NetApp] Simplified HA:DR Using Storage Solutions
Perforce
 
[NetherRealm Studios] Game Studio Perforce Architecture
[NetherRealm Studios] Game Studio Perforce Architecture[NetherRealm Studios] Game Studio Perforce Architecture
[NetherRealm Studios] Game Studio Perforce Architecture
Perforce
 
[NetApp Managing Big Workspaces with Storage Magic
[NetApp Managing Big Workspaces with Storage Magic[NetApp Managing Big Workspaces with Storage Magic
[NetApp Managing Big Workspaces with Storage Magic
Perforce
 
Managing Microservices at Scale
Managing Microservices at ScaleManaging Microservices at Scale
Managing Microservices at Scale
Perforce
 
From ClearCase to Perforce Helix: Breakthroughs in Scalability at Intel
From ClearCase to Perforce Helix: Breakthroughs in Scalability at IntelFrom ClearCase to Perforce Helix: Breakthroughs in Scalability at Intel
From ClearCase to Perforce Helix: Breakthroughs in Scalability at Intel
Perforce
 
[MathWorks] Versioning Infrastructure
[MathWorks] Versioning Infrastructure[MathWorks] Versioning Infrastructure
[MathWorks] Versioning Infrastructure
Perforce
 
Continuous Validation
Continuous ValidationContinuous Validation
Continuous Validation
Perforce
 
[Citrix] Perforce Standardisation at Citrix
[Citrix] Perforce Standardisation at Citrix[Citrix] Perforce Standardisation at Citrix
[Citrix] Perforce Standardisation at Citrix
Perforce
 

Viewers also liked (20)

LAB - Component Based Development
LAB - Component Based DevelopmentLAB - Component Based Development
LAB - Component Based Development
 
Configuration and Build Management of Product Line Development with Perforce
Configuration and Build Management of Product Line Development with Perforce  Configuration and Build Management of Product Line Development with Perforce
Configuration and Build Management of Product Line Development with Perforce
 
[Nvidia] Extracting Depot Paths Into New Instances of Their Own
[Nvidia] Extracting Depot Paths Into New Instances of Their Own[Nvidia] Extracting Depot Paths Into New Instances of Their Own
[Nvidia] Extracting Depot Paths Into New Instances of Their Own
 
Infographic: Perforce vs Subversion
Infographic: Perforce vs SubversionInfographic: Perforce vs Subversion
Infographic: Perforce vs Subversion
 
Granular Protections Management with Triggers
Granular Protections Management with TriggersGranular Protections Management with Triggers
Granular Protections Management with Triggers
 
[Lucas Films] Using a Perforce Proxy with Alternate Transports
[Lucas Films] Using a Perforce Proxy with Alternate Transports[Lucas Films] Using a Perforce Proxy with Alternate Transports
[Lucas Films] Using a Perforce Proxy with Alternate Transports
 
[Mentor Graphics] A Perforce-based Automatic Document Generation System
[Mentor Graphics] A Perforce-based Automatic Document Generation System[Mentor Graphics] A Perforce-based Automatic Document Generation System
[Mentor Graphics] A Perforce-based Automatic Document Generation System
 
[Webinar] The Changing Role of Release Engineering in a DevOps World with J. ...
[Webinar] The Changing Role of Release Engineering in a DevOps World with J. ...[Webinar] The Changing Role of Release Engineering in a DevOps World with J. ...
[Webinar] The Changing Role of Release Engineering in a DevOps World with J. ...
 
Cheat Sheet
Cheat SheetCheat Sheet
Cheat Sheet
 
[AMD] Novel Use of Perforce for Software Auto-updates and File Transfer
[AMD] Novel Use of Perforce for Software Auto-updates and File Transfer[AMD] Novel Use of Perforce for Software Auto-updates and File Transfer
[AMD] Novel Use of Perforce for Software Auto-updates and File Transfer
 
[SAP] Perforce Administrative Self Services at SAP
[SAP] Perforce Administrative Self Services at SAP[SAP] Perforce Administrative Self Services at SAP
[SAP] Perforce Administrative Self Services at SAP
 
Infographic: Perforce vs ClearCase
Infographic: Perforce vs ClearCaseInfographic: Perforce vs ClearCase
Infographic: Perforce vs ClearCase
 
[NetApp] Simplified HA:DR Using Storage Solutions
[NetApp] Simplified HA:DR Using Storage Solutions[NetApp] Simplified HA:DR Using Storage Solutions
[NetApp] Simplified HA:DR Using Storage Solutions
 
[NetherRealm Studios] Game Studio Perforce Architecture
[NetherRealm Studios] Game Studio Perforce Architecture[NetherRealm Studios] Game Studio Perforce Architecture
[NetherRealm Studios] Game Studio Perforce Architecture
 
[NetApp Managing Big Workspaces with Storage Magic
[NetApp Managing Big Workspaces with Storage Magic[NetApp Managing Big Workspaces with Storage Magic
[NetApp Managing Big Workspaces with Storage Magic
 
Managing Microservices at Scale
Managing Microservices at ScaleManaging Microservices at Scale
Managing Microservices at Scale
 
From ClearCase to Perforce Helix: Breakthroughs in Scalability at Intel
From ClearCase to Perforce Helix: Breakthroughs in Scalability at IntelFrom ClearCase to Perforce Helix: Breakthroughs in Scalability at Intel
From ClearCase to Perforce Helix: Breakthroughs in Scalability at Intel
 
[MathWorks] Versioning Infrastructure
[MathWorks] Versioning Infrastructure[MathWorks] Versioning Infrastructure
[MathWorks] Versioning Infrastructure
 
Continuous Validation
Continuous ValidationContinuous Validation
Continuous Validation
 
[Citrix] Perforce Standardisation at Citrix
[Citrix] Perforce Standardisation at Citrix[Citrix] Perforce Standardisation at Citrix
[Citrix] Perforce Standardisation at Citrix
 

Similar to Outsmarting Merge Edge Cases in Component Based Design

The Problems with Redux: Are MobX and Realm going to put and end to it?
The Problems with Redux: Are MobX and Realm going to put and end to it?The Problems with Redux: Are MobX and Realm going to put and end to it?
The Problems with Redux: Are MobX and Realm going to put and end to it?
Quantum Mob
 
Why retail companies can't afford database downtime
Why retail companies can't afford database downtimeWhy retail companies can't afford database downtime
Why retail companies can't afford database downtime
DBmaestro - Database DevOps
 
PostgreSQL at 20TB and Beyond
PostgreSQL at 20TB and BeyondPostgreSQL at 20TB and Beyond
PostgreSQL at 20TB and Beyond
Chris Travers
 
.NET Core Summer event 2019 in Linz, AT - War stories from .NET team -- Karel...
.NET Core Summer event 2019 in Linz, AT - War stories from .NET team -- Karel....NET Core Summer event 2019 in Linz, AT - War stories from .NET team -- Karel...
.NET Core Summer event 2019 in Linz, AT - War stories from .NET team -- Karel...
Karel Zikmund
 
A modern architecturereview–usingcodereviewtools-ver-3.5
A modern architecturereview–usingcodereviewtools-ver-3.5A modern architecturereview–usingcodereviewtools-ver-3.5
A modern architecturereview–usingcodereviewtools-ver-3.5
SSW
 
Git Makes Me Angry Inside - DrupalCon Prague
Git Makes Me Angry Inside - DrupalCon PragueGit Makes Me Angry Inside - DrupalCon Prague
Git Makes Me Angry Inside - DrupalCon Prague
Emma Jane Hogbin Westby
 
Anti patterns part 2
Anti patterns part 2Anti patterns part 2
Anti patterns part 2
Return on Intelligence
 
TXJS 2013 in 10 minutes
TXJS 2013 in 10 minutesTXJS 2013 in 10 minutes
TXJS 2013 in 10 minutes
Eugene Lazutkin
 
.NET Core Summer event 2019 in Brno, CZ - War stories from .NET team -- Karel...
.NET Core Summer event 2019 in Brno, CZ - War stories from .NET team -- Karel....NET Core Summer event 2019 in Brno, CZ - War stories from .NET team -- Karel...
.NET Core Summer event 2019 in Brno, CZ - War stories from .NET team -- Karel...
Karel Zikmund
 
OOP 2014 - Lifecycle By Design
OOP 2014 - Lifecycle By DesignOOP 2014 - Lifecycle By Design
OOP 2014 - Lifecycle By Design
Wolfgang Gottesheim
 
Ipc feb4
Ipc feb4Ipc feb4
Ipc feb4
yashnand
 
Software Carpentry and the Hydrological Sciences @ AGU 2013
Software Carpentry and the Hydrological Sciences @ AGU 2013Software Carpentry and the Hydrological Sciences @ AGU 2013
Software Carpentry and the Hydrological Sciences @ AGU 2013
Aron Ahmadia
 
bp
bpbp
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Fwdays
 
What is this cloud thing?
What is this cloud thing?What is this cloud thing?
What is this cloud thing?
Andrew Eisenberg
 
SDWest2005Goetsch
SDWest2005GoetschSDWest2005Goetsch
SDWest2005Goetsch
Mark Goetsch
 
In (database) automation we trust
In (database) automation we trustIn (database) automation we trust
In (database) automation we trust
DBmaestro - Database DevOps
 
DevOps: Find Solutions, Not More Defects
DevOps: Find Solutions, Not More DefectsDevOps: Find Solutions, Not More Defects
DevOps: Find Solutions, Not More Defects
TechWell
 
Git Makes Me Angry Inside
Git Makes Me Angry InsideGit Makes Me Angry Inside
Git Makes Me Angry Inside
Emma Jane Hogbin Westby
 
Simple Code
Simple CodeSimple Code
Simple Code
Rui Carvalho
 

Similar to Outsmarting Merge Edge Cases in Component Based Design (20)

The Problems with Redux: Are MobX and Realm going to put and end to it?
The Problems with Redux: Are MobX and Realm going to put and end to it?The Problems with Redux: Are MobX and Realm going to put and end to it?
The Problems with Redux: Are MobX and Realm going to put and end to it?
 
Why retail companies can't afford database downtime
Why retail companies can't afford database downtimeWhy retail companies can't afford database downtime
Why retail companies can't afford database downtime
 
PostgreSQL at 20TB and Beyond
PostgreSQL at 20TB and BeyondPostgreSQL at 20TB and Beyond
PostgreSQL at 20TB and Beyond
 
.NET Core Summer event 2019 in Linz, AT - War stories from .NET team -- Karel...
.NET Core Summer event 2019 in Linz, AT - War stories from .NET team -- Karel....NET Core Summer event 2019 in Linz, AT - War stories from .NET team -- Karel...
.NET Core Summer event 2019 in Linz, AT - War stories from .NET team -- Karel...
 
A modern architecturereview–usingcodereviewtools-ver-3.5
A modern architecturereview–usingcodereviewtools-ver-3.5A modern architecturereview–usingcodereviewtools-ver-3.5
A modern architecturereview–usingcodereviewtools-ver-3.5
 
Git Makes Me Angry Inside - DrupalCon Prague
Git Makes Me Angry Inside - DrupalCon PragueGit Makes Me Angry Inside - DrupalCon Prague
Git Makes Me Angry Inside - DrupalCon Prague
 
Anti patterns part 2
Anti patterns part 2Anti patterns part 2
Anti patterns part 2
 
TXJS 2013 in 10 minutes
TXJS 2013 in 10 minutesTXJS 2013 in 10 minutes
TXJS 2013 in 10 minutes
 
.NET Core Summer event 2019 in Brno, CZ - War stories from .NET team -- Karel...
.NET Core Summer event 2019 in Brno, CZ - War stories from .NET team -- Karel....NET Core Summer event 2019 in Brno, CZ - War stories from .NET team -- Karel...
.NET Core Summer event 2019 in Brno, CZ - War stories from .NET team -- Karel...
 
OOP 2014 - Lifecycle By Design
OOP 2014 - Lifecycle By DesignOOP 2014 - Lifecycle By Design
OOP 2014 - Lifecycle By Design
 
Ipc feb4
Ipc feb4Ipc feb4
Ipc feb4
 
Software Carpentry and the Hydrological Sciences @ AGU 2013
Software Carpentry and the Hydrological Sciences @ AGU 2013Software Carpentry and the Hydrological Sciences @ AGU 2013
Software Carpentry and the Hydrological Sciences @ AGU 2013
 
bp
bpbp
bp
 
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
 
What is this cloud thing?
What is this cloud thing?What is this cloud thing?
What is this cloud thing?
 
SDWest2005Goetsch
SDWest2005GoetschSDWest2005Goetsch
SDWest2005Goetsch
 
In (database) automation we trust
In (database) automation we trustIn (database) automation we trust
In (database) automation we trust
 
DevOps: Find Solutions, Not More Defects
DevOps: Find Solutions, Not More DefectsDevOps: Find Solutions, Not More Defects
DevOps: Find Solutions, Not More Defects
 
Git Makes Me Angry Inside
Git Makes Me Angry InsideGit Makes Me Angry Inside
Git Makes Me Angry Inside
 
Simple Code
Simple CodeSimple Code
Simple Code
 

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

DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSISDECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
Tier1 app
 
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptxOperational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
sandeepmenon62
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Julian Hyde
 
美洲杯赔率投注网【​网址​🎉3977·EE​🎉】
美洲杯赔率投注网【​网址​🎉3977·EE​🎉】美洲杯赔率投注网【​网址​🎉3977·EE​🎉】
美洲杯赔率投注网【​网址​🎉3977·EE​🎉】
widenerjobeyrl638
 
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
kgyxske
 
Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !
Marcin Chrost
 
Migration From CH 1.0 to CH 2.0 and Mule 4.6 & Java 17 Upgrade.pptx
Migration From CH 1.0 to CH 2.0 and  Mule 4.6 & Java 17 Upgrade.pptxMigration From CH 1.0 to CH 2.0 and  Mule 4.6 & Java 17 Upgrade.pptx
Migration From CH 1.0 to CH 2.0 and Mule 4.6 & Java 17 Upgrade.pptx
ervikas4
 
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
campbellclarkson
 
Malibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed RoundMalibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed Round
sjcobrien
 
42 Ways to Generate Real Estate Leads - Sellxpert
42 Ways to Generate Real Estate Leads - Sellxpert42 Ways to Generate Real Estate Leads - Sellxpert
42 Ways to Generate Real Estate Leads - Sellxpert
vaishalijagtap12
 
DevOps Consulting Company | Hire DevOps Services
DevOps Consulting Company | Hire DevOps ServicesDevOps Consulting Company | Hire DevOps Services
DevOps Consulting Company | Hire DevOps Services
seospiralmantra
 
TMU毕业证书精仿办理
TMU毕业证书精仿办理TMU毕业证书精仿办理
TMU毕业证书精仿办理
aeeva
 
Boost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management AppsBoost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management Apps
Jhone kinadey
 
Superpower Your Apache Kafka Applications Development with Complementary Open...
Superpower Your Apache Kafka Applications Development with Complementary Open...Superpower Your Apache Kafka Applications Development with Complementary Open...
Superpower Your Apache Kafka Applications Development with Complementary Open...
Paul Brebner
 
Kubernetes at Scale: Going Multi-Cluster with Istio
Kubernetes at Scale:  Going Multi-Cluster  with IstioKubernetes at Scale:  Going Multi-Cluster  with Istio
Kubernetes at Scale: Going Multi-Cluster with Istio
Severalnines
 
What’s New in Odoo 17 – A Complete Roadmap
What’s New in Odoo 17 – A Complete RoadmapWhat’s New in Odoo 17 – A Complete Roadmap
What’s New in Odoo 17 – A Complete Roadmap
Envertis Software Solutions
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
kalichargn70th171
 
Orca: Nocode Graphical Editor for Container Orchestration
Orca: Nocode Graphical Editor for Container OrchestrationOrca: Nocode Graphical Editor for Container Orchestration
Orca: Nocode Graphical Editor for Container Orchestration
Pedro J. Molina
 
How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?
ToXSL Technologies
 
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...
Luigi Fugaro
 

Recently uploaded (20)

DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSISDECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
 
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptxOperational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
 
美洲杯赔率投注网【​网址​🎉3977·EE​🎉】
美洲杯赔率投注网【​网址​🎉3977·EE​🎉】美洲杯赔率投注网【​网址​🎉3977·EE​🎉】
美洲杯赔率投注网【​网址​🎉3977·EE​🎉】
 
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
 
Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !
 
Migration From CH 1.0 to CH 2.0 and Mule 4.6 & Java 17 Upgrade.pptx
Migration From CH 1.0 to CH 2.0 and  Mule 4.6 & Java 17 Upgrade.pptxMigration From CH 1.0 to CH 2.0 and  Mule 4.6 & Java 17 Upgrade.pptx
Migration From CH 1.0 to CH 2.0 and Mule 4.6 & Java 17 Upgrade.pptx
 
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
 
Malibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed RoundMalibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed Round
 
42 Ways to Generate Real Estate Leads - Sellxpert
42 Ways to Generate Real Estate Leads - Sellxpert42 Ways to Generate Real Estate Leads - Sellxpert
42 Ways to Generate Real Estate Leads - Sellxpert
 
DevOps Consulting Company | Hire DevOps Services
DevOps Consulting Company | Hire DevOps ServicesDevOps Consulting Company | Hire DevOps Services
DevOps Consulting Company | Hire DevOps Services
 
TMU毕业证书精仿办理
TMU毕业证书精仿办理TMU毕业证书精仿办理
TMU毕业证书精仿办理
 
Boost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management AppsBoost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management Apps
 
Superpower Your Apache Kafka Applications Development with Complementary Open...
Superpower Your Apache Kafka Applications Development with Complementary Open...Superpower Your Apache Kafka Applications Development with Complementary Open...
Superpower Your Apache Kafka Applications Development with Complementary Open...
 
Kubernetes at Scale: Going Multi-Cluster with Istio
Kubernetes at Scale:  Going Multi-Cluster  with IstioKubernetes at Scale:  Going Multi-Cluster  with Istio
Kubernetes at Scale: Going Multi-Cluster with Istio
 
What’s New in Odoo 17 – A Complete Roadmap
What’s New in Odoo 17 – A Complete RoadmapWhat’s New in Odoo 17 – A Complete Roadmap
What’s New in Odoo 17 – A Complete Roadmap
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
 
Orca: Nocode Graphical Editor for Container Orchestration
Orca: Nocode Graphical Editor for Container OrchestrationOrca: Nocode Graphical Editor for Container Orchestration
Orca: Nocode Graphical Editor for Container Orchestration
 
How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?
 
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...
 

Outsmarting Merge Edge Cases in Component Based Design

  • 1. Outsmarting Merge Edge Cases in Component Based Development Mike Hobbs Software Engineer
  • 2. 2 Overview  Background  Edge Cases, Pitfalls, and Solutions  Conclusion / Q&A
  • 4. 4 Background – MathWorks  We are a 3500+ person company dedicated to accelerating the pace of engineering and science  We have ~90 products based upon our core platforms • MATLAB – The Language of Technical Computing • Simulink – Simulation and Model-Based Design
  • 5. 5 Background - Definitions  Product • MATLAB • Parallel Computing Toolbox • Signal Processing Toolbox  Component • Set of strongly-related files
  • 6. 6 Background - Componentization  ~90 products • 5,000+ components, acyclical dependencies • 100,000s of tests and test points • ~36 hours to build and test from the ground up • Managing an over 1 million file code base  Benefits of componentization • Develop in isolation • Identify problems ahead of time • Run only a subset of building and testing
  • 7. 7 Background – Solution Chosen  Single stream per product, mostly • //mw/Bparallel • CTB (“Components to Build”) list, can change • Virtual stream enforcing a view  How to manage getting changes from one stream to another? • Tools (What I work on, automatically merging between streams)  More background: “Moving 1000 Users and 100 Branches Into Streams” – John LoVerso, MERGE 2014
  • 8. 8 Background - Architectural Issues  Renames with regards to crossing the stream view boundary  Submitting both a delete and an add onto the same filename  Filename-based versus file object-based source control system
  • 9. 9 Background – Filename / File Object  Filename • //mw/productA/file1 • //mw/productA/file2
  • 10. 10 Background – Filename / File Object  Filename • //mw/productA/file1 • //mw/productA/file2  File Object • p4 add file1 • p4 submit
  • 12. 12 Edge Cases – Complex Merge  What is it? • Multiple changes to merge to a destination • Cannot be represented in one single change  Classic example  Easy solution, no? • “Just merge the left half first.”  Can’t ask the developer to manually apply the solution to each issue we find
  • 13. 13 Edge Cases – Complex Merge  How do you identify one? • First pitfall: Problem definition  Incorrect: Counting endpoints • Correct in many cases (95% or so) • False positives and false negatives
  • 14. 14 Edge Cases – Complex Merge  How do you identify one? • First pitfall: Problem definition  Incorrect: Set of changes that cannot be represented in just one change • How do you know you are correct?
  • 15. 15 Edge Cases – Complex Merge  How do you identify one? • First pitfall: Problem definition  Correct: Identify the actual, big-ticket item • For us, this was the fact that people were renaming files often • Much easier to identify “filenames which need both a delete, and then an add applied to them” (i.e. complex merge on filename A)
  • 16. 16 Edge Cases – Complex Merge  How do you resolve one? • Second pitfall: Merging at an earlier change • Third pitfall: Asking the user to do it  Incorrect: Complex merge identified at c123456, so run the command at c123455 • Or at c123000, and then at c123100, and then at c123150, and then… • Manually resolve!
  • 17. 17 Edge Cases – Complex Merge  How do you resolve one? • Second pitfall: Merging at an earlier change • Third pitfall: Asking the user to do it  Correct: Automatically submit
  • 18. 18 Edge Cases – Deadwood  What is it? • Stream has fileA in view • Stream CTB changes, fileA no longer in view • fileA continues to exist, no changes are received Files in view “Dead wood” Files out of view
  • 19. 19 Edge Cases – Deadwood  Why is it bad? Files in view “Dead wood” Files out of view
  • 20. 20 Edge Cases – Deadwood  First pitfall: Leave it alone Files in view “Dead wood” Files out of view
  • 21. 21 Edge Cases – Deadwood  Second pitfall: Merge everything from the beginning of time Files in view “Dead wood” Files out of view
  • 22. 22 Edge Cases – Deadwood  Implementation we settled on: Iteratively merge everything in a smaller chunk of changes • Has downsides, manual resolves scheduled when they’re not needed Files in view “Dead wood” Files out of view
  • 23. 23 Edge Cases – Deadwood  Implementation we want to eventually get to: Sparse Branches (John LoVerso’s MERGE 2016 presentation) Files in view “Dead wood” Files out of view
  • 24. 24 Edge Cases – Renames Across View Files in view “Dead wood” Files out of view  What is it? • FileA -> FileB -> FileC on the source • FileB is not in view
  • 25. 25 Edge Cases – Rename Across View What should happen: What actually happens:
  • 26. 26 Edge Cases – Rename Across View What should happen: What actually happens:
  • 27. 27 Edge Cases – Rename Across View What should happen: What actually happens:
  • 28. 28 Edge Cases – Rename Across View What should happen: What actually happens:
  • 29. 29 Edge Cases – Rename Across View What should happen: What actually happens:
  • 30. 30 Edge Cases – Renames Across View  Pitfalls: • Only include the first and last names in view • Only consider one rename, not multiple renames • Add too many things to the view of a virtual stream
  • 31. 31 Edge Cases – Renames Across View  Solution: • Merge everything in a given range, selectively revert edits and branches • Same solution we use for keeping deadwood relatively managed
  • 32. 32 Edge Cases – Shadowed Delete  What is it? • Delete that does not show up when you merge • Not the head revision • Integration engine thinks it’s done at the move/add
  • 33. 33 Edge Cases – Shadowed Delete What should happen: What actually happens:
  • 34. 34 Edge Cases – Shadowed Delete What should happen: What actually happens:
  • 35. 35 Edge Cases – Shadowed Delete What should happen: What actually happens:
  • 36. 36 Edge Cases – Shadowed Delete What should happen: What actually happens:
  • 37. 37 Edge Cases – Shadowed Delete  How to identify it? • Look for deletes not at the head revision in the range you are merging  How to resolve it? • Merge at a specific revision for the problem file
  • 38. 38 Edge Cases – Shadowed Delete  How to identify it? • Look for deletes not at the head revision in the range you are merging  How to resolve it? • Merge at a specific revision for the problem file  Pitfalls? • Merging multiple times without resolving
  • 40. 40 Conclusion – Lessons Learned  Things to do: • Look at the big picture, solve a problem instead of its symptoms • Ask users to follow a simple, managed workflow • Test everything across releases and decide to upgrade or not  Things not to do: • Assume you’ve found all cases of a problem • Assume Perforce behavior will stay the same
  • 41. 41 Conclusion – What We’d Like  Source control on an object-by-object basis • Reconcile would work in most / all cases • Renames, view, and componentization would be easier to handle and define by file object content rather than specific filenames  Truly sparse streams • Prevent issues from ever happening, if the files never actually exist on a stream
  • 42. Questions? Mike Hobbs Mike dot Hobbs at mathworks dot com

Editor's Notes

  1. I’m Mike Hobbs, a software engineer in the tools group in MathWorks.
  2. I’d like to give you a background of MW as a company and why we decided to componentize our source code. Then, I’ll be talking about merge edge cases we’ve encountered componentizing our source code, their solutions in our world, and pitfalls along the way to finding these solutions. Finally, I’ll be talking about what work we have remaining to do, and algorithm changes we would like Perforce to implement.
  3. Reiterate product count, mention component count/complexity and how long it takes to build and test. No one likes waiting 2 days, so instead, you work only on code your team actively develops. This also allows us to catch componentization issues before they happen, such as trying to submit code changes to a component your team does not develop in.
  4. The solution we’ve chosen is one where every product gets its own stream in our depot (example: //mw/Bparallel), and defines the components that developers of that product should be able to modify. We additionally have a virtual stream that we use to enforce the view in which developers are able to make edits, and this virtual stream is updated every time the CTB list changes. With more than 100 products actively being developed for each bi-yearly release of MATLAB, there’s an elephant in the room: How do we get changes from one product to another? How do we get changes from one product to a release branch? How do we get changes from point A to point B? We have tools in place to allow users to merge changes from one stream to another, and that’s what I work on. John LoVerso, one of my coworkers, has a nice presentation he gave at the last conference if you are interested in more details of our chosen solution of organizing our products’ sources.
  5. So, what exactly is a complex merge? We define that as multiple changes that need to be merged from a source stream to a destination stream, but which cannot be represented in one single change for whatever reason. Describe the classic resurrection-based conflict (rename, re-add). The solution is easy too, right? Just merge the left-hand side of the complex merge first, and boom, you’re done, complex merge defused. Imagine being the standard developer who does not care about the source control system as long as they can do their actual job: “So now, I run p4 merge of… oldname revision 2? No, it didn’t merge, okay, so I find the final name of that file-object, and put that in the merge command? Still no… oh right, those extra flags I need to add, lowercase or uppercase S? What’s a stream again, is it just Bparallel or //mw/Bparallel?” Chaos: Developers with just enough knowledge to be dangerous without knowing it. Multiple other examples of users knowing just enough of Perforce to be damaging: “Well, I know how to add and delete, so there’s that folder rename my manager asked me to do!” Obliterate time. “Well, I can just say p4 reconcile after moving a file.” Now you get the case above. “Well, why should I wait for the proper flow of merging code? I can just merge from there to here!” And now you’ve lost work on your stream months later when you already have a credit for an integration record you were not expecting.
  6. First talk a bit about the differences between a source control system that’s filename based and one that’s object based. Example to the right, file object 1 lives across 3 different names at 3 different times, and file object 2 lives in the same name as file object 1 did, just at a different time. Filename benefits: easy to implement File object benefits: captures user intent (same logical file, or a different purpose for the file?)
  7. First talk a bit about the differences between a source control system that’s filename based and one that’s object based. Example to the right, file object 1 lives across 3 different names at 3 different times, and file object 2 lives in the same name as file object 1 did, just at a different time. Filename benefits: easy to implement File object benefits: captures user intent (same logical file, or a different purpose for the file?)
  8. So now let’s talk about a bunch of the edge cases (and not-so-edge cases) we’ve run into. (Expected 15 minutes on complex merges, 10 minutes on renames across view, 10 on )
  9. So, what exactly is a complex merge? We define that as multiple changes that need to be merged from a source stream to a destination stream, but which cannot be represented in one single change for whatever reason. Describe the classic resurrection-based conflict (rename, re-add). The solution is easy too, right? Just merge the left-hand side of the complex merge first, and boom, you’re done, complex merge defused. Imagine being the standard developer who does not care about the source control system as long as they can do their actual job: “So now, I run p4 merge of… oldname revision 2? No, it didn’t merge, okay, so I find the final name of that file-object, and put that in the merge command? Still no… oh right, those extra flags I need to add, lowercase or uppercase S? What’s a stream again, is it just Bparallel or //mw/Bparallel?” Chaos: Developers with just enough knowledge to be dangerous without knowing it. Multiple other examples of users knowing just enough of Perforce to be damaging: “Well, I know how to add and delete, so there’s that folder rename my manager asked me to do!” Obliterate time. “Well, I can just say p4 reconcile after moving a file.” Now you get the case above. “Well, why should I wait for the proper flow of merging code? I can just merge from there to here!” And now you’ve lost work on your stream months later when you already have a credit for an integration record you were not expecting.
  10. So we tried to at least identify them for the user and tell them “Run this command at this specific change level, and if you do, you’ve defused a certain amount of complex merges and can progress”. The first pitfall we ran into while trying to handle this edge case, complex merges, was in how we defined our problem. Our first definition of the problem was file was to look at the endpoints and see if one filename goes in, and two come out, or vice versa. It was good for most cases, but there were still too many false negatives, like complex merges involving multiple renames, to keep our comfort level low.
  11. Okay, so you are missing some cases. What about trying to figure out at a high-level, all types of “multiple changes that can’t be represented as one single change” issues? There is no way to guarantee correctness without full access to the Perforce source code. This idea was thankfully one we didn’t implement along the way to a complete solution for simply identifying (let alone resolving) complex merges without developer intervention.
  12. So we sat down, thought about it some more, and realized that the only cases that affect us that can’t be represented in one change happen on a filename by filename basis, and that is the fact that we sometimes want a delete (or move/delete) to be applied, and then an add (or move/add). It turns out, it’s much easier to figure out the answer to that question. Does the file exist on the destination? Does the file continue to exist on the source? Is there a delete of any kind that needs to be merged, followed by an add of any kind? If so, we’ve found a filename with a set of changes on it that simply can’t be represented in one change. One false positive of sorts, (delete, add). Talk about that for a bit, and why we’re okay with it.
  13. Our first implementation involved asking users to re-run their command at an earlier change level to defuse a complex merge. That’s a great first attempt at defusing a complex merge, but there were two massive pains that came from it: At times, there would be cascading complex merges, where the first would need to be defused before we could even think about handling the next. Too often, some file unrelated to the files that have a complex merge, needed extremely painful manual resolution. If we had multiple levels of complex merges like in the picture, the developer would need to manually resolve the same file, many, many times, wasting many units of time, effort, and sanity. So, now that we have a good algorithm in place for identifying the problematic files, as we can handle this as part of the automatic process used to merge code between different streams. Once the files are identified, we follow their rename chain from the delete-side of the complex merge until we find the final resting place, and merge, resolve and automatically submit, rather than telling the user that they have to do yet another intermediate error-prone step. Complex merges are the biggest and hardest problem we had to solve.
  14. Our first implementation involved asking users to re-run their command at an earlier change level to defuse a complex merge. That’s a great first attempt at defusing a complex merge, but there were two massive pains that came from it: At times, there would be cascading complex merges, where the first would need to be defused before we could even think about handling the next. Too often, some file unrelated to the files that have a complex merge, needed extremely painful manual resolution. If we had multiple levels of complex merges like in the picture, the developer would need to manually resolve the same file, many, many times, wasting many units of time, effort, and sanity. So, now that we have a good algorithm in place for identifying the problematic files, as we can handle this as part of the automatic process used to merge code between different streams. Once the files are identified, we follow their rename chain from the delete-side of the complex merge until we find the final resting place, and merge, resolve and automatically submit, rather than telling the user that they have to do yet another intermediate error-prone step. Complex merges are the biggest and hardest problem we had to solve.
  15. 1-minute description of what deadwood is: Files that were branched into existence when they were considered to be in-view and code changes were merged into the stream, but are now not on the view and no longer get updates.
  16. Bad because it violates our component-based design. If a file is not owned by any component, then why should it exist on your branch to begin with? Why it might exist: Previously edited, previously in view. Why we can’t get rid of it: Automatic obliterates? Nope.
  17. Bad because it violates our component-based design. If a file is not owned by any component, then why should it exist on your branch to begin with? Our initial reaction and handling of deadwood is a pitfall: Leave it alone until it’s no longer deadwood, if ever. Only merge all files Mention: Extra unnecessary complex merges User confusion as why stream A has the new name but stream B does not User error (manually deleting old renamed file)
  18. Our second attempt: Merge everything, revert branches or edits that land outside of the virtual stream’s view but keeping renames and deletes. Question: Have you ever merged 2 million filenames and all of their revisions, 1 million of which continue to be alive, from one stream to another, where the destination has most of the filenames, and many of them are completely out of date? One hour. Resolving? Two hours. Unacceptable loss of performace was the price to pay for this algorithm’s correctness.
  19. Our final attempt currently deployed to all developers: Merge everything since the last change you merged from, revert branches or edits that land outside of the virtual stream’s view but keeping renames and deletes. Keeps stream clean of unnecessary deadwood. This worked well, but sometimes manual resolves were scheduled when we didn’t actually want or need them. So we then had to identify most of the files that we could safely do a resolve –at for, and do that instead.
  20. What we would want to do is to use the sparse branching technology John LoVerso has done here at MathWorks. He will be giving / has given an excellent presentation on that at this conference, so I won’t go much deeper into it than to generalize it as “If a stream has never edited a filename, there should be no integration records on that stream for that filename.”
  21. So now, let’s talk about a similar problem, handling renames that go in and out of the virtual stream’s view. Both old and new filenames have to be in view for the merge command to succeed.
  22. Branched instead of renamed!
  23. First stab: Excluding intermediate names sometimes caused branches of the last name instead of move/delete, move/add pairs. Second stab: The view was too big and had too many lines with wildcards (…), could not save the virtual stream specification, large failure
  24. It turns out, our solution to keeping deadwood relatively clean in terms of old and new filenames also works exceedingly well here. Merge everything using a wide-open, unrestricted view, and revert anything else.
  25. Onto the final edge case that caused build failures more often than we’d like: Shadowed deletes. What is a SD? See image to the right, what do you think would happen when you merge everything from the source above the line to the destination? Shadowed delete! Middle filename continues to exist, interchanges does not list the delete as needing to come down. Talk a bit about the issues this causes. Talk a bit about how it relates to complex merges, yet different enough to require another attempt.
  26. Delete of B doesn’t appear!
  27. Thankfully, it’s very simple to both identify and handle this. Identify: Just find deletes that haven’t been merged yet (integ records) and are not the head revision in the range you are merging. Resolve: Merge the file at that specific revision.
  28. No pitfalls along the way specific to this problem, but we did identify that running the same merge command more than once without resolving can cause pain and incorrect changes being applied to the wrong files (i.e. rename, re-add, re-delete).
  29. I’d like to take a few minutes to conclude this presentation with what we’ve learned, and what we would like to see from Perforce.
  30. Lessons learned, and the benefits gained from them.
  31. What we would like to see to simplify or handle all of these edge cases, and how they would be beneficial overall.