Transcript
Page 1: Simon Stewart, Facebook engineer - Building Facebook for Android

Simon [email protected]

github.com/shs96c@shs96c

Move Fast and Build Things

Page 2: Simon Stewart, Facebook engineer - Building Facebook for Android

The Challenge

>300 engineers

>150,000 files

>100,000 commits

Page 3: Simon Stewart, Facebook engineer - Building Facebook for Android

There is no Android team

Page 4: Simon Stewart, Facebook engineer - Building Facebook for Android

How do we “move fast”?

Page 5: Simon Stewart, Facebook engineer - Building Facebook for Android

Build fast

Page 6: Simon Stewart, Facebook engineer - Building Facebook for Android

The working copy

▪We use git for source control

▪Two branches we care about day-to-day:

▪ master

▪ stable

Page 7: Simon Stewart, Facebook engineer - Building Facebook for Android

How the code is organized

Text

http://www.flickr.com/photos/darwinbell/3030214710/

Page 8: Simon Stewart, Facebook engineer - Building Facebook for Android

Code review

Page 9: Simon Stewart, Facebook engineer - Building Facebook for Android

Image macros

QuickTime™ and aGIF decompressor

are needed to see this picture.

Page 10: Simon Stewart, Facebook engineer - Building Facebook for Android

Dependency injection

http://www.flickr.com/photos/31246066@N04/5253179784/

Page 11: Simon Stewart, Facebook engineer - Building Facebook for Android

We needed a better tool

▪Minimal overhead in creating a module

▪Keep boilerplate out of the codebase

▪ IDE friendly

▪Faster clean builds

▪Faster incremental builds

▪Support ad-hoc build steps

Page 12: Simon Stewart, Facebook engineer - Building Facebook for Android

Buck: an Android build system

▪build rule procedure for producing output files from input files

▪build file file (named BUCK) where build rules are declared

▪build target string identifier for a build rule

Page 13: Simon Stewart, Facebook engineer - Building Facebook for Android

Build Target

//java/com/facebook/share:ui

Root of the repository

Directory where the build file can be found

Name of the build rule

Page 14: Simon Stewart, Facebook engineer - Building Facebook for Android

Build Rule

android_library( name = 'ui', srcs = glob(['**/*.java']), deps = [ '//android_res/com/facebook/share:res', '//java/com/facebook/base:base', '//third-party/java/guava:guava', ], visibility = [ 'PUBLIC' ],)

Page 15: Simon Stewart, Facebook engineer - Building Facebook for Android

Dependency Graph

AR AR

AR

ALAL AL

AL AL

AL

AB

GR

AB

GR

Page 16: Simon Stewart, Facebook engineer - Building Facebook for Android

Dependency Graph

AR AR

AR

ALAL AL

AL AL

AL

AB

GR

AB

GR

Page 17: Simon Stewart, Facebook engineer - Building Facebook for Android

Buck is Open Source!

▪Available on GitHub: https://github.com/facebook/buck/

▪Documentation galore: http://facebook.github.com/buck/

▪Apache 2.0 License

▪Written in Java and a smattering of Python

▪Works on OS X and Linux

Page 18: Simon Stewart, Facebook engineer - Building Facebook for Android

Test fast

Page 19: Simon Stewart, Facebook engineer - Building Facebook for Android

Developers write tests

Page 20: Simon Stewart, Facebook engineer - Building Facebook for Android

Unit tests

http://www.flickr.com/photos/aracelota/4773084433/

Page 21: Simon Stewart, Facebook engineer - Building Facebook for Android

Larger tests

http://www.flickr.com/photos/amphalon/6510474165/

Page 22: Simon Stewart, Facebook engineer - Building Facebook for Android

Deploy fast

Page 23: Simon Stewart, Facebook engineer - Building Facebook for Android

Dogfood, Alpha and Beta

Page 24: Simon Stewart, Facebook engineer - Building Facebook for Android

Questions?


Top Related