SlideShare a Scribd company logo
1 of 82
Download to read offline
Donny Wals // July 2020
Efficiently developing native
frameworks for multiple
platforms
👋
👋
• Blog: https://www.donnywals.com
• Book: https://practicalcombine.com
• Twitter: @donnywals
Donny Wals
iOS Engineer
Our SDK powers several apps and
provides networking capabilities
amongst other features.
SDKSDKSDKSDK
SDK
iPhone
Android
Web
Gaming
consoles
SDKSDKSDK
SDK
iPhone
Android
Web
Gaming
consoles
SDKSDK
SDK
SDK
iPhone
Android
Web
Gaming
consoles
SDKSDK
SDK
⚠
Engineers must be able to
communicate efficiently and
effectively
With the tips in this talk you should be able to
With the tips in this talk you should be able to
• Improve your own processes
With the tips in this talk you should be able to
• Improve your own processes
• Enhance your code quality
Feature specs
A good spec:
A good spec:
• Captures what a feature is and how it should work (the "what" and "how")
A good spec:
• Captures what a feature is and how it should work (the "what" and "how")
• Describes a public interface
A good spec:
• Captures what a feature is and how it should work (the "what" and "how")
• Describes a public interface
• Provides context (the "why")
A good spec:
• Captures what a feature is and how it should work (the "what" and "how")
• Describes a public interface
• Provides context (the "why")
• Defines UML for the public API
An example...
# User login flow
Users should be able to login through the `UserApi` defined
in the framework. An instance of the `UserApi` is obtained
through `MyFramework.userApi`. Framework users can call
`UserApi.login(username, password)` to trigger a login. The
`login` method returns a `Promise` that's fulfilled when the
`login` call completes sucessfully or with a failure. In
case of `success` the caller receives an `AccessToken`. In
case of `failure` the caller receives a `LoginError`.
In case the user provides invalid credentials, the server
returns a `LoginError.invalidCredentials` error. This is
also true if `login` is called with empty credentials.
...
# User login flow
Users should be able to login through the `UserApi` defined
in the framework. An instance of the `UserApi` is obtained
through `MyFramework.userApi`. Framework users can call
`UserApi.login(username, password)` to trigger a login. The
`login` method returns a `Promise` that's fulfilled when the
`login` call completes sucessfully or with a failure. In
case of `success` the caller receives an `AccessToken`. In
case of `failure` the caller receives a `LoginError`.
In case the user provides invalid credentials, the server
returns a `LoginError.invalidCredentials` error. This is
also true if `login` is called with empty credentials.
...
The Happy Path
# User login flow
Users should be able to login through the `UserApi` defined
in the framework. An instance of the `UserApi` is obtained
through `MyFramework.userApi`. Framework users can call
`UserApi.login(username, password)` to trigger a login. The
`login` method returns a `Promise` that's fulfilled when the
`login` call completes sucessfully or with a failure. In
case of `success` the caller receives an `AccessToken`. In
case of `failure` the caller receives a `LoginError`.
In case the user provides invalid credentials, the server
returns a `LoginError.invalidCredentials` error. This is
also true if `login` is called with empty credentials.
...
The Happy Path
Failures and
exceptions
Keep descriptions brief
```uml
interface UserApi {
'@error LoginError.invalidCredentials'
'@error_description thrown if the user provides invalid
credentials'
+login(username: String, password: String) ->
Promise<AccessToken>
}
interface AccessToken {
+token: String
+expiresAt: Date
+refreshToken: String
+refreshExpiresAt: Date
}
```
Make sure to add sources when
needed
Sometimes it's not obvious
what's missing in a spec
Sometimes it's not obvious
what's missing in a spec
Especially when edge cases are missing
I ♥ writing tests
Introducing:
Introducing: Gherkin
Gherkin
The Building Blocks
Gherkin
The Building Blocks
• Given
Gherkin
The Building Blocks
• Given
• When
Gherkin
The Building Blocks
• Given
• When
• Then
Given: describes the
environment (preconditions)
When: describes the action you
want to test
Then: describes the environment
after the action is performed
Gherkin tests help you to:
Gherkin tests help you to:
• Understand a feature
Gherkin tests help you to:
• Understand a feature
• Know when a feature is fully implemented
Gherkin tests help you to:
• Understand a feature
• Know when a feature is fully implemented
• Discover edge cases
An example...
Given a valid username and password
Given a valid username and password
When using these credentials to call the login service
Given a valid username and password
When using these credentials to call the login service
Then a valid token should be stored
Given a valid username and password
When using these credentials to call the login service
Then a valid token should be stored
Then the valid token should be surfaced to the caller of the login method.
Given a valid username and an invalid password
Given a valid username and an invalid password
When using these credentials to call the login service
Given a valid username and an invalid password
When using these credentials to call the login service
Then the credentials error returned by the service should be surfaced to the
caller of the login method
Given a valid username and an empty password
Given a valid username and an empty password
When using these credentials to call the login service
Given a valid username and an empty password
When using these credentials to call the login service
Then the credentials error returned by the service should be surfaced to the
caller of the login method
Given a empty username and an empty password
Given a empty username and an empty password
When using these credentials to call the login service
Then the credentials error returned by the service should be surfaced to the
caller of the login method
Given a empty username and an non-empty password
Given a empty username and an non-empty password
When using these credentials to call the login service
Then the credentials error returned by the service should be surfaced to the
caller of the login method
A completed spec is submitted
for review
Focus during the review phase
Focus during the review phase
• Ensure that the spec is clear
Focus during the review phase
• Ensure that the spec is clear
• Test links to the documentation and compare them to the written spec
Focus during the review phase
• Ensure that the spec is clear
• Test links to the documentation and compare them to the written spec
• Review the UML for correctness
Focus during the review phase
• Ensure that the spec is clear
• Test links to the documentation and compare them to the written spec
• Review the UML for correctness
• Check that the feature is possible within your platform
Focus during the review phase
• Ensure that the spec is clear
• Test links to the documentation and compare them to the written spec
• Review the UML for correctness
• Check that the feature is possible within your platform
• Validate the tests and make sure they're complete
Focus during the review phase
• Ensure that the spec is clear
• Test links to the documentation and compare them to the written spec
• Review the UML for correctness
• Check that the feature is possible within your platform
• Validate the tests and make sure they're complete
• Make sure that at least one member from every platform reviews and
approves
During the implementation phase
During the implementation phase
• Every team will work on the features at roughly a different time
During the implementation phase
• Every team will work on the features at roughly a different time
• Versioning does not have to be identical within teams
During the implementation phase
• Every team will work on the features at roughly a different time
• Versioning does not have to be identical within teams
• Make sure that every team can work at their own pace
During the implementation phase
• Every team will work on the features at roughly a different time
• Versioning does not have to be identical within teams
• Make sure that every team can work at their own pace
• Just make sure that big deadlines are delivered in time
Summary
Summary
• Make sure you write feature specs that cover public APIs.
Summary
• Make sure you write feature specs that cover public APIs.
• A feature spec should cover the what, how and why without dictating
implementation details that aren't relevant to all platforms.
Summary
• Make sure you write feature specs that cover public APIs.
• A feature spec should cover the what, how and why without dictating
implementation details that aren't relevant to all platforms.
• Add Gherkin tests as a means of testing. This allows you to capture a minimum set
of tests that can be used while implementing a feature and aids a TDD approach
towards development.
Summary
• Make sure you write feature specs that cover public APIs.
• A feature spec should cover the what, how and why without dictating
implementation details that aren't relevant to all platforms.
• Add Gherkin tests as a means of testing. This allows you to capture a minimum set
of tests that can be used while implementing a feature and aids a TDD approach
towards development.
• Make sure to cross your t-s and dot your i-s during the review phase. You want at
least one review from a team member of each platform.
Summary
• Make sure you write feature specs that cover public APIs.
• A feature spec should cover the what, how and why without dictating
implementation details that aren't relevant to all platforms.
• Add Gherkin tests as a means of testing. This allows you to capture a minimum set
of tests that can be used while implementing a feature and aids a TDD approach
towards development.
• Make sure to cross your t-s and dot your i-s during the review phase. You want at
least one review from a team member of each platform.
• Allow platforms to diverge and work at their own pace. It's okay if feature sets
temporarily differ as long as deadlines are met.
Thank you

