is trunk-based development easy in game development?
TRANSCRIPT
Is Trunk-based Development Easy in Game Development?
Sven Erik KnopPerforce Software
Challenges in Games Development
• Why is Games Development so hard?– Besides the obvious I mean …
• Average AAA game:– 100 of thousands of files– 1 TB+ source code and assets at HEAD– 50GB + changes a day– 100+ Team size
Consequences
• Continuous integration– Builds take minutes (incremental) to hours (full)– Smoke tests?– Full tests?
• Who broke the build?• HEAD is not stable!
Coding practices compared
• Different ways to organise your sources• There is no single best way– Team size– Target platform: Mobile/Console/PC/4K/…– Rate of change– Iteration frequency
Single Code Line
Head
Stable Head still stable?
Development branches
Long-lived development branches can cause problems
Task/Feature branches
Keeping feature branches short-lived avoids severe merge conflicts
Vignette: mergeable objects
• 3-way merge for text documents
3-way merge for binary assets?
• Images?• 3D models?• Sound files?
• Locking!• Across branches?
Component-basedShared trunk
Separate trunk
Trunk-based Development
Trunk
Release
Extended testing for releaseRequires tooling!
Stable
Milestone branches
Stabilise in separate branchMerge fixes, ignore hacks
Summary
• Stability versus Agility• Trunk-based development can offer both– If supported with the right tools
• Careful with branching of binary assets– Consider componentisation instead
Perforce• Perforce helps delivery teams build complex products collaboratively,
securely and efficiently.• Commonly used for…
– Software– Games– Electronics– Animations– Chipsets – Medical Devices– Internet of Things
Who uses Perforce?
13,000 20,000 users
9,500 users500+ terabytes
5,000+ userscoders & designers
10,000,000 Perforce xact/day
Everything! 11,000+ users
Chips Games & Animation Cloud/SW Electronics Systems Automotive
Perforce Helix
Contributors
Consumers
Flexible Workflows Version control, code reviews, simple file sharing
Fast and ScalableFrom 10 to 10,000+ on a each trunk
Every FileEfficiently handles large, often binary, data
EverywhereSupports geographically distributed teams
Secure Granular permissions, theft risk monitoring
Open and ExtensibleAPIs and integration hooks for customization
StreamsParent-child relationship between streamsDevelopment and release stream typesVirtual streams for easy componentisation
Conclusion
• Trunk-based development is a good thing• Requires the right tools• Recommendation– Componentisation– Protected release streams– Keep everything in one repository