SlideShare una empresa de Scribd logo
1 de 101
Descargar para leer sin conexión
From iOS to
Distributed Systems
Michele Titolo
Lead Software Engineer, Capital One
@micheletitolo
8 Months Ago I
Changed Teams
@micheletitolo
Mobile
BUT YOU’RE A
developer
@micheletitolo
What Are The Kinds
Of Problems I Solve
When Writing
Mobile Apps?
‣ State
‣ Concurrency
‣ Instrumentation
‣ Testing
‣ Developer Efficiency
@micheletitolo
@micheletitolo
Distributed Systems
@micheletitolo
Mostly means
“microservices”
@micheletitolo
Single Responsibility
@micheletitolo
Production Ready Microservices
‣ Stability
‣ Reliability
‣ Scalability
‣ Fault Tolerance
‣ Performance
‣ Monitoring
‣ Documentation
‣ State
‣ Concurrency
‣ Instrumentation
‣ Testing
‣ Developer Efficiency
@micheletitolo
@micheletitolo
State
@micheletitolo
iOS Apps Are Large
And Stateful
@micheletitolo
MassiveViewController
@micheletitolo
How To Fix?
@micheletitolo
Break Down Into
Functional Parts
@micheletitolo
Sounds Like A
Microservice
@micheletitolo
Inflexible Boundaries
@micheletitolo
Language Features
@micheletitolo
Dynamic
Weakly Typed
@micheletitolo
Why?
@micheletitolo
The Smaller The
Codebase, The Fewer
Language Features
Are Used
@micheletitolo
Focus On Simplicity
@micheletitolo
Generics: Great For
Modeling State
@micheletitolo
What If You Have No
State 🤔?
@micheletitolo
Protocols
Nil Checks
@micheletitolo
Shared State
@micheletitolo
Singletons
@micheletitolo
Dependency
Injection To The
Rescue
@micheletitolo
Translates To
Service Discovery
@micheletitolo
Register And Route
To Dependent
Services
@micheletitolo
Databases!
@micheletitolo
Kind Of Like
Singletons
@micheletitolo
Easy Reads
Restrict Writes
@micheletitolo
Read Replicas
@micheletitolo
Concurrency
@micheletitolo
iOS: 1 million users
each using 1 instance
@micheletitolo
Distributed Systems:
1 million users using
n instances
@micheletitolo
🙀
@micheletitolo
Concurrency Matters
@micheletitolo
Don’t Block The
Main Thread
@micheletitolo
Queues, Threads,
Callbacks All Matter
@micheletitolo
GCD is 💯
@micheletitolo
Other Languages
Are Not As
Sophisticated
@micheletitolo
Instrumentation
@micheletitolo
‣ Performance
‣ Usage
@micheletitolo
iOS Apps Are
Black Boxes
@micheletitolo
If It’s Not Tracked,
You Can’t Know
@micheletitolo
Knowing What To
Track Is Key
@micheletitolo
Apps Behave
Differently In
The Wild
@micheletitolo
Instrumentation
On iOS
@micheletitolo
Instruments.App
Helps Locally
@micheletitolo
AppStore
App Analytics
@micheletitolo
3rd Party Analytics
@micheletitolo
Microservices
@micheletitolo
Microservices Are
Also Black Boxes
@micheletitolo
Developers
Shouldn’t Have
Prod SSH Access
@micheletitolo
Alerts Need Metrics
@micheletitolo
Again, Local Dev Is
Different
@micheletitolo
Simulate Load In
Pre-Production
@micheletitolo
Imperfect, Imprecise
@micheletitolo
Instrumentation
Helps Surface And
Diagnose Issues
@micheletitolo
Testing
Unit
Integration
End
to End
@micheletitolo
Testing Is Universal
@micheletitolo
Testing On iOS
@micheletitolo
Isolated State
@micheletitolo
Dependency
Injection
@micheletitolo
Run Frequently
@micheletitolo
Tests For Everything
@micheletitolo
Microservices
@micheletitolo
But First One Thing I
Glossed Over…
@micheletitolo
Microservices Are
Infrastructure Heavy
@micheletitolo
CICD
@micheletitolo
If Code Goes To Prod
Basically Immediately…
@micheletitolo
Automate All The
Things
@micheletitolo
Codebase Needs
Lots Of Tests
@micheletitolo
Tests For
Microservices Need…
@micheletitolo
Isolated State
@micheletitolo
Dependency
Injection
@micheletitolo
All The Testing
Layers Covered
@micheletitolo
Just Like On iOS
@micheletitolo
Developer Efficiency
@micheletitolo
Move Fast
And
Break Things
@micheletitolo
Move Fast
And
Break Things
@micheletitolo
Move Fast
With
Stable Infra
@micheletitolo
Developers Like
Shipping
@micheletitolo
“It Works On My
Machine”
@micheletitolo
Codesigning 🙀
@micheletitolo
Fastlane 👍
@micheletitolo
Easy Releases ➡
Frequent Releases
@micheletitolo
Same For
Microservices
@micheletitolo
…If Not More
@micheletitolo
Automation ➡
Scaling
@micheletitolo
Software Moves Fast
@micheletitolo
To Summarize
@micheletitolo
Making iOS Apps
Requires Specialized
Knowledge
@micheletitolo
Rooted In
Fundamental Concepts
@micheletitolo
Different Tools
@micheletitolo
You Know More
Than You Think 🎉
Thank You
@micheletitolo
hi@michele.io
@micheletitolo
• https://unsplash.com/photos/
VHO2dTXrOZI
• https://unsplash.com/photos/
jEqyV_rumuU
• https://unsplash.com/photos/iDkiP2GXlR8
• https://unsplash.com/photos/AFp6M-Cj0Kk
• https://unsplash.com/photos/iMmlx_fCeWc
• https://unsplash.com/photos/frrdcxOf55I
• https://unsplash.com/photos/
MihdAxwamXA
Photo Credits

