SlideShare a Scribd company logo
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...
Shift Remote: Mobile - Efficiently Building Native Frameworks for Multiple Platforms - Donny Wals (Disney Streaming Services)
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.
Shift Remote: Mobile - Efficiently Building Native Frameworks for Multiple Platforms - Donny Wals (Disney Streaming Services)
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
Shift Remote: Mobile - Efficiently Building Native Frameworks for Multiple Platforms - Donny Wals (Disney Streaming Services)
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
Shift Remote: Mobile - Efficiently Building Native Frameworks for Multiple Platforms - Donny Wals (Disney Streaming Services)
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
Shift Remote: Mobile - Efficiently Building Native Frameworks for Multiple Platforms - Donny Wals (Disney Streaming Services)
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.
Shift Remote: Mobile - Efficiently Building Native Frameworks for Multiple Platforms - Donny Wals (Disney Streaming Services)
Thank you

More Related Content

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
Sauce 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
 
BDD for APIs
BDD for APIsBDD for APIs
BDD for APIs
Jason Harmon
 
Automated tests to a REST API
Automated tests to a REST APIAutomated tests to a REST API
Automated tests to a REST API
Luís Barros Nóbrega
 
Api testing
Api testingApi testing
Api testing
Keshav Kashyap
 
An Introduction To Automated API Testing
An Introduction To Automated API TestingAn Introduction To Automated API Testing
An Introduction To Automated API Testing
Sauce Labs
 
Gherkin model1
Gherkin model1Gherkin model1
Gherkin model1
Bill Washinski, PMP CSM CSPO ITIL TKP
 
API Test Automation Tips and Tricks
API Test Automation Tips and TricksAPI Test Automation Tips and Tricks
API Test Automation Tips and Tricks
testhive
 
Gherkin model BDD
Gherkin model BDDGherkin model BDD
Gherkin model BDD
Bill Washinski, PMP CSM CSPO ITIL TKP
 
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
TEST Huddle
 
Bdd and spec flow
Bdd and spec flowBdd and spec flow
Bdd and spec flow
Charles Nurse
 
Belajar Postman test runner
Belajar Postman test runnerBelajar Postman test runner
Belajar Postman test runner
Fachrul Choliluddin
 
Contract testing: Beyond API functional testing
Contract testing: Beyond API functional testingContract testing: Beyond API functional testing
Contract testing: Beyond API functional testing
Gaurav Singh
 
Cucumber_Training_ForQA
Cucumber_Training_ForQACucumber_Training_ForQA
Cucumber_Training_ForQA
Meenakshi Singhal
 
API Testing with Frisby and Mocha
API Testing with Frisby and MochaAPI Testing with Frisby and Mocha
API Testing with Frisby and Mocha
Lyudmila Anisimova
 
DevOps Architecture Design
DevOps Architecture DesignDevOps Architecture Design
DevOps Architecture Design
Agile Testing Alliance
 
Angular Unit Test
Angular Unit TestAngular Unit Test
Angular Unit Test
Michael Haberman
 
Easy Automated UI Testing with Canopy
Easy Automated UI Testing with CanopyEasy Automated UI Testing with Canopy
Easy Automated UI Testing with Canopy
Eric Potter
 
How to define an api
How to define an apiHow to define an api
How to define an api
Alexandru Chica
 
BDD with SpecFlow and Selenium
BDD with SpecFlow and SeleniumBDD with SpecFlow and Selenium
BDD with SpecFlow and Selenium
Liraz Shay
 
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
Sauce 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 Testing
Sauce Labs
 
API Test Automation Tips and Tricks
API Test Automation Tips and TricksAPI Test Automation Tips and Tricks
API Test Automation Tips and Tricks
testhive
 
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
TEST Huddle
 
Contract testing: Beyond API functional testing
Contract testing: Beyond API functional testingContract testing: Beyond API functional testing
Contract testing: Beyond API functional testing
Gaurav Singh
 
API Testing with Frisby and Mocha
API Testing with Frisby and MochaAPI Testing with Frisby and Mocha
API Testing with Frisby and Mocha
Lyudmila Anisimova
 
