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

Result oriented communication with a server team

Result oriented communication with a server team

How to work with a server team
Pitfalls and decisions

Paul Taykalo

March 05, 2016
Tweet

More Decks by Paul Taykalo

Other Decks in Programming

Transcript

  1. Result oriented communication with a server team by Paul Taykalo,

    Stanfy for CocoaHeads Ukraine #8 Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 1
  2. What do we want from a server team? Paul Taykalo,

    Stanfy for CocoaHeads Ukraine #8 3
  3. Application types we have New application Web application + API

    Web application without API Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 5
  4. Our Goals Working application Predictability Working API Enough data Clear

    flow Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 8
  5. Server Team Types 4 Yourself 4 Local 4 Remote 4

    Remote in different timezone 4 Remote in different timezone via manager Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 12
  6. Lack of required communication Designer Server Side Web App Product

    Owner Client Developer Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 14
  7. Blaming 4 Blaming is not an solution 4 Blaming is

    the last resort 4 Blaming ruins your process 4 Be calm Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 16
  8. Blaming It's working on my side 4 Parameters 4 Headers,

    User-Agent, version, Content-Type, Accept-Encoding, Method 4 Server 4 User Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 17
  9. Blaming It's not working on my side 4 Parameters 4

    Headers, User-Agent, version, Content-Type, Accept-Encoding, Method 4 Server 4 User Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 18
  10. Blaming When to go to upper level :( Paul Taykalo,

    Stanfy for CocoaHeads Ukraine #8 21
  11. Blaming When to go to upper level :( 4 Facts

    4 Emails 4 Follow ups 4 Results 4 Suggestions Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 22
  12. Expectations vs Reality 4 People can make mistakes 4 People

    doesn't know about your previous experience 4 People doesn't know anything iOS at all 4 Be ready to fall back to the "basics" Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 24
  13. "Ready" Web application 4 We hardly can show HTML 4

    We hardly can open new window 4 We hardly can execute JS :) Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 28
  14. Discussing basics 4 Caching 4 Session restoration 4 FB Login,

    session restoration 4 OAuth, session restoration (token renewal) 4 Account linking with Facebook 4 APNS ^Often we'll see that Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 30
  15. Errors handling 4 Server side 4 Application side 4 Errors,

    based on HTTP Codes (401) 4 // I screwed up, you screwed up Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 31
  16. Errors handling 1xx Coming now 2xx Here you go 3xx

    Go away 4xx You screwed up 5xx I screwed up Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 32
  17. More pitfalls 4 Versioning 4 Migration from version one to

    another 4 Headers, User Agent, version, Content-Type, Accept- Encoding, Cache Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 33
  18. Communication process 4 Make a time, when you both are

    available 4 Don't waste it if you don't have anything to tell 4 Be prepared Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 35
  19. Communication process 4 Write down decisions 4 Make follow ups

    4 Decrease feedback times 4 Be prepared! Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 37
  20. Be prepared 4 Check designs 4 Check API you need

    4 Be ready to show screens 4 15 mins preparation Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 38
  21. Decrease Feedback Loop Network 4 Log all the data! Paul

    Taykalo, Stanfy for CocoaHeads Ukraine #8 40
  22. Decrease Feedback Loop APNS 4 Log Token Retrieval process 4

    Log All Push Notifications Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 41
  23. Logging 4 Client side 4 Server side 4 Remote Paul

    Taykalo, Stanfy for CocoaHeads Ukraine #8 43
  24. Logging 4 External 4 Easily accessible by all teams 4

    Live 4 Searchable 4 Request/Response, by session [Session, UserID] 4 All hidden parts Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 44
  25. Server API 4 Check it ASAP 4 Notify immediately 4

    Have a list of "working" API 4 Staging is a Prod, where we can play 4 Don't trust words :( Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 46
  26. Client tests 4 API checks 4 Structure checks 4 Complex

    tests Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 49
  27. How tests should be set up 4 Both teams should

    have access to them 4 Both teams should be able to read them 4 Don't shame to send the test results ASAP 4 Cover functionality as soon as Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 52
  28. One Source of truth 4 Human 4 Server code 4

    Server code + Client code 4 Server code + Client code + Comments 4 Specification (.docx) 4 Computer-readable specification Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 54
  29. Computer-Readable Specification 4 Also needed to be easily read by

    human 4 Can be easily parsed 4 Can describe the most of the API features Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 56
  30. Client SDK 4 Networking (URL, Params, Auth, Headers) 4 Parsing,

    mapping, error handling Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 58
  31. Computer-Readable Specification 4 Swagger 4 Apiary 4 API Discovery Service

    (By Google) 4 Helium 4 Your own Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 59
  32. Swagger 4 JSON 4 YAML 4 Client Generation Paul Taykalo,

    Stanfy for CocoaHeads Ukraine #8 61
  33. Swagger 4 JSON 4 YAML 4 Client Generation Paul Taykalo,

    Stanfy for CocoaHeads Ukraine #8 62
  34. API Discovery Service by Google 4 JSON 4 JSON Scheme

    4 By Google 4 Client Generation Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 67
  35. Helium 4 Groovy 4 Client Generation (JVM supported) 4 Integration

    specs Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 68
  36. Helium note "Twitter REST API example" type "UserProfile" message {

    id long required screen_name 'string' required profile_image_url_https 'string' optional } Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 69
  37. Helium service { name 'Twitter API' description 'Piece of Twitter

    API' version 1.1 location "https://api.twitter.com/${version}" get "/users/show.json" spec { name 'Get user profile' description ''' Returns a variety of information about the user specified by the required user_id or screen_name parameter. The author's most recent Tweet will be returned inline when possible. ''' parameters { user_id long optional screen_name 'string' optional include_entities boolean optional } response "UserProfile" } } Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 70
  38. Result oriented communication with a server team by Paul Taykalo,

    Stanfy for CocoaHeads Ukraine #8 Paul Taykalo, Stanfy for CocoaHeads Ukraine #8 73