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

PPTX
Selenium + Specflow
PPTX
Automated Acceptance Tests in .NET
PPTX
Automated Acceptance Tests & Tool choice
PPTX
Story Testing Approach for Enterprise Applications using Selenium Framework
PPTX
Introduction to Bdd and cucumber
PPTX
Bdd – with cucumber and gherkin
PDF
Session on Testing Activities in Continuous Integration and Delivery as an Ex...
PDF
How to Automate API Testing
Selenium + Specflow
Automated Acceptance Tests in .NET
Automated Acceptance Tests & Tool choice
Story Testing Approach for Enterprise Applications using Selenium Framework
Introduction to Bdd and cucumber
Bdd – with cucumber and gherkin
Session on Testing Activities in Continuous Integration and Delivery as an Ex...
How to Automate API Testing

What's hot (20)

PPTX
10x Test Coverage, Less Drama: Shift Left Functional & Performance Testing
PDF
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
PPTX
BDD for APIs
PPTX
Automated tests to a REST API
PPTX
Api testing
PDF
An Introduction To Automated API Testing
PPTX
API Test Automation Tips and Tricks
PDF
API Testing: The heart of functional testing" with Bj Rollison
PPTX
Bdd and spec flow
PPTX
Belajar Postman test runner
PPTX
Contract testing: Beyond API functional testing
PPTX
Cucumber_Training_ForQA
PPTX
API Testing with Frisby and Mocha
PPTX
DevOps Architecture Design
PPTX
Angular Unit Test
PPTX
Easy Automated UI Testing with Canopy
PPTX
How to define an api
PPTX
BDD with SpecFlow and Selenium
10x Test Coverage, Less Drama: Shift Left Functional & Performance Testing
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
BDD for APIs
Automated tests to a REST API
Api testing
An Introduction To Automated API Testing
API Test Automation Tips and Tricks
API Testing: The heart of functional testing" with Bj Rollison
Bdd and spec flow
Belajar Postman test runner
Contract testing: Beyond API functional testing
Cucumber_Training_ForQA
API Testing with Frisby and Mocha
DevOps Architecture Design
Angular Unit Test
Easy Automated UI Testing with Canopy
How to define an api
BDD with SpecFlow and Selenium
Ad

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

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

More from Shift Conference (20)

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

Recently uploaded (20)

PDF
Generative AI Foundations: AI Skills for the Future of Work
PPTX
Generics jehfkhkshfhskjghkshhhhlshluhueheuhuhhlhkhk.pptx
PPTX
PPT_M4.3_WORKING WITH SLIDES APPLIED.pptx
PPTX
Parallel & Concurrent ...
PPTX
durere- in cancer tu ttresjjnklj gfrrjnrs mhugyfrd
PPTX
nagasai stick diagrams in very large scale integratiom.pptx
PPTX
QR Codes Qr codecodecodecodecocodedecodecode
PDF
KIPER4D situs Exclusive Game dari server Star Gaming Asia
PDF
Project English Paja Jara Alejandro.jpdf
PPTX
introduction about ICD -10 & ICD-11 ppt.pptx
PDF
www-codemechsolutions-com-whatwedo-cloud-application-migration-services.pdf
PDF
RPKI Status Update, presented by Makito Lay at IDNOG 10
PPTX
Crypto Recovery California Services.pptx
PDF
Elements Of Poetry PowerPoint With Sources
PPT
256065457-Anaesthesia-in-Liver-Disease-Patient.ppt
PPTX
Unlocking Hope : How Crypto Recovery Services Can Reclaim Your Lost Funds
PDF
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
PDF
LABUAN4D EXCLUSIVE SERVER STAR GAMING ASIA NO.1
PPTX
SEO Trends in 2025 | B3AITS - Bow & 3 Arrows IT Solutions
PDF
LABUAN4D EXCLUSIVE SERVER STAR GAMING ASIA NO.1
Generative AI Foundations: AI Skills for the Future of Work
Generics jehfkhkshfhskjghkshhhhlshluhueheuhuhhlhkhk.pptx
PPT_M4.3_WORKING WITH SLIDES APPLIED.pptx
Parallel & Concurrent ...
durere- in cancer tu ttresjjnklj gfrrjnrs mhugyfrd
nagasai stick diagrams in very large scale integratiom.pptx
QR Codes Qr codecodecodecodecocodedecodecode
KIPER4D situs Exclusive Game dari server Star Gaming Asia
Project English Paja Jara Alejandro.jpdf
introduction about ICD -10 & ICD-11 ppt.pptx
www-codemechsolutions-com-whatwedo-cloud-application-migration-services.pdf
RPKI Status Update, presented by Makito Lay at IDNOG 10
Crypto Recovery California Services.pptx
Elements Of Poetry PowerPoint With Sources
256065457-Anaesthesia-in-Liver-Disease-Patient.ppt
Unlocking Hope : How Crypto Recovery Services Can Reclaim Your Lost Funds
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
LABUAN4D EXCLUSIVE SERVER STAR GAMING ASIA NO.1
SEO Trends in 2025 | B3AITS - Bow & 3 Arrows IT Solutions
LABUAN4D EXCLUSIVE SERVER STAR GAMING ASIA NO.1

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.