Easy Automated UI Testing with Canopy
Easy Automated UI Testing with CanopyEasy Automated UI Testing with Canopy
Easy Automated UI Testing with Canopy
Eric Potter
 
BDD with SpecFlow and Selenium
BDD with SpecFlow and SeleniumBDD with SpecFlow and Selenium
BDD with SpecFlow and Selenium
Liraz Shay
 

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
Choon Keat Chew
 
Software testing and quality assurance
Software testing and quality assuranceSoftware testing and quality assurance
Software testing and quality assurance
Benjamin Baumann
 
Testing with cucumber testing framework
Testing with cucumber testing frameworkTesting with cucumber testing framework
Testing with cucumber testing framework
AIMDek 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 Testing
Camille 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 Moq
XPDays
 
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 Testing
TechWell
 
Sustainable agile testing
Sustainable agile testingSustainable agile testing
Sustainable agile testing
mimmozzo_
 
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 Review
Blue 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 Software
Chris Weldon
 
Tech talk specflow_bddx_hassa_nagy
Tech talk specflow_bddx_hassa_nagyTech talk specflow_bddx_hassa_nagy
Tech talk specflow_bddx_hassa_nagy
Skills 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 Testing
Mohammed Moishin
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
Sergey Aganezov
 
Introduction to Test Driven Development
Introduction to Test Driven DevelopmentIntroduction to Test Driven Development
Introduction to Test Driven Development
Sarah Dutkiewicz
 
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
Choon Keat Chew
 
Software testing and quality assurance
Software testing and quality assuranceSoftware testing and quality assurance
Software testing and quality assurance
Benjamin Baumann
 
Testing with cucumber testing framework
Testing with cucumber testing frameworkTesting with cucumber testing framework
Testing with cucumber testing framework
AIMDek 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 Testing
Camille 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 Moq
XPDays
 
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 Testing
TechWell
 
Sustainable agile testing
Sustainable agile testingSustainable agile testing
Sustainable agile testing
mimmozzo_
 
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 Review
Blue 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 Software
Chris Weldon
 
Tech talk specflow_bddx_hassa_nagy
Tech talk specflow_bddx_hassa_nagyTech talk specflow_bddx_hassa_nagy
Tech talk specflow_bddx_hassa_nagy
Skills 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 Testing
Mohammed Moishin
 
Introduction to Test Driven Development
Introduction to Test Driven DevelopmentIntroduction to Test Driven Development
Introduction to Test Driven Development
Sarah Dutkiewicz
 

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 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
 
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
 

Recently uploaded (19)

Smart Mobile App Pitch Deck丨AI Travel App Presentation Template
Smart Mobile App Pitch Deck丨AI Travel App Presentation TemplateSmart Mobile App Pitch Deck丨AI Travel App Presentation Template
Smart Mobile App Pitch Deck丨AI Travel App Presentation Template
yojeari421237
 
Perguntas dos animais - Slides ilustrados de múltipla escolha
Perguntas dos animais - Slides ilustrados de múltipla escolhaPerguntas dos animais - Slides ilustrados de múltipla escolha
Perguntas dos animais - Slides ilustrados de múltipla escolha
socaslev
 
DNS Resolvers and Nameservers (in New Zealand)
DNS Resolvers and Nameservers (in New Zealand)DNS Resolvers and Nameservers (in New Zealand)
DNS Resolvers and Nameservers (in New Zealand)
APNIC
 
Top Vancouver Green Business Ideas for 2025 Powered by 4GoodHosting
Top Vancouver Green Business Ideas for 2025 Powered by 4GoodHostingTop Vancouver Green Business Ideas for 2025 Powered by 4GoodHosting
Top Vancouver Green Business Ideas for 2025 Powered by 4GoodHosting
steve198109
 
Understanding the Tor Network and Exploring the Deep Web
Understanding the Tor Network and Exploring the Deep WebUnderstanding the Tor Network and Exploring the Deep Web
Understanding the Tor Network and Exploring the Deep Web
nabilajabin35
 