More Related Content

What's hot

10x Test Coverage, Less Drama: Shift Left Functional & Performance Testing
10x Test Coverage, Less Drama: Shift Left Functional & Performance Testing10x Test Coverage, Less Drama: Shift Left Functional & Performance Testing
10x Test Coverage, Less Drama: Shift Left Functional & Performance TestingSauce Labs
 
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)Alvaro Sanchez-Mariscal
 
An Introduction To Automated API Testing
An Introduction To Automated API TestingAn Introduction To Automated API Testing
An Introduction To Automated API TestingSauce Labs
 
API Test Automation Tips and Tricks
API Test Automation Tips and TricksAPI Test Automation Tips and Tricks
API Test Automation Tips and Trickstesthive
 
API Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj RollisonAPI Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj RollisonTEST Huddle
 
Contract testing: Beyond API functional testing
Contract testing: Beyond API functional testingContract testing: Beyond API functional testing
Contract testing: Beyond API functional testingGaurav Singh
 
API Testing with Frisby and Mocha
API Testing with Frisby and MochaAPI Testing with Frisby and Mocha
API Testing with Frisby and MochaLyudmila Anisimova
 
Easy Automated UI Testing with Canopy
Easy Automated UI Testing with CanopyEasy Automated UI Testing with Canopy
Easy Automated UI Testing with CanopyEric Potter
 
BDD with SpecFlow and Selenium
BDD with SpecFlow and SeleniumBDD with SpecFlow and Selenium
BDD with SpecFlow and SeleniumLiraz Shay
 

What's hot (20)

10x Test Coverage, Less Drama: Shift Left Functional & Performance Testing
10x Test Coverage, Less Drama: Shift Left Functional & Performance Testing10x Test Coverage, Less Drama: Shift Left Functional & Performance Testing
10x Test Coverage, Less Drama: Shift Left Functional & Performance Testing
 
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
 
BDD for APIs
BDD for APIsBDD for APIs
BDD for APIs
 
Automated tests to a REST API
Automated tests to a REST APIAutomated tests to a REST API
Automated tests to a REST API
 
Api testing
Api testingApi testing
Api testing
 
