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

Korhan bircan

Feb 15, 2017

Download

Engineering

Korhan Bircan
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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