Más contenido relacionado

Similar a From iOS to Distributed Systems

Come realizzare siti mobile - Buginar 29 Maggio 2011
Come realizzare siti mobile - Buginar 29 Maggio 2011Come realizzare siti mobile - Buginar 29 Maggio 2011
Come realizzare siti mobile - Buginar 29 Maggio 2011Rocco Passaro
 
La rivoluzione dei Microservizi
La rivoluzione dei MicroserviziLa rivoluzione dei Microservizi
La rivoluzione dei MicroserviziitalianaSoftware
 
Patrizia Rotilio - Ravenna Future Lessons 2015
Patrizia Rotilio - Ravenna Future Lessons 2015Patrizia Rotilio - Ravenna Future Lessons 2015
Patrizia Rotilio - Ravenna Future Lessons 2015Ravenna Future Lessons
 
TheVisualAgency - Presentazione d'agenzia
TheVisualAgency - Presentazione d'agenziaTheVisualAgency - Presentazione d'agenzia
TheVisualAgency - Presentazione d'agenziaPaolo Guadagni
 
Breve viaggio tra le App per SMAU Bologna 2011
Breve viaggio tra le App per SMAU Bologna 2011Breve viaggio tra le App per SMAU Bologna 2011
Breve viaggio tra le App per SMAU Bologna 2011Matteo Ranzi
 
20090506 Fabio Rizzoto IDC
20090506 Fabio Rizzoto IDC20090506 Fabio Rizzoto IDC
20090506 Fabio Rizzoto IDCassibo
 

Similar a From iOS to Distributed Systems (7)

Come realizzare siti mobile - Buginar 29 Maggio 2011
Come realizzare siti mobile - Buginar 29 Maggio 2011Come realizzare siti mobile - Buginar 29 Maggio 2011
Come realizzare siti mobile - Buginar 29 Maggio 2011
 
La rivoluzione dei Microservizi
La rivoluzione dei MicroserviziLa rivoluzione dei Microservizi
La rivoluzione dei Microservizi
 
Patrizia Rotilio - Ravenna Future Lessons 2015
Patrizia Rotilio - Ravenna Future Lessons 2015Patrizia Rotilio - Ravenna Future Lessons 2015
Patrizia Rotilio - Ravenna Future Lessons 2015
 
TheVisualAgency - Presentazione d'agenzia
TheVisualAgency - Presentazione d'agenziaTheVisualAgency - Presentazione d'agenzia
TheVisualAgency - Presentazione d'agenzia
 
Le app
Le appLe app
Le app
 
Breve viaggio tra le App per SMAU Bologna 2011
Breve viaggio tra le App per SMAU Bologna 2011Breve viaggio tra le App per SMAU Bologna 2011
Breve viaggio tra le App per SMAU Bologna 2011
 
20090506 Fabio Rizzoto IDC
20090506 Fabio Rizzoto IDC20090506 Fabio Rizzoto IDC
20090506 Fabio Rizzoto IDC
 

Más de Michele Titolo

Writing Design Docs for Wide Audiences
Writing Design Docs for Wide AudiencesWriting Design Docs for Wide Audiences
Writing Design Docs for Wide AudiencesMichele Titolo
 
APIs: The Good, The Bad, The Ugly
APIs: The Good, The Bad, The UglyAPIs: The Good, The Bad, The Ugly
APIs: The Good, The Bad, The UglyMichele Titolo
 
Tackling the Big, Impossible Project
Tackling the Big, Impossible ProjectTackling the Big, Impossible Project
Tackling the Big, Impossible ProjectMichele Titolo
 
No Microservice is an Island
No Microservice is an IslandNo Microservice is an Island
No Microservice is an IslandMichele Titolo
 