An Introduction To Automated API Testing
An Introduction To Automated API TestingAn Introduction To Automated API Testing
An Introduction To Automated API Testing
 
Gherkin model1
Gherkin model1Gherkin model1
Gherkin model1
 
API Test Automation Tips and Tricks
API Test Automation Tips and TricksAPI Test Automation Tips and Tricks
API Test Automation Tips and Tricks
 
Gherkin model BDD
Gherkin model BDDGherkin model BDD
Gherkin model BDD
 
API Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj RollisonAPI Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj Rollison
 
Bdd and spec flow
Bdd and spec flowBdd and spec flow
Bdd and spec flow
 
Belajar Postman test runner
Belajar Postman test runnerBelajar Postman test runner
Belajar Postman test runner
 
Contract testing: Beyond API functional testing
Contract testing: Beyond API functional testingContract testing: Beyond API functional testing
Contract testing: Beyond API functional testing
 
Cucumber_Training_ForQA
Cucumber_Training_ForQACucumber_Training_ForQA
Cucumber_Training_ForQA
 
API Testing with Frisby and Mocha
API Testing with Frisby and MochaAPI Testing with Frisby and Mocha
API Testing with Frisby and Mocha
 
DevOps Architecture Design
DevOps Architecture DesignDevOps Architecture Design
DevOps Architecture Design
 
Angular Unit Test
Angular Unit TestAngular Unit Test
Angular Unit Test
 
Easy Automated UI Testing with Canopy
Easy Automated UI Testing with CanopyEasy Automated UI Testing with Canopy
Easy Automated UI Testing with Canopy
 
How to define an api
How to define an apiHow to define an api
How to define an api
 
BDD with SpecFlow and Selenium
BDD with SpecFlow and SeleniumBDD with SpecFlow and Selenium
BDD with SpecFlow and Selenium
 

Similar to Shift Remote: Mobile - Efficiently Building Native Frameworks for Multiple Platforms - Donny Wals (Disney Streaming Services)

TDD - for people who don't need it
TDD - for people who don't need itTDD - for people who don't need it
TDD - for people who don't need itChoon Keat Chew
 
Software testing and quality assurance
Software testing and quality assuranceSoftware testing and quality assurance
Software testing and quality assuranceBenjamin Baumann
 
Testing with cucumber testing framework
Testing with cucumber testing frameworkTesting with cucumber testing framework
Testing with cucumber testing frameworkAIMDek Technologies
 
What CS Class Didn't Teach About Testing
What CS Class Didn't Teach About TestingWhat CS Class Didn't Teach About Testing
What CS Class Didn't Teach About TestingCamille Bell
 
Unit Testing in Action - C#, NUnit, and Moq
Unit Testing in Action - C#, NUnit, and MoqUnit Testing in Action - C#, NUnit, and Moq
Unit Testing in Action - C#, NUnit, and MoqXPDays
 
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...Ortus Solutions, Corp
 
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...Uma Ghotikar
 
Build the Right Regression Suite with Behavior-Driven Testing
Build the Right Regression Suite with Behavior-Driven TestingBuild the Right Regression Suite with Behavior-Driven Testing
Build the Right Regression Suite with Behavior-Driven TestingTechWell
 
Sustainable agile testing
Sustainable agile testingSustainable agile testing
Sustainable agile testingmimmozzo_
 
Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...Niels Frydenholm
 
Introduction to cypress in Angular (Chinese)
Introduction to cypress in Angular (Chinese)Introduction to cypress in Angular (Chinese)
Introduction to cypress in Angular (Chinese)Hong Tat Yew
 
Spectacular Specs and how to write them!
Spectacular Specs and how to write them!Spectacular Specs and how to write them!
Spectacular Specs and how to write them!YeurDreamin'
 
Встреча "QA: в каких направлениях может найти себя тестировщик?"
Встреча "QA: в каких направлениях может найти себя тестировщик?"Встреча "QA: в каких направлениях может найти себя тестировщик?"
Встреча "QA: в каких направлениях может найти себя тестировщик?"GoIT
 
An Introduction To Software Development - Final Review
An Introduction To Software Development - Final ReviewAn Introduction To Software Development - Final Review
An Introduction To Software Development - Final ReviewBlue Elephant Consulting
 
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver SoftwareBeyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver SoftwareChris Weldon
 
Tech talk specflow_bddx_hassa_nagy
Tech talk specflow_bddx_hassa_nagyTech talk specflow_bddx_hassa_nagy
Tech talk specflow_bddx_hassa_nagySkills Matter
 
Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)
Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)
Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)Vivek Chawla
 
Tools for Software Testing
Tools for Software TestingTools for Software Testing
Tools for Software TestingMohammed Moishin
 
Introduction to Test Driven Development
Introduction to Test Driven DevelopmentIntroduction to Test Driven Development
Introduction to Test Driven DevelopmentSarah Dutkiewicz
 

Similar to Shift Remote: Mobile - Efficiently Building Native Frameworks for Multiple Platforms - Donny Wals (Disney Streaming Services) (20)

TDD - for people who don't need it
TDD - for people who don't need itTDD - for people who don't need it
TDD - for people who don't need it
 
Software testing and quality assurance
Software testing and quality assuranceSoftware testing and quality assurance
Software testing and quality assurance
 
Testing with cucumber testing framework
Testing with cucumber testing frameworkTesting with cucumber testing framework
Testing with cucumber testing framework
 
