Wind of Change
Maxim Zaks
@iceX33
Is change a good thing?
Changes as seen by software
developers
Changing data representations
{"name":"Maxim", "age": 37}
Additive / non destructive change
{"name":"Maxim", "age": 37}
=>
{"name":"Maxim", "age": 37, "city": "Berlin"}
Almost non destructive change
{"name":"Maxim", "age": 37}
=>
{"name":"Maxim", "birthday": "XXXX-XX-XX"}
Destructive change 1
{"name":"Maxim", "age": 37}
=>
{"firstName":"Maxim", "age": 37}
Destructive change 2
{"name":"Maxim", "age": 37}
=>
{"name":{"firstName":"Maxim","lastName":"Zaks"}, "age": 37}
Solutions to the problem can be
found in my blog post
https://hackernoon.com/breaking-changes-26a2633f3415
Use serialisation formats designed for data
evolutions
1. Make everything optional
2. Properties are internally accessable by numeric id
3. You can deprecate properties
4. You can add properties with new id
Next up?
API
func createPerson(name: String, age: Int) -> Person
API additive non breaking change
func createPerson(name: String, age: Int, city: String? = nil) -> Person
Move the problem to data representation
func createPerson() -> Person
func send(person: Person)
How do we deal with breaking
changes in API?
Semantic versioning
X.Y.Z
~>
Semantic versioning
Given a version number MAJOR.MINOR.PATCH, increment the:
MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards-compatible manner, and
PATCH version when you make backwards-compatible bug fixes.
What about App versioning?
Who does REST?
Who knows
Richardson Maturity Model
???
https://de.wikipedia.org/wiki/RepresentationalStateTransfer
Who uses GraphQL?
Let's talk about architecture
https://de.wikipedia.org/wiki/Exzenterhaus
https://de.wikipedia.org/wiki/Universitätsklinikum_Aachen
Cooking & Gardening
Too many cooks spoil the broth
Ingredients and recipies
Gardening
Keeping your garden healthy
Last but not least, lets talk about
teams
The breaking change in a team is
about mental health
Not technical difficulties
The five keys to a successful Google team 1/2
1) Psychological safety: Can we take risks on this team without
feeling insecure or embarrassed?
2) Dependability: Can we count on each other to do high quality
work on time?
3) Structure & clarity: Are goals, roles, and execution plans on our
team clear?
The five keys to a successful Google team 2/2
4) Meaning of work: Are we working on something that is
personally important for each of us?
5) Impact of work: Do we fundamentally believe that the work
we’re doing matters?
https://rework.withgoogle.com/blog/five-keys-to-a-successful-
google-team/
However Fresh Blood in the Team is
also important
Recap
• Data representations
• API
• Versioning
• Apps
• Client server communication
• Architecture
• Team
Thank you!
@iceX33

Wind of change