important • Dealing with bad tooling, architecture or boilerplate • Creates a disconnect between our work and the end result • Makes us inefﬁcient, creates roadblocks in our way • Makes it easy for us to make simple mistakes
into many frameworks • + Improves modular architecture design • Each framework has its own test suite that can run fast • Enables use of playgrounds or small projects • - Longer launch times due to dylib loading • Leverage cocoapods-static plugin or direct static frameworks • - Might be complicated to do in existing projects
/ Codable • - Lack of control over the generated implementation • Not supportive of non-default cases • - Not a generic solution for Boilerplate maintenace, solves only a small subset of common algorithms
works like a pre-processor • Used in over 30 000 apps • Adds annotation support to Swift language • Allows ﬁne-grained control over the generation • Sourcery can generate any boilerplate code if you can describe the algorithm once
Swift and Objective-C • FileWatcher.Local useful for observing local ﬁle changes e.g. observe ﬁle on the developer desktop. • FileWatcher.Remote can be used to observe ﬁles on the web, both Etag headers and Last-Modified-Date are supported.
• Always save your data at Data Provider level to ﬁle • if the user decides to send a bug report, send those ﬁles to the cloud • You can use ﬁle watcher provider to load it on another device and re-execute almost all code paths you have • Need more power? leverage unidirectional architecture/view state to implement time travel
core goals of architecture design • Investing time into improving your team developer experience can yield huge efﬁciency wins for your business and save the sanity of your developers • If a mythical 10x developer exists it would be the person that makes 10 team members more efﬁcient