What CS Class Didn't Teach About Testing
What CS Class Didn't Teach About TestingWhat CS Class Didn't Teach About Testing
What CS Class Didn't Teach About Testing
 
Unit Testing in Action - C#, NUnit, and Moq
Unit Testing in Action - C#, NUnit, and MoqUnit Testing in Action - C#, NUnit, and Moq
Unit Testing in Action - C#, NUnit, and Moq
 
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...
 
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...
 
Build the Right Regression Suite with Behavior-Driven Testing
Build the Right Regression Suite with Behavior-Driven TestingBuild the Right Regression Suite with Behavior-Driven Testing
Build the Right Regression Suite with Behavior-Driven Testing
 
Sustainable agile testing
Sustainable agile testingSustainable agile testing
Sustainable agile testing
 
Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...
 
Introduction to cypress in Angular (Chinese)
Introduction to cypress in Angular (Chinese)Introduction to cypress in Angular (Chinese)
Introduction to cypress in Angular (Chinese)
 
Spectacular Specs and how to write them!
Spectacular Specs and how to write them!Spectacular Specs and how to write them!
Spectacular Specs and how to write them!
 
Встреча "QA: в каких направлениях может найти себя тестировщик?"
Встреча "QA: в каких направлениях может найти себя тестировщик?"Встреча "QA: в каких направлениях может найти себя тестировщик?"
Встреча "QA: в каких направлениях может найти себя тестировщик?"
 
An Introduction To Software Development - Final Review
An Introduction To Software Development - Final ReviewAn Introduction To Software Development - Final Review
An Introduction To Software Development - Final Review
 
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver SoftwareBeyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver Software
 
Tech talk specflow_bddx_hassa_nagy
Tech talk specflow_bddx_hassa_nagyTech talk specflow_bddx_hassa_nagy
Tech talk specflow_bddx_hassa_nagy
 
Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)
Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)
Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)
 
Tools for Software Testing
Tools for Software TestingTools for Software Testing
Tools for Software Testing
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Introduction to Test Driven Development
Introduction to Test Driven DevelopmentIntroduction to Test Driven Development
Introduction to Test Driven Development
 

More from Shift Conference

Shift Remote: AI: How Does Face Recognition Work (ars futura)
Shift Remote: AI: How Does Face Recognition Work  (ars futura)Shift Remote: AI: How Does Face Recognition Work  (ars futura)
Shift Remote: AI: How Does Face Recognition Work (ars futura)Shift Conference
 
Shift Remote: AI: Behind the scenes development in an AI company - Matija Ili...
Shift Remote: AI: Behind the scenes development in an AI company - Matija Ili...Shift Remote: AI: Behind the scenes development in an AI company - Matija Ili...
Shift Remote: AI: Behind the scenes development in an AI company - Matija Ili...Shift Conference
 
