Slide 1

Slide 1 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! Controlling complexity for large iOS projects Petro Korienev, iOS Engineer @ Techery

Slide 2

Slide 2 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! • Sporadic crashes • Intermittent issues • Hardly debuggable code PROBLEMS WHILE SCALING

Slide 3

Slide 3 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! • Result of deadlines pressure • Result of miscommunication • Result of laziness Growing number of dependencies and borrowed code

Slide 4

Slide 4 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! pod install…

Slide 5

Slide 5 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! • Complexity growth with time SO,

Slide 6

Slide 6 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! • Control decreases over time • Consequence of growing complexity • Maintainer change • Software is not an IP carrier, author is

Slide 7

Slide 7 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! FEW SLOC FACTS

Slide 8

Slide 8 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! CLOC ON MY CURRENT PROJECT

Slide 9

Slide 9 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! CLOC ON ITS PODS FOLDER

Slide 10

Slide 10 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! Few more numbers • Currently 11 iOS developers • 3 full-stack feature teams • 6 backend services + different environments • Analytics, perf monitoring, etc

Slide 11

Slide 11 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! Backend collaboration architecture

Slide 12

Slide 12 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! Backend collaboration architecture

Slide 13

Slide 13 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! Backend collaboration architecture

Slide 14

Slide 14 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! Monolithic vs Microservice

Slide 15

Slide 15 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! What to do

Slide 16

Slide 16 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! Here comes TRUST

Slide 17

Slide 17 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! • Trust in community and time-proven solutions • Trust in self TRUST

Slide 18

Slide 18 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! • AFNetworking 2.5.1-2.5.2 • OpenSSL heartbleed • Numerous zero-day exploits • Just bugs TRUST IN COMMUNITY

Slide 19

Slide 19 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! • “I’ve seen stuff like this before” • “This is pretty straightforward” • “If i’d do stuff like this, i’d do this way” TRUST IN SELF

Slide 20

Slide 20 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine !

Slide 21

Slide 21 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! • Bugs • Exploits • Limitations • Tech debt Consequences

Slide 22

Slide 22 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! Prefer control over trust CAPTAIN’S VOICE:

Slide 23

Slide 23 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! SOLUTIONS 1. Blackboxing 2. Whiteboxing 3. Grayboxing

Slide 24

Slide 24 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! BLACKBOXING - DON’T CARE OF IT • Simple • Unreliable • Tends to consume time when scaling

Slide 25

Slide 25 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! DON’T CARE OF IT

Slide 26

Slide 26 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! WHITEBOXING

Slide 27

Slide 27 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! WHITEBOXING • Very time-consuming • Reliable after certain effort put • Extremely difficult with closed- source

Slide 28

Slide 28 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! GRAYBOXING • Good tradeoff between white- and blackboxing • Flexible • Applicable almost everywhere • Dynamic

Slide 29

Slide 29 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! GRAYBOXING • Idea is to find a right place and inject something validating the correctness of contract • Unlike unit tests, verifies dynamic, run-time behaviour

Slide 30

Slide 30 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! EXAMPLE • https://github.com/soxjke/ WatchDogs

Slide 31

Slide 31 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! PROBLEM • Inconsistency and mess within CoreData across the project • Fake certainty in thread- access

Slide 32

Slide 32 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! SOLUTION AND DEMO

Slide 33

Slide 33 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! STEPS • Define problem places • Define ways to inject • Define ways to control

Slide 34

Slide 34 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! Define problem places • NSManagedObjectContext save • NSManagedObject getter/setter • Everything should run in context queue

Slide 35

Slide 35 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! Define ways to inject • swizzle save • swizzle setter/getter?

Slide 36

Slide 36 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! Define ways to inject • swizzle resolveInstanceMethod • use seamless swizzling

Slide 37

Slide 37 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! Define ways to control • swizzle NSManagedObjectContext init • dispatch_set_specific

Slide 38

Slide 38 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! THANK YOU FOR YOUR ATTENTION! Q&A TIME

Slide 39

Slide 39 text

! #cocoaheadsukraine 29/Jun/2016 @ Sigma Software, Kharkiv, Ukraine ! YOU CAN FIND ME: • https://github.com/soxjke • http://stackoverflow.com/users/ 2392973/petro-korienev • https://www.facebook.com/soxjke • https://twitter.com/soxjke