Computers Networks Computers Networks Computers Networks
Computers Networks Computers Networks Computers NetworksComputers Networks Computers Networks Computers Networks
Computers Networks Computers Networks Computers Networks
Tito208863
 
APNIC Update, presented at NZNOG 2025 by Terry Sweetser
APNIC Update, presented at NZNOG 2025 by Terry SweetserAPNIC Update, presented at NZNOG 2025 by Terry Sweetser
APNIC Update, presented at NZNOG 2025 by Terry Sweetser
APNIC
 
White and Red Clean Car Business Pitch Presentation.pptx
White and Red Clean Car Business Pitch Presentation.pptxWhite and Red Clean Car Business Pitch Presentation.pptx
White and Red Clean Car Business Pitch Presentation.pptx
canumatown
 
Best web hosting Vancouver 2025 for you business
Best web hosting Vancouver 2025 for you businessBest web hosting Vancouver 2025 for you business
Best web hosting Vancouver 2025 for you business
steve198109
 
5-Proses-proses Akuisisi Citra Digital.pptx
5-Proses-proses Akuisisi Citra Digital.pptx5-Proses-proses Akuisisi Citra Digital.pptx
5-Proses-proses Akuisisi Citra Digital.pptx
andani26
 
IT Services Workflow From Request to Resolution
IT Services Workflow From Request to ResolutionIT Services Workflow From Request to Resolution
IT Services Workflow From Request to Resolution
mzmziiskd
 
Reliable Vancouver Web Hosting with Local Servers & 24/7 Support
Reliable Vancouver Web Hosting with Local Servers & 24/7 SupportReliable Vancouver Web Hosting with Local Servers & 24/7 Support
Reliable Vancouver Web Hosting with Local Servers & 24/7 Support
steve198109
 
Mobile database for your company telemarketing or sms marketing campaigns. Fr...
Mobile database for your company telemarketing or sms marketing campaigns. Fr...Mobile database for your company telemarketing or sms marketing campaigns. Fr...
Mobile database for your company telemarketing or sms marketing campaigns. Fr...
DataProvider1
 
highend-srxseries-services-gateways-customer-presentation.pptx
highend-srxseries-services-gateways-customer-presentation.pptxhighend-srxseries-services-gateways-customer-presentation.pptx
highend-srxseries-services-gateways-customer-presentation.pptx
elhadjcheikhdiop
 
(Hosting PHising Sites) for Cryptography and network security
(Hosting PHising Sites) for Cryptography and network security(Hosting PHising Sites) for Cryptography and network security
(Hosting PHising Sites) for Cryptography and network security
aluacharya169
 
project_based_laaaaaaaaaaearning,kelompok 10.pptx
project_based_laaaaaaaaaaearning,kelompok 10.pptxproject_based_laaaaaaaaaaearning,kelompok 10.pptx
project_based_laaaaaaaaaaearning,kelompok 10.pptx
redzuriel13
 
APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025
APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025
APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025
APNIC
 
Determining Glass is mechanical textile
Determining  Glass is mechanical textileDetermining  Glass is mechanical textile
Determining Glass is mechanical textile
Azizul Hakim
 
OSI TCP IP Protocol Layers description f
OSI TCP IP Protocol Layers description fOSI TCP IP Protocol Layers description f
OSI TCP IP Protocol Layers description f
cbr49917
 
Smart Mobile App Pitch Deck丨AI Travel App Presentation Template
Smart Mobile App Pitch Deck丨AI Travel App Presentation TemplateSmart Mobile App Pitch Deck丨AI Travel App Presentation Template
Smart Mobile App Pitch Deck丨AI Travel App Presentation Template
yojeari421237
 
Perguntas dos animais - Slides ilustrados de múltipla escolha
Perguntas dos animais - Slides ilustrados de múltipla escolhaPerguntas dos animais - Slides ilustrados de múltipla escolha
Perguntas dos animais - Slides ilustrados de múltipla escolha
socaslev
 
DNS Resolvers and Nameservers (in New Zealand)
DNS Resolvers and Nameservers (in New Zealand)DNS Resolvers and Nameservers (in New Zealand)
DNS Resolvers and Nameservers (in New Zealand)
APNIC
 
