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

DOC
Mohammed Kharma - A flexible framework for quality assurance and testing of s...
PDF
Spec(ing) Out Your Workflow with SpecFlow
PPTX
Test execution
PDF
Specification-By-Example with Gherkin
PDF
Agile Days Twin Cities 2011
PPT
Business Analyst Requirements Management
PDF
Epic.NET: Processes, patterns and architectures
PPTX
Developer Friendly API Design
PDF
Testing of web services Based on Ontology Management Service
Β 
PDF
Specification-By-Example with Gherkin
PDF
Microservices: The Best Practices
PDF
RSpec 2 Best practices
PDF
Business-friendly library for inter-service communication
PPTX
Specifications test automation pyramid public
PDF
Inside Requirements
PPTX
Object oriented analysis and design
PPT
Software requirement verification & validation
PDF
Management Issues in Computer Sciences - Final Exam - 2015
PDF
TripCase Unit Testing with Jasmine
PPT
ch04lect1.ppt
Mohammed Kharma - A flexible framework for quality assurance and testing of s...
Spec(ing) Out Your Workflow with SpecFlow
Test execution
Specification-By-Example with Gherkin
Agile Days Twin Cities 2011
Business Analyst Requirements Management
Epic.NET: Processes, patterns and architectures
Developer Friendly API Design
Testing of web services Based on Ontology Management Service
Β 
Specification-By-Example with Gherkin
Microservices: The Best Practices
RSpec 2 Best practices
Business-friendly library for inter-service communication
Specifications test automation pyramid public
Inside Requirements
Object oriented analysis and design
Software requirement verification & validation
Management Issues in Computer Sciences - Final Exam - 2015
TripCase Unit Testing with Jasmine
ch04lect1.ppt
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)

PPTX
June-4-Sermon-Powerpoint.pptx USE THIS FOR YOUR MOTIVATION
PPTX
Internet___Basics___Styled_ presentation
PDF
Sims 4 Historia para lo sims 4 para jugar
PPT
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
PDF
Introduction to the IoT system, how the IoT system works
PDF
Vigrab.top – Online Tool for Downloading and Converting Social Media Videos a...
PDF
Paper PDF World Game (s) Great Redesign.pdf
PDF
Exploring VPS Hosting Trends for SMBs in 2025
PPTX
Job_Card_System_Styled_lorem_ipsum_.pptx
PDF
πŸ’° π”πŠπ“πˆ πŠπ„πŒπ„ππ€ππ†π€π πŠπˆππ„π‘πŸ’πƒ π‡π€π‘πˆ 𝐈𝐍𝐈 πŸπŸŽπŸπŸ“ πŸ’°
Β 
PPTX
presentation_pfe-universite-molay-seltan.pptx
PPT
Ethics in Information System - Management Information System
PPTX
Database Information System - Management Information System
PDF
Smart Home Technology for Health Monitoring (www.kiu.ac.ug)
DOCX
Unit-3 cyber security network security of internet system
PPTX
artificialintelligenceai1-copy-210604123353.pptx
Β 
PDF
FINAL CALL-6th International Conference on Networks & IOT (NeTIOT 2025)
PPTX
Mathew Digital SEO Checklist Guidlines 2025
PPTX
artificial intelligence overview of it and more
PPT
Design_with_Watersergyerge45hrbgre4top (1).ppt
June-4-Sermon-Powerpoint.pptx USE THIS FOR YOUR MOTIVATION
Internet___Basics___Styled_ presentation
Sims 4 Historia para lo sims 4 para jugar
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
Introduction to the IoT system, how the IoT system works
Vigrab.top – Online Tool for Downloading and Converting Social Media Videos a...
Paper PDF World Game (s) Great Redesign.pdf
Exploring VPS Hosting Trends for SMBs in 2025
Job_Card_System_Styled_lorem_ipsum_.pptx
πŸ’° π”πŠπ“πˆ πŠπ„πŒπ„ππ€ππ†π€π πŠπˆππ„π‘πŸ’πƒ π‡π€π‘πˆ 𝐈𝐍𝐈 πŸπŸŽπŸπŸ“ πŸ’°
Β 
presentation_pfe-universite-molay-seltan.pptx
Ethics in Information System - Management Information System
Database Information System - Management Information System
Smart Home Technology for Health Monitoring (www.kiu.ac.ug)
Unit-3 cyber security network security of internet system
artificialintelligenceai1-copy-210604123353.pptx
Β 
FINAL CALL-6th International Conference on Networks & IOT (NeTIOT 2025)
Mathew Digital SEO Checklist Guidlines 2025
artificial intelligence overview of it and more
Design_with_Watersergyerge45hrbgre4top (1).ppt

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