tl;dr I hate xcode 8.
From mid December last (2016) year until late March this year (2017), me and my peers at the office migrated* our app, SeriousMD, a clinic management software! It was fun, annoying, frustrating, sating (nakaka-umay), and most of all fulfilling.
hmm, this doesn't look like a good intro...
Anyways! Along the way me and my peers learned a lot from the experience. Both iOS-dev related and software-engineering related!
So without further ado...
Because xcode 8? Swift 3?
No no, for the past year we've been adding new features to the app, to the point that we're hosting the whole code in just one (yes, one)
That means when we just change a couple of lines of code in one file, the whole project gets recompiled. And that recompilation takes around 10 to 20 minutes on my top of the line MacBook Pro 15".
Furthermore, the Swift 2.3 compiler is also notoriously slow at compiling source code (because type inferencing) and is prone to emitting wrong llvm byte-code.
Thank the heavens Apple kinda fixed it with Swift 3 but its still slow compared to compiling c++/obj-c code.
Lastly, our business goals requires us to be more agile in our development and having a single monolithic code-base won't do us any good with rapidly adding, improving, and testing feature sets for the app.
Adding new features or improving existing on the previous codebase is like walking on a mine field. You'll never know if you're going to affect this other feature or not and some parts of the code are duplicated so when fixing those kinds of code, we might or might not fix the other feature with the same exact code. And the previous code base has a high level of inter-class coupling, in which if you studied software engineering is not desired.
Now on the meaty part
This blog post will (I hope) divided into three parts, a blog post will be dedicated on how we separated the app into "modules", another blog post is dedicated on how we used the reactive programming library RxSwift, and the last blog post will be conclusions/other stuff?
~ So yeah, I hope I can post a new blog in a week or two!
*: We recreated the app from scratch.