Back to 2015-proposals
Title: Archipelagos in Git
Proposer: Matthew Dodkins
Type: Presentation
Duration: 15 mins
Description:
Island: Any piece of subcontinental land that is surrounded by water.
Archipelago: Island chain, is a chain, cluster or collection of islands.
Assumptions:
Reviewing code is a worthwhile activity
No one wants to review and/or merge code as their fulltime job
No one person should bear all that responsibility anyway
Existing, nonconceptual approaches to the problem of managing the movement of code are quite weak
Communication is always required and goes a long way to solving many of our problems, but we can't all communicate with everyone all the time on a medium large team
Metaphors help understand intent
Sometimes code will need to be shared between teams; it isn't always possible to divide up work by features (although appropriate interfaces help with this)
Basics:
An 'Island' is considered to be synonymous with a fork/branch or fork/set of branches
An archipelago is identifiable as a number of islands which are “close” to one another
Created as a concept to help medium to large teams manage sharing of code between areas of related work and to ease merge pain
Merging is always difficult; it's a difficult job. Archipelagos don't solve merge problems, but they do simplify them and provide conceptual assistance
Islands in an archipelago are related to one another purely by virtue of their proximity to one an another. If a fork/branch is close to another, it makes sense to consider it part of the same archipelago
Pull requesting to the owner of the archipelago simplifies the merge you're dealing with and still allows everyone interested in that archipelago to be party to what's going into it
Pull requesting the entire archipelago to “wherever the release is going to be made from” helps collate like areas of work for reviewing purposes
Advanced
Archipelagos can be near or far away from each other sometimes they will want to merge between each other, but this is not particularly desirable unless you combine
How do we know when to create an archipelago?
Feature files / executable specification, where does it fit in?
Realisations from actual use with several teams totalling 20+ developers