More than po: Debugging in LLDB
More than po: Debugging in LLDBMore than po: Debugging in LLDB
More than po: Debugging in LLDBMichele Titolo
 
APIs for the Mobile World
APIs for the Mobile WorldAPIs for the Mobile World
APIs for the Mobile WorldMichele Titolo
 
Swift Generics in Theory and Practice
Swift Generics in Theory and PracticeSwift Generics in Theory and Practice
Swift Generics in Theory and PracticeMichele Titolo
 
Protocols promised-land-2
Protocols promised-land-2Protocols promised-land-2
Protocols promised-land-2Michele Titolo
 
Making friendly-microservices
Making friendly-microservicesMaking friendly-microservices
Making friendly-microservicesMichele Titolo
 
More Than po: Debugging in LLDB @ CocoaConf SJ 2015
More Than po: Debugging in LLDB @ CocoaConf SJ 2015More Than po: Debugging in LLDB @ CocoaConf SJ 2015
More Than po: Debugging in LLDB @ CocoaConf SJ 2015Michele Titolo
 
More than `po`: Debugging in lldb
More than `po`: Debugging in lldbMore than `po`: Debugging in lldb
More than `po`: Debugging in lldbMichele Titolo
 
Can't Handle My Scale v2
Can't Handle My Scale v2Can't Handle My Scale v2
Can't Handle My Scale v2Michele Titolo
 
Cocoa Design Patterns in Swift
Cocoa Design Patterns in SwiftCocoa Design Patterns in Swift
Cocoa Design Patterns in SwiftMichele Titolo
 
Mastering the Project File (AltConf)
Mastering the Project File (AltConf)Mastering the Project File (AltConf)
Mastering the Project File (AltConf)Michele Titolo
 
APIs: The good, the bad, the ugly
APIs: The good, the bad, the uglyAPIs: The good, the bad, the ugly
APIs: The good, the bad, the uglyMichele Titolo
 

Más de Michele Titolo (20)

Writing Design Docs for Wide Audiences
Writing Design Docs for Wide AudiencesWriting Design Docs for Wide Audiences
Writing Design Docs for Wide Audiences
 
APIs: The Good, The Bad, The Ugly
APIs: The Good, The Bad, The UglyAPIs: The Good, The Bad, The Ugly
APIs: The Good, The Bad, The Ugly
 
Tackling the Big, Impossible Project
Tackling the Big, Impossible ProjectTackling the Big, Impossible Project
Tackling the Big, Impossible Project
 
No Microservice is an Island
No Microservice is an IslandNo Microservice is an Island
No Microservice is an Island
 
More than po: Debugging in LLDB
More than po: Debugging in LLDBMore than po: Debugging in LLDB
More than po: Debugging in LLDB
 
APIs for the Mobile World
APIs for the Mobile WorldAPIs for the Mobile World
APIs for the Mobile World
 
Swift Generics in Theory and Practice
Swift Generics in Theory and PracticeSwift Generics in Theory and Practice
Swift Generics in Theory and Practice
 
Protocols promised-land-2
Protocols promised-land-2Protocols promised-land-2
Protocols promised-land-2
 
Multitasking
MultitaskingMultitasking
Multitasking
 
Making friendly-microservices
Making friendly-microservicesMaking friendly-microservices
Making friendly-microservices
 
More Than po: Debugging in LLDB @ CocoaConf SJ 2015
More Than po: Debugging in LLDB @ CocoaConf SJ 2015More Than po: Debugging in LLDB @ CocoaConf SJ 2015
More Than po: Debugging in LLDB @ CocoaConf SJ 2015
 
The Worst Code
The Worst CodeThe Worst Code
The Worst Code
 
More than `po`: Debugging in lldb
More than `po`: Debugging in lldbMore than `po`: Debugging in lldb
More than `po`: Debugging in lldb
 
Can't Handle My Scale v2
Can't Handle My Scale v2Can't Handle My Scale v2
Can't Handle My Scale v2
 
Can't Handle My Scale
Can't Handle My ScaleCan't Handle My Scale
Can't Handle My Scale
 
Cocoa Design Patterns in Swift
Cocoa Design Patterns in SwiftCocoa Design Patterns in Swift
Cocoa Design Patterns in Swift
 
Mastering the Project File (AltConf)
Mastering the Project File (AltConf)Mastering the Project File (AltConf)
Mastering the Project File (AltConf)
 
APIs: The Ugly
APIs: The UglyAPIs: The Ugly
APIs: The Ugly
 
That's Not My Code!
That's Not My Code!That's Not My Code!
That's Not My Code!
 
APIs: The good, the bad, the ugly
APIs: The good, the bad, the uglyAPIs: The good, the bad, the ugly
APIs: The good, the bad, the ugly
 

From iOS to Distributed Systems