Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Korhan bircan

147 views

Published on

Learnings implementing a feedback tool using off-the-self mobile backend services.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Korhan bircan

  1. 1. Implementing a Feedback Tool Using Off-the-Shelf Backend Services Korhan Bircan, CocoaConf 2016
  2. 2. 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
  3. 3. Auto Loan Tracker
  4. 4. Auto Loan Tracker
  5. 5. 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
  6. 6. Feedback Tool
  7. 7. Behind the Scenes
  8. 8. Parse
  9. 9. CloudKit
  10. 10. 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
  11. 11. 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. })
  12. 12. 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
  13. 13. Firebase
  14. 14. 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()
  15. 15. Comparison Parse CloudKit Firebase Setup πŸ™‚ πŸ˜„ πŸ™‚ Dashboard πŸ˜„ πŸ™‚ 😐 Storage size 😐 πŸ˜„ 😐 Security πŸ™‚ πŸ˜„ πŸ™‚ Ease of use πŸ˜„ πŸ™‚ 😐 Data export πŸ˜„ 😒 πŸ˜„ Future proof 😒 πŸ˜„ πŸ€” Real life testing πŸ™‚ πŸ˜„ πŸ™‚ Disk Persistence πŸ™ πŸ™ πŸ˜„ Cross-platform πŸ˜„ πŸ™‚ πŸ˜„
  16. 16. 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.
  17. 17. Thank you! A better feedback experience = A better overall experience

Γ—