Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Fear, Uncertainty, and Third-Party Libraries

Fear, Uncertainty, and Third-Party Libraries

Sometimes fear or a bad experience can hold us back from embracing third-party dependancies that would let us focus more on our customers' problems than on the technical challenges we need to solve along the way. It can be fun to re-invent the wheel, we are engineers after all, but do we have the time to spare in this market?

I take a very pragmatic look at the affects of embracing community libraries. There are lots of non-obvious tradeoffs we make when we choose to either embrace or re-invent, and I look at those tradeoffs as they relate to common reasons I hear from people about why they are afraid to embrace third-party libraries.

Curtis Herbert

May 14, 2015
Tweet

More Decks by Curtis Herbert

Other Decks in Technology

Transcript

  1. I do have what I think is a healthy dose

    of fear of all 3rd party apps. Heck fear of every extra line of code. That does not mean I would never use a 3rd party library. It just means the benefits as I see them would have to outweigh the fear.
  2. I do have what I think is a healthy dose

    of fear of all 3rd party apps. Heck fear of every extra line of code. That does not mean I would never use a 3rd party library. It just means the benefits as I see them would have to outweigh the fear.
  3. Ex: Masonry UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10); [superview

    addConstraints:@[ [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeTop multiplier:1.0 constant:padding.top], [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeLeft multiplier:1.0 constant:padding.left], [view1 mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(superview).with.insets(padding); }]; [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-padding.bottom], [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeRight multiplier:1 constant:-padding.right], ]];
  4. renderRow(rowData, sectionID, rowID) { return ( <TouchableHighlight underlayColor='#dddddd'> <View> <Text>{rowData.title}</Text>

    </View> </TouchableHighlight> ); } render() { return ( <ListView dataSource={this.state.dataSource} renderRow={this.renderRow.bind(this)}/> ); }
  5. Pin It # Require zipzap from commit pod 'zipzap', :git

    => 'https://github.com/pixelglow/zipzap.git', :commit => '9c0f5fe3a1' # Require zipzap version 7.0.x pod ‘zipzap', ‘~> 7.0'
  6. platform :ios, '8.0' target 'App' do link_with 'App', 'Debug Tools',

    'Tests' pod 'PebbleKit' pod 'zipzap' pod 'CHCSVParser' pod 'KissXML' pod 'Google-Maps-iOS-SDK' pod 'KZPropertyMapper' pod 'AWSiOSSDKv2/S3' pod 'GPSKit' pod 'libextobjc' pod 'OGCoreDataStack' pod 'FastImageCache' pod 'Masonry' pod 'MKUnits' pod 'VTAcknowledgementsViewController' pod 'MMWormhole' pod 'MHWDirectoryWatcher' pod 'Facebook-iOS-SDK' pod 'RBStoryboardLink', '0.1.0' pod 'Fabric' pod 'Fabric/Crashlytics' end target 'Widget' do link_with 'Widget', 'WatchKit Extension' pod 'MMWormhole' end
  7. Problems I didn’t have to solve • Zip file reading

    / writing • CSV file reading / writing • XML parsing • Image caching • JSON -> NSObject mapping • Mocking objects for unit testing • Using C(FNotificationCenter)