How to quickly eat your own dog food in iOS

How to quickly eat your own dog food in iOS



March 12, 2014


  1. 2.

    When a company uses it’s own product to determine quality

    and capabilities of the product What is dog fooding?
  2. 3.

    Why is it important? • Testing when developing isn’t good

    enough • Faster Feedback • Find "Jankyness" faster • Iterate quickly on things that matter • Validate assumptions and hypotheses
  3. 5.

    Before Gmail was released to the public… • Sergei and

    Larry used it as their personal email clients in early stages • 3000 Google employees • Obsessed about speed
  4. 6.

    Facebook Home • They should have spent more time “Droidfooding”!

    • Launched April 12, 2013 • In June, Facebook announced a beta testing program for Android users • User complaints about battery life and user experience
  5. 7.

    Dog Fooding Test-driven development Timeboxing Acceptance testing Spike Sprint Planning

    Planning Poker Story Point Estimation User Stories Sprint Pair Programming Behavior-driven development Velocity Tracking Scrum
  6. 10.

    Cocoapods What is Cocoapods?! • library dependency management system for

    Xcode projects • Similar to Ruby Gems or Java Maven
  7. 11.

    Cocoapods Why Cocoapods?! • Alternatives to this aren’t really that

    great right now • Many components and libraries to choose from • Allows reuse of internal code libraries • Reduces error when dealing with framework search paths
  8. 12.

    Cocoapods Things to consider! • Don’t be afraid to have

    your own internal pods • Pods are 3rd party libraries and are not “silver bullets” • Revisit before shipping to production and use a checklist for accepting a 3rd party library • For more information visit
  9. 14.

    Benefits • Alpha/Beta or Beta/ Production environments • Debugging Services

 (SSL vs. Non SSL) • Separate push notifications • Feature toggling • Separate analytics Two-Binary System
  10. 20.

    Remember to treat it as two separate apps! We do

    compile and ship two separate binaries.
  11. 38.

    • Can get out of hand easily • If you’re

    using pre-processor macros you lose come compile time checking per target, test on separate targets • You can just define a constant set by the pre-processor macro • Keep it simple! Feature Toggling (Views) Two-Binary System
  12. 40.

    Why is it important? • Helps eliminate human error •

    Builds are asynchronous so you can spend your time being productive while you wait • Saves time doing repetitive tasks • Makes the two binary system and feature toggling easier to manage • Teams can get passive notifications versus PMs asking for the status Automated Builds
  13. 41.

    Key points • Have the team decide on a build

    schedule - i.e. Once a day, twice a day etc. • Try to be strict about your build regimen • Don't get overwhelmed by automation scripts, think of builds as a living document that will always change as your app requirements and team requirements change. Automated Builds
  14. 42.

    Choose what works for you • Jenkins - •

    Bamboo - • Team City - • Xcode bots - ships with Xcode 5 Automated Builds
  15. 43.

    Once you decide... • Almost every CI will use a

    plugin for building iOS • If you are using Cocoapods, remember to use workspaces not projects • Automate uploading to a distribution system Automated Builds
  16. 44.

    • For unit tests use xctool xctool • UIAutomation

    tests use Bwoken - bendyworks/bwoken • Cross Platform automation Appium - When you have tests… Automated Builds
  17. 48.

    • Gets your app into the wild • Testers can

    get daily builds • Don't need the testers physical device to install the app • Some allow feedback modules in-app • Some have crash reporting services • Isolate bugs on a per binary basis • Keeps track of dSYM and IPA files instead of checking it into source control App Distribution Why is it important?!
  18. 49.

    • Hockey App - • Test Flight -

    App Distribution Choose what works for you!
  19. 52.

    Feedback & Logging Crash Reporting! • PLCrashReporter • Usually bundled

    with SDKs for analytics and ad-hoc distribution systems • Keep your dSYM files
  20. 53.

    Feedback & Logging Crash Reporting! • Hockeyapp • Test

    Flight • Crashlytics
  21. 54.

    Feedback & Logging Logging! • Not all errors will crash

    the app • Use analytics systems to log errors!
 (Google Analytics, Mixpanel) • Track the “error” as an “event”