Top Vancouver Green Business Ideas for 2025 Powered by 4GoodHosting
Top Vancouver Green Business Ideas for 2025 Powered by 4GoodHostingTop Vancouver Green Business Ideas for 2025 Powered by 4GoodHosting
Top Vancouver Green Business Ideas for 2025 Powered by 4GoodHosting
steve198109
 
Understanding the Tor Network and Exploring the Deep Web
Understanding the Tor Network and Exploring the Deep WebUnderstanding the Tor Network and Exploring the Deep Web
Understanding the Tor Network and Exploring the Deep Web
nabilajabin35
 
Computers Networks Computers Networks Computers Networks
Computers Networks Computers Networks Computers NetworksComputers Networks Computers Networks Computers Networks
Computers Networks Computers Networks Computers Networks
Tito208863
 
APNIC Update, presented at NZNOG 2025 by Terry Sweetser
APNIC Update, presented at NZNOG 2025 by Terry SweetserAPNIC Update, presented at NZNOG 2025 by Terry Sweetser
APNIC Update, presented at NZNOG 2025 by Terry Sweetser
APNIC
 
White and Red Clean Car Business Pitch Presentation.pptx
White and Red Clean Car Business Pitch Presentation.pptxWhite and Red Clean Car Business Pitch Presentation.pptx
White and Red Clean Car Business Pitch Presentation.pptx
canumatown
 
Best web hosting Vancouver 2025 for you business
Best web hosting Vancouver 2025 for you businessBest web hosting Vancouver 2025 for you business
Best web hosting Vancouver 2025 for you business
steve198109
 
5-Proses-proses Akuisisi Citra Digital.pptx
5-Proses-proses Akuisisi Citra Digital.pptx5-Proses-proses Akuisisi Citra Digital.pptx
5-Proses-proses Akuisisi Citra Digital.pptx
andani26
 
IT Services Workflow From Request to Resolution
IT Services Workflow From Request to ResolutionIT Services Workflow From Request to Resolution
IT Services Workflow From Request to Resolution
mzmziiskd
 
Reliable Vancouver Web Hosting with Local Servers & 24/7 Support
Reliable Vancouver Web Hosting with Local Servers & 24/7 SupportReliable Vancouver Web Hosting with Local Servers & 24/7 Support
Reliable Vancouver Web Hosting with Local Servers & 24/7 Support
steve198109
 
Mobile database for your company telemarketing or sms marketing campaigns. Fr...
Mobile database for your company telemarketing or sms marketing campaigns. Fr...Mobile database for your company telemarketing or sms marketing campaigns. Fr...
Mobile database for your company telemarketing or sms marketing campaigns. Fr...
DataProvider1
 
highend-srxseries-services-gateways-customer-presentation.pptx
highend-srxseries-services-gateways-customer-presentation.pptxhighend-srxseries-services-gateways-customer-presentation.pptx
highend-srxseries-services-gateways-customer-presentation.pptx
elhadjcheikhdiop
 
(Hosting PHising Sites) for Cryptography and network security
(Hosting PHising Sites) for Cryptography and network security(Hosting PHising Sites) for Cryptography and network security
(Hosting PHising Sites) for Cryptography and network security
aluacharya169
 
project_based_laaaaaaaaaaearning,kelompok 10.pptx
project_based_laaaaaaaaaaearning,kelompok 10.pptxproject_based_laaaaaaaaaaearning,kelompok 10.pptx
project_based_laaaaaaaaaaearning,kelompok 10.pptx
redzuriel13
 
APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025
APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025
APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025
APNIC
 
Determining Glass is mechanical textile
Determining  Glass is mechanical textileDetermining  Glass is mechanical textile
Determining Glass is mechanical textile
Azizul Hakim
 
OSI TCP IP Protocol Layers description f
OSI TCP IP Protocol Layers description fOSI TCP IP Protocol Layers description f
OSI TCP IP Protocol Layers description f
cbr49917
 

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
  • 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.
  • 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
  • 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
  • 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
  • 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.