korhan bircan

17
Implementing a Feedback Tool Using Off-the-Shelf Backend Services Korhan Bircan, CocoaConf 2016

Upload: korhan-bircan

Post on 15-Feb-2017

66 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Korhan bircan

Implementing a Feedback Tool Using Off-the-Shelf Backend ServicesKorhan Bircan, CocoaConf 2016

Page 2: Korhan bircan

Auto Loan Tracker- Tool helps customers visualize the status of their loan.- Did you know tips:

- Late payments mean more interest- When you make a payment matters

Page 3: Korhan bircan

Auto Loan Tracker

Page 4: Korhan bircan

Auto Loan Tracker

Page 5: Korhan bircan

Auto Loan Tracker- Shot in the dark

- Do customers read the tips?- Are they useful or confusing?

- How do you know your product actually helps people?- (Almost) No one fills out email surveys- Surveys are not real-time- Twitter really only covers edges of reactions

Page 6: Korhan bircan

Feedback Tool

Page 7: Korhan bircan

Behind the Scenes

Page 8: Korhan bircan

Parse

Page 9: Korhan bircan

CloudKit

Page 10: Korhan bircan

CloudKit- Easy setup - Web dashboard, analytics - Public and private databases - Users need to enter iCloud credentials for the app

to save data - Push notifications when a record changes

Page 11: Korhan bircan

Common Operations- Creating&Saving records:

let feedbackResponse = CKRecord(recordType: "FeedbackResponse") feedbackResponse.setValue(response, forKey: "question") publicDatabase.saveRecord(feedbackResponse) { record, error in // Handle error. }

- Querying&Updating records: let predicate = NSPredicate(format: "...") let query = CKQuery(recordType: "FeedbackResponse", predicate: predicate) publicDatabase.perform(query, inZoneWith: nil) { results, error in // Update and save record.. }

- Deleting records: // Query and find the record. publicDatabase.deleteRecordWithID(record.recordID, completionHandler: { recordID, error in // Handle error. })

Page 12: Korhan bircan

Firebase- Standard 3rd party setup - Web dashboard (displays JSON), analytics, crash

reporting, advertising - Authenticate users with OAuth Services, Facebook,

Google, Git and Twitter, email/password, or even your own custom service

- Out-of-the-box disk persistence: FIRDatabase.database().persistenceEnabled = true

Page 13: Korhan bircan

Firebase

Page 14: Korhan bircan

Common Operations- Creating&Saving records:

let reference = FIRDatabase.database().reference() reference.childByAppendingPath("(user.uid)/response").setValue(response)

- Querying&Updating records: reference.queryOrderedByChild("response").observeEventType(.Value, withBlock: { snapshot in // snapshot.children has the response objects. }

- Getting Change Notifications: reference.observe(.value, with: { snapshot in // Do something with the updated data (snapshot.value). })

- Deleting records: objectReference.remove()

Page 15: Korhan bircan

ComparisonParse CloudKit Firebase

Setup 🙂 😄 🙂

Dashboard 😄 🙂 😐

Storage size 😐 😄 😐

Security 🙂 😄 🙂

Ease of use 😄 🙂 😐

Data export 😄 😢 😄

Future proof 😢 😄 🤔

Real life testing 🙂 😄 🙂

Disk Persistence 🙁 🙁 😄

Cross-platform 😄 🙂 😄

Page 16: Korhan bircan

What we learned- The feature motivates people to pay on time. - Customers want to request new features. - Feedback went from 1% to 14%. - We now know what works and weave them into

future products - Choose right tool for the specific job. - Decouple modules.

Page 17: Korhan bircan

Thank you!

A better feedback experience = A better overall experience