Shift Remote: AI: Smarter AI with analytical graph databases - Victor Lee (Ti...
Shift Remote: AI: Smarter AI with analytical graph databases - Victor Lee (Ti...Shift Remote: AI: Smarter AI with analytical graph databases - Victor Lee (Ti...
Shift Remote: AI: Smarter AI with analytical graph databases - Victor Lee (Ti...Shift Conference
 
Shift Remote: DevOps: Devops with Azure Devops and Github - Juarez Junior (Mi...
Shift Remote: DevOps: Devops with Azure Devops and Github - Juarez Junior (Mi...Shift Remote: DevOps: Devops with Azure Devops and Github - Juarez Junior (Mi...
Shift Remote: DevOps: Devops with Azure Devops and Github - Juarez Junior (Mi...Shift Conference
 
Shift Remote: DevOps: Autodesks research into digital twins for AEC - Kean W...
Shift Remote: DevOps: Autodesks research into digital twins for AEC -  Kean W...Shift Remote: DevOps: Autodesks research into digital twins for AEC -  Kean W...
Shift Remote: DevOps: Autodesks research into digital twins for AEC - Kean W...Shift Conference
 
Shift Remote: DevOps: When metrics are not enough, and everyone is on-call - ...
Shift Remote: DevOps: When metrics are not enough, and everyone is on-call - ...Shift Remote: DevOps: When metrics are not enough, and everyone is on-call - ...
Shift Remote: DevOps: When metrics are not enough, and everyone is on-call - ...Shift Conference
 
Shift Remote: DevOps: Modern incident management with opsgenie - Kristijan L...
Shift Remote: DevOps: Modern incident management with opsgenie -  Kristijan L...Shift Remote: DevOps: Modern incident management with opsgenie -  Kristijan L...
Shift Remote: DevOps: Modern incident management with opsgenie - Kristijan L...Shift Conference
 
Shift Remote: DevOps: Gitlab ci hands-on experience - Ivan Rimac (Barrage)
Shift Remote: DevOps: Gitlab ci hands-on experience - Ivan Rimac (Barrage)Shift Remote: DevOps: Gitlab ci hands-on experience - Ivan Rimac (Barrage)
Shift Remote: DevOps: Gitlab ci hands-on experience - Ivan Rimac (Barrage)Shift Conference
 
Shift Remote: DevOps: DevOps Heroes - Adding Advanced Automation to your Tool...
Shift Remote: DevOps: DevOps Heroes - Adding Advanced Automation to your Tool...Shift Remote: DevOps: DevOps Heroes - Adding Advanced Automation to your Tool...
Shift Remote: DevOps: DevOps Heroes - Adding Advanced Automation to your Tool...Shift Conference
 
Shift Remote: DevOps: An (Un)expected Journey - Zeljko Margeta (RBA)
Shift Remote: DevOps: An (Un)expected Journey - Zeljko Margeta (RBA)Shift Remote: DevOps: An (Un)expected Journey - Zeljko Margeta (RBA)
Shift Remote: DevOps: An (Un)expected Journey - Zeljko Margeta (RBA)Shift Conference
 
Shift Remote: Game Dev - Localising Mobile Games - Marta Kunic (Nanobit)
Shift Remote: Game Dev - Localising Mobile Games - Marta Kunic (Nanobit)Shift Remote: Game Dev - Localising Mobile Games - Marta Kunic (Nanobit)
Shift Remote: Game Dev - Localising Mobile Games - Marta Kunic (Nanobit)Shift Conference
 
Shift Remote: Game Dev - Challenges Introducing Open Source to the Games Indu...
Shift Remote: Game Dev - Challenges Introducing Open Source to the Games Indu...Shift Remote: Game Dev - Challenges Introducing Open Source to the Games Indu...
Shift Remote: Game Dev - Challenges Introducing Open Source to the Games Indu...Shift Conference
 
Shift Remote: Game Dev - Ghost in the Machine: Authorial Voice in System Desi...
Shift Remote: Game Dev - Ghost in the Machine: Authorial Voice in System Desi...Shift Remote: Game Dev - Ghost in the Machine: Authorial Voice in System Desi...
Shift Remote: Game Dev - Ghost in the Machine: Authorial Voice in System Desi...Shift Conference
 
Shift Remote: Game Dev - Building Better Worlds with Game Culturalization - K...
Shift Remote: Game Dev - Building Better Worlds with Game Culturalization - K...Shift Remote: Game Dev - Building Better Worlds with Game Culturalization - K...
Shift Remote: Game Dev - Building Better Worlds with Game Culturalization - K...Shift Conference
 
Shift Remote: Game Dev - Open Match: An Open Source Matchmaking Framework - J...
Shift Remote: Game Dev - Open Match: An Open Source Matchmaking Framework - J...Shift Remote: Game Dev - Open Match: An Open Source Matchmaking Framework - J...
Shift Remote: Game Dev - Open Match: An Open Source Matchmaking Framework - J...Shift Conference
 
Shift Remote: Game Dev - Designing Inside the Box - Fernando Reyes Medina (34...
Shift Remote: Game Dev - Designing Inside the Box - Fernando Reyes Medina (34...Shift Remote: Game Dev - Designing Inside the Box - Fernando Reyes Medina (34...
Shift Remote: Game Dev - Designing Inside the Box - Fernando Reyes Medina (34...Shift Conference
 
Shift Remote: Mobile - Introduction to MotionLayout on Android - Denis Fodor ...
Shift Remote: Mobile - Introduction to MotionLayout on Android - Denis Fodor ...Shift Remote: Mobile - Introduction to MotionLayout on Android - Denis Fodor ...
Shift Remote: Mobile - Introduction to MotionLayout on Android - Denis Fodor ...Shift Conference
 
Shift Remote: Mobile - Devops-ify your life with Github Actions - Nicola Cort...
Shift Remote: Mobile - Devops-ify your life with Github Actions - Nicola Cort...Shift Remote: Mobile - Devops-ify your life with Github Actions - Nicola Cort...
Shift Remote: Mobile - Devops-ify your life with Github Actions - Nicola Cort...Shift Conference
 
Shift Remote: WEB - GraphQL and React – Quick Start - Dubravko Bogovic (Infobip)
Shift Remote: WEB - GraphQL and React – Quick Start - Dubravko Bogovic (Infobip)Shift Remote: WEB - GraphQL and React – Quick Start - Dubravko Bogovic (Infobip)
Shift Remote: WEB - GraphQL and React – Quick Start - Dubravko Bogovic (Infobip)Shift Conference
 
Shift Remote: WEB - The Features of WebXR Beyond Virtual Reality - Ada Rose C...
Shift Remote: WEB - The Features of WebXR Beyond Virtual Reality - Ada Rose C...Shift Remote: WEB - The Features of WebXR Beyond Virtual Reality - Ada Rose C...
Shift Remote: WEB - The Features of WebXR Beyond Virtual Reality - Ada Rose C...Shift Conference
 

More from Shift Conference (20)

Shift Remote: AI: How Does Face Recognition Work (ars futura)
Shift Remote: AI: How Does Face Recognition Work  (ars futura)Shift Remote: AI: How Does Face Recognition Work  (ars futura)
Shift Remote: AI: How Does Face Recognition Work (ars futura)
 
Shift Remote: AI: Behind the scenes development in an AI company - Matija Ili...
Shift Remote: AI: Behind the scenes development in an AI company - Matija Ili...Shift Remote: AI: Behind the scenes development in an AI company - Matija Ili...
Shift Remote: AI: Behind the scenes development in an AI company - Matija Ili...
 
Shift Remote: AI: Smarter AI with analytical graph databases - Victor Lee (Ti...
Shift Remote: AI: Smarter AI with analytical graph databases - Victor Lee (Ti...Shift Remote: AI: Smarter AI with analytical graph databases - Victor Lee (Ti...
Shift Remote: AI: Smarter AI with analytical graph databases - Victor Lee (Ti...
 
Shift Remote: DevOps: Devops with Azure Devops and Github - Juarez Junior (Mi...
Shift Remote: DevOps: Devops with Azure Devops and Github - Juarez Junior (Mi...Shift Remote: DevOps: Devops with Azure Devops and Github - Juarez Junior (Mi...
Shift Remote: DevOps: Devops with Azure Devops and Github - Juarez Junior (Mi...
 
Shift Remote: DevOps: Autodesks research into digital twins for AEC - Kean W...
Shift Remote: DevOps: Autodesks research into digital twins for AEC -  Kean W...Shift Remote: DevOps: Autodesks research into digital twins for AEC -  Kean W...
Shift Remote: DevOps: Autodesks research into digital twins for AEC - Kean W...
 
Shift Remote: DevOps: When metrics are not enough, and everyone is on-call - ...
Shift Remote: DevOps: When metrics are not enough, and everyone is on-call - ...Shift Remote: DevOps: When metrics are not enough, and everyone is on-call - ...
Shift Remote: DevOps: When metrics are not enough, and everyone is on-call - ...
 
Shift Remote: DevOps: Modern incident management with opsgenie - Kristijan L...
Shift Remote: DevOps: Modern incident management with opsgenie -  Kristijan L...Shift Remote: DevOps: Modern incident management with opsgenie -  Kristijan L...
Shift Remote: DevOps: Modern incident management with opsgenie - Kristijan L...
 
Shift Remote: DevOps: Gitlab ci hands-on experience - Ivan Rimac (Barrage)
Shift Remote: DevOps: Gitlab ci hands-on experience - Ivan Rimac (Barrage)Shift Remote: DevOps: Gitlab ci hands-on experience - Ivan Rimac (Barrage)
Shift Remote: DevOps: Gitlab ci hands-on experience - Ivan Rimac (Barrage)
 
Shift Remote: DevOps: DevOps Heroes - Adding Advanced Automation to your Tool...
Shift Remote: DevOps: DevOps Heroes - Adding Advanced Automation to your Tool...Shift Remote: DevOps: DevOps Heroes - Adding Advanced Automation to your Tool...
Shift Remote: DevOps: DevOps Heroes - Adding Advanced Automation to your Tool...
 
Shift Remote: DevOps: An (Un)expected Journey - Zeljko Margeta (RBA)
Shift Remote: DevOps: An (Un)expected Journey - Zeljko Margeta (RBA)Shift Remote: DevOps: An (Un)expected Journey - Zeljko Margeta (RBA)
Shift Remote: DevOps: An (Un)expected Journey - Zeljko Margeta (RBA)
 
Shift Remote: Game Dev - Localising Mobile Games - Marta Kunic (Nanobit)
Shift Remote: Game Dev - Localising Mobile Games - Marta Kunic (Nanobit)Shift Remote: Game Dev - Localising Mobile Games - Marta Kunic (Nanobit)
Shift Remote: Game Dev - Localising Mobile Games - Marta Kunic (Nanobit)
 
Shift Remote: Game Dev - Challenges Introducing Open Source to the Games Indu...
Shift Remote: Game Dev - Challenges Introducing Open Source to the Games Indu...Shift Remote: Game Dev - Challenges Introducing Open Source to the Games Indu...
Shift Remote: Game Dev - Challenges Introducing Open Source to the Games Indu...
 
Shift Remote: Game Dev - Ghost in the Machine: Authorial Voice in System Desi...
Shift Remote: Game Dev - Ghost in the Machine: Authorial Voice in System Desi...Shift Remote: Game Dev - Ghost in the Machine: Authorial Voice in System Desi...
Shift Remote: Game Dev - Ghost in the Machine: Authorial Voice in System Desi...
 
Shift Remote: Game Dev - Building Better Worlds with Game Culturalization - K...
Shift Remote: Game Dev - Building Better Worlds with Game Culturalization - K...Shift Remote: Game Dev - Building Better Worlds with Game Culturalization - K...
Shift Remote: Game Dev - Building Better Worlds with Game Culturalization - K...
 
Shift Remote: Game Dev - Open Match: An Open Source Matchmaking Framework - J...
Shift Remote: Game Dev - Open Match: An Open Source Matchmaking Framework - J...Shift Remote: Game Dev - Open Match: An Open Source Matchmaking Framework - J...
Shift Remote: Game Dev - Open Match: An Open Source Matchmaking Framework - J...
 
Shift Remote: Game Dev - Designing Inside the Box - Fernando Reyes Medina (34...
Shift Remote: Game Dev - Designing Inside the Box - Fernando Reyes Medina (34...Shift Remote: Game Dev - Designing Inside the Box - Fernando Reyes Medina (34...
Shift Remote: Game Dev - Designing Inside the Box - Fernando Reyes Medina (34...
 
Shift Remote: Mobile - Introduction to MotionLayout on Android - Denis Fodor ...
Shift Remote: Mobile - Introduction to MotionLayout on Android - Denis Fodor ...Shift Remote: Mobile - Introduction to MotionLayout on Android - Denis Fodor ...
Shift Remote: Mobile - Introduction to MotionLayout on Android - Denis Fodor ...
 
Shift Remote: Mobile - Devops-ify your life with Github Actions - Nicola Cort...
Shift Remote: Mobile - Devops-ify your life with Github Actions - Nicola Cort...Shift Remote: Mobile - Devops-ify your life with Github Actions - Nicola Cort...
Shift Remote: Mobile - Devops-ify your life with Github Actions - Nicola Cort...
 
Shift Remote: WEB - GraphQL and React – Quick Start - Dubravko Bogovic (Infobip)
Shift Remote: WEB - GraphQL and React – Quick Start - Dubravko Bogovic (Infobip)Shift Remote: WEB - GraphQL and React – Quick Start - Dubravko Bogovic (Infobip)
Shift Remote: WEB - GraphQL and React – Quick Start - Dubravko Bogovic (Infobip)
 
Shift Remote: WEB - The Features of WebXR Beyond Virtual Reality - Ada Rose C...
Shift Remote: WEB - The Features of WebXR Beyond Virtual Reality - Ada Rose C...Shift Remote: WEB - The Features of WebXR Beyond Virtual Reality - Ada Rose C...
Shift Remote: WEB - The Features of WebXR Beyond Virtual Reality - Ada Rose C...
 

Recently uploaded

Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Sonam Pathan
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationLinaWolf1
 
Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Paul Calvano
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhimiss dipika
 
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一Fs
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts servicevipmodelshub1
 
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一Fs
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMartaLoveguard
 
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130  Available With RoomVIP Kolkata Call Girl Kestopur 👉 8250192130  Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Roomdivyansh0kumar0
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作ys8omjxb
 
Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Excelmac1
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITMgdsc13
 
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls KolkataVIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Sonam Pathan
 
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With RoomVIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Roomishabajaj13
 
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130  Available With RoomVIP Kolkata Call Girl Alambazar 👉 8250192130  Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Roomdivyansh0kumar0
 

Recently uploaded (20)

Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 Documentation
 
Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
 
Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhi
 
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
 
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
 
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptx
 
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
 
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130  Available With RoomVIP Kolkata Call Girl Kestopur 👉 8250192130  Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
 
Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITM
 
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls KolkataVIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
 
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With RoomVIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
 
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
 
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130  Available With RoomVIP Kolkata Call Girl Alambazar 👉 8250192130  Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Room
 

Shift Remote: Mobile - Efficiently Building Native Frameworks for Multiple Platforms - Donny Wals (Disney Streaming Services)

  • 1. Donny Wals // July 2020 Efficiently developing native frameworks for multiple platforms
  • 3. 👋 • Blog: https://www.donnywals.com • Book: https://practicalcombine.com • Twitter: @donnywals Donny Wals iOS Engineer
  • 4. Our SDK powers several apps and provides networking capabilities amongst other features.
  • 9. Engineers must be able to communicate efficiently and effectively
  • 10. With the tips in this talk you should be able to
  • 11. With the tips in this talk you should be able to • Improve your own processes
  • 12. With the tips in this talk you should be able to • Improve your own processes • Enhance your code quality
  • 15. A good spec: • Captures what a feature is and how it should work (the "what" and "how")
  • 16. A good spec: • Captures what a feature is and how it should work (the "what" and "how") • Describes a public interface
  • 17. A good spec: • Captures what a feature is and how it should work (the "what" and "how") • Describes a public interface • Provides context (the "why")
  • 18. A good spec: • Captures what a feature is and how it should work (the "what" and "how") • Describes a public interface • Provides context (the "why") • Defines UML for the public API
  • 20. # User login flow Users should be able to login through the `UserApi` defined in the framework. An instance of the `UserApi` is obtained through `MyFramework.userApi`. Framework users can call `UserApi.login(username, password)` to trigger a login. The `login` method returns a `Promise` that's fulfilled when the `login` call completes sucessfully or with a failure. In case of `success` the caller receives an `AccessToken`. In case of `failure` the caller receives a `LoginError`. In case the user provides invalid credentials, the server returns a `LoginError.invalidCredentials` error. This is also true if `login` is called with empty credentials. ...
  • 21. # User login flow Users should be able to login through the `UserApi` defined in the framework. An instance of the `UserApi` is obtained through `MyFramework.userApi`. Framework users can call `UserApi.login(username, password)` to trigger a login. The `login` method returns a `Promise` that's fulfilled when the `login` call completes sucessfully or with a failure. In case of `success` the caller receives an `AccessToken`. In case of `failure` the caller receives a `LoginError`. In case the user provides invalid credentials, the server returns a `LoginError.invalidCredentials` error. This is also true if `login` is called with empty credentials. ... The Happy Path
  • 22. # User login flow Users should be able to login through the `UserApi` defined in the framework. An instance of the `UserApi` is obtained through `MyFramework.userApi`. Framework users can call `UserApi.login(username, password)` to trigger a login. The `login` method returns a `Promise` that's fulfilled when the `login` call completes sucessfully or with a failure. In case of `success` the caller receives an `AccessToken`. In case of `failure` the caller receives a `LoginError`. In case the user provides invalid credentials, the server returns a `LoginError.invalidCredentials` error. This is also true if `login` is called with empty credentials. ... The Happy Path Failures and exceptions
  • 24. ```uml interface UserApi { '@error LoginError.invalidCredentials' '@error_description thrown if the user provides invalid credentials' +login(username: String, password: String) -> Promise<AccessToken> } interface AccessToken { +token: String +expiresAt: Date +refreshToken: String +refreshExpiresAt: Date } ```
  • 25. Make sure to add sources when needed
  • 26. Sometimes it's not obvious what's missing in a spec
  • 27. Sometimes it's not obvious what's missing in a spec Especially when edge cases are missing
  • 28. I ♥ writing tests
  • 34. Gherkin The Building Blocks • Given • When • Then
  • 36. When: describes the action you want to test
  • 37. Then: describes the environment after the action is performed
  • 39. Gherkin tests help you to: • Understand a feature
  • 40. Gherkin tests help you to: • Understand a feature • Know when a feature is fully implemented
  • 41. Gherkin tests help you to: • Understand a feature • Know when a feature is fully implemented • Discover edge cases
  • 43.
  • 44. Given a valid username and password
  • 45. Given a valid username and password When using these credentials to call the login service
  • 46. Given a valid username and password When using these credentials to call the login service Then a valid token should be stored
  • 47. Given a valid username and password When using these credentials to call the login service Then a valid token should be stored Then the valid token should be surfaced to the caller of the login method.
  • 48.
  • 49. Given a valid username and an invalid password
  • 50. Given a valid username and an invalid password When using these credentials to call the login service
  • 51. Given a valid username and an invalid password When using these credentials to call the login service Then the credentials error returned by the service should be surfaced to the caller of the login method
  • 52.
  • 53. Given a valid username and an empty password
  • 54. Given a valid username and an empty password When using these credentials to call the login service
  • 55. Given a valid username and an empty password When using these credentials to call the login service Then the credentials error returned by the service should be surfaced to the caller of the login method
  • 56.
  • 57. Given a empty username and an empty password
  • 58. Given a empty username and an empty password When using these credentials to call the login service Then the credentials error returned by the service should be surfaced to the caller of the login method
  • 59.
  • 60. Given a empty username and an non-empty password
  • 61. Given a empty username and an non-empty password When using these credentials to call the login service Then the credentials error returned by the service should be surfaced to the caller of the login method
  • 62. A completed spec is submitted for review
  • 63. Focus during the review phase
  • 64. Focus during the review phase • Ensure that the spec is clear
  • 65. Focus during the review phase • Ensure that the spec is clear • Test links to the documentation and compare them to the written spec
  • 66. Focus during the review phase • Ensure that the spec is clear • Test links to the documentation and compare them to the written spec • Review the UML for correctness
  • 67. Focus during the review phase • Ensure that the spec is clear • Test links to the documentation and compare them to the written spec • Review the UML for correctness • Check that the feature is possible within your platform
  • 68. Focus during the review phase • Ensure that the spec is clear • Test links to the documentation and compare them to the written spec • Review the UML for correctness • Check that the feature is possible within your platform • Validate the tests and make sure they're complete
  • 69. Focus during the review phase • Ensure that the spec is clear • Test links to the documentation and compare them to the written spec • Review the UML for correctness • Check that the feature is possible within your platform • Validate the tests and make sure they're complete • Make sure that at least one member from every platform reviews and approves
  • 71. During the implementation phase • Every team will work on the features at roughly a different time
  • 72. During the implementation phase • Every team will work on the features at roughly a different time • Versioning does not have to be identical within teams
  • 73. During the implementation phase • Every team will work on the features at roughly a different time • Versioning does not have to be identical within teams • Make sure that every team can work at their own pace
  • 74. During the implementation phase • Every team will work on the features at roughly a different time • Versioning does not have to be identical within teams • Make sure that every team can work at their own pace • Just make sure that big deadlines are delivered in time
  • 76. Summary • Make sure you write feature specs that cover public APIs.
  • 77. Summary • Make sure you write feature specs that cover public APIs. • A feature spec should cover the what, how and why without dictating implementation details that aren't relevant to all platforms.
  • 78. Summary • Make sure you write feature specs that cover public APIs. • A feature spec should cover the what, how and why without dictating implementation details that aren't relevant to all platforms. • Add Gherkin tests as a means of testing. This allows you to capture a minimum set of tests that can be used while implementing a feature and aids a TDD approach towards development.
  • 79. Summary • Make sure you write feature specs that cover public APIs. • A feature spec should cover the what, how and why without dictating implementation details that aren't relevant to all platforms. • Add Gherkin tests as a means of testing. This allows you to capture a minimum set of tests that can be used while implementing a feature and aids a TDD approach towards development. • Make sure to cross your t-s and dot your i-s during the review phase. You want at least one review from a team member of each platform.
  • 80. Summary • Make sure you write feature specs that cover public APIs. • A feature spec should cover the what, how and why without dictating implementation details that aren't relevant to all platforms. • Add Gherkin tests as a means of testing. This allows you to capture a minimum set of tests that can be used while implementing a feature and aids a TDD approach towards development. • Make sure to cross your t-s and dot your i-s during the review phase. You want at least one review from a team member of each platform. • Allow platforms to diverge and work at their own pace. It's okay if feature sets temporarily differ as long as deadlines are met.
  • 81.