{"id":1116,"date":"2015-11-02T15:56:19","date_gmt":"2015-11-02T15:56:19","guid":{"rendered":"http:\/\/lousodrome.net\/blog\/light\/?p=1116"},"modified":"2015-11-02T15:56:19","modified_gmt":"2015-11-02T15:56:19","slug":"facebooks-ios-infrastructure","status":"publish","type":"post","link":"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/","title":{"rendered":"Facebook&#8217;s iOS Infrastructure"},"content":{"rendered":"<p>In this talk from <a href=\"http:\/\/www.atscaleconference.com\/\">@Scale 2014<\/a>, <a href=\"https:\/\/twitter.com\/adamjernst\">Adam Ernst<\/a> and <a href=\"https:\/\/twitter.com\/ari_grant\">Ari Grant<\/a> present some of the problems met during the development of the native Facebook mobile application, and the solutions developed.<\/p>\n<p>The first part, starting at around 7&#8217;00, explains why the built-in data management library was ill-suited and how they designed a different system to better suit their needs. The second part, starting at around 24&#8217;30, shows how their implementation of MVC was becoming unmanageable and how they redesigned it. Interestingly enough, in both cases the solution was based on immutability.<\/p>\n<p><iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/XhXC4SKOGfQ\" width=\"500\" height=\"281\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this talk from @Scale 2014, Adam Ernst and Ari Grant present some of the problems met during the development of the native Facebook mobile application, and the solutions developed. The first part, starting at around 7&#8217;00, explains why the &hellip; <a href=\"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[24],"tags":[765,772,769,660,168,537,377,764,767,771,770,768,766,763,285,773],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Facebook&#039;s iOS Infrastructure &ndash; Light is beautiful<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Facebook&#039;s iOS Infrastructure &ndash; Light is beautiful\" \/>\n<meta property=\"og:description\" content=\"In this talk from @Scale 2014, Adam Ernst and Ari Grant present some of the problems met during the development of the native Facebook mobile application, and the solutions developed. The first part, starting at around 7&#8217;00, explains why the &hellip; Continue reading &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/\" \/>\n<meta property=\"og:site_name\" content=\"Light is beautiful\" \/>\n<meta property=\"article:published_time\" content=\"2015-11-02T15:56:19+00:00\" \/>\n<meta name=\"author\" content=\"Julien Guertault\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Zavie\" \/>\n<meta name=\"twitter:site\" content=\"@Zavie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Julien Guertault\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/\"},\"author\":{\"name\":\"Julien Guertault\",\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f\"},\"headline\":\"Facebook&#8217;s iOS Infrastructure\",\"datePublished\":\"2015-11-02T15:56:19+00:00\",\"dateModified\":\"2015-11-02T15:56:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/\"},\"wordCount\":92,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f\"},\"keywords\":[\"@Scale\",\"ACID\",\"application\",\"architecture\",\"cache\",\"data\",\"design\",\"Facebook\",\"immutable\",\"iOS\",\"mobile\",\"model view controller\",\"mutable\",\"MVC\",\"performance\",\"state\"],\"articleSection\":[\"Design\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/\",\"url\":\"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/\",\"name\":\"Facebook's iOS Infrastructure &ndash; Light is beautiful\",\"isPartOf\":{\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/#website\"},\"datePublished\":\"2015-11-02T15:56:19+00:00\",\"dateModified\":\"2015-11-02T15:56:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/lousodrome.net\/blog\/light\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Facebook&#8217;s iOS Infrastructure\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/#website\",\"url\":\"http:\/\/lousodrome.net\/blog\/light\/\",\"name\":\"Light is beautiful\",\"description\":\"Thoughts of a graphics programmer, demoscener and spare time photographer\",\"publisher\":{\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/lousodrome.net\/blog\/light\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f\",\"name\":\"Julien Guertault\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2e5fc7a18e1701e1bb61a5da0ef35cf7?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2e5fc7a18e1701e1bb61a5da0ef35cf7?s=96&d=identicon&r=g\",\"caption\":\"Julien Guertault\"},\"logo\":{\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/lousodrome.net\/blog\/light\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Facebook's iOS Infrastructure &ndash; Light is beautiful","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/","og_locale":"en_US","og_type":"article","og_title":"Facebook's iOS Infrastructure &ndash; Light is beautiful","og_description":"In this talk from @Scale 2014, Adam Ernst and Ari Grant present some of the problems met during the development of the native Facebook mobile application, and the solutions developed. The first part, starting at around 7&#8217;00, explains why the &hellip; Continue reading &rarr;","og_url":"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/","og_site_name":"Light is beautiful","article_published_time":"2015-11-02T15:56:19+00:00","author":"Julien Guertault","twitter_card":"summary_large_image","twitter_creator":"@Zavie","twitter_site":"@Zavie","twitter_misc":{"Written by":"Julien Guertault"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/#article","isPartOf":{"@id":"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/"},"author":{"name":"Julien Guertault","@id":"http:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f"},"headline":"Facebook&#8217;s iOS Infrastructure","datePublished":"2015-11-02T15:56:19+00:00","dateModified":"2015-11-02T15:56:19+00:00","mainEntityOfPage":{"@id":"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/"},"wordCount":92,"commentCount":0,"publisher":{"@id":"http:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f"},"keywords":["@Scale","ACID","application","architecture","cache","data","design","Facebook","immutable","iOS","mobile","model view controller","mutable","MVC","performance","state"],"articleSection":["Design"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/","url":"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/","name":"Facebook's iOS Infrastructure &ndash; Light is beautiful","isPartOf":{"@id":"http:\/\/lousodrome.net\/blog\/light\/#website"},"datePublished":"2015-11-02T15:56:19+00:00","dateModified":"2015-11-02T15:56:19+00:00","breadcrumb":{"@id":"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/lousodrome.net\/blog\/light\/2015\/11\/02\/facebooks-ios-infrastructure\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/lousodrome.net\/blog\/light\/"},{"@type":"ListItem","position":2,"name":"Facebook&#8217;s iOS Infrastructure"}]},{"@type":"WebSite","@id":"http:\/\/lousodrome.net\/blog\/light\/#website","url":"http:\/\/lousodrome.net\/blog\/light\/","name":"Light is beautiful","description":"Thoughts of a graphics programmer, demoscener and spare time photographer","publisher":{"@id":"http:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/lousodrome.net\/blog\/light\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"http:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f","name":"Julien Guertault","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2e5fc7a18e1701e1bb61a5da0ef35cf7?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2e5fc7a18e1701e1bb61a5da0ef35cf7?s=96&d=identicon&r=g","caption":"Julien Guertault"},"logo":{"@id":"http:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/image\/"},"url":"https:\/\/lousodrome.net\/blog\/light\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/posts\/1116"}],"collection":[{"href":"https:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/comments?post=1116"}],"version-history":[{"count":0,"href":"https:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/posts\/1116\/revisions"}],"wp:attachment":[{"href":"https:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/media?parent=1116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/categories?post=1116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/tags?post=1116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}