Picture this: you're just dying to play a car racing game. After a quick scroll through the App Store you find the perfect one. It has cool graphics and some sweet retro cars to race. And it's even free! You're pumped, hit download and wait. Finally, you launch the game…
Imagine you’ve just implemented a nice feature. Cleanly separated UI from business logic, added some unit tests, etc. Surely, code review would be a formality. Instead, this insufferable Senior Dev requested that you wrap one of the services with abstraction. Surely, you’ve read somewhere that you should operate on abstractions…
We absolutely must meet this deadline! Can you please do some overtime?Honestly, how many times did you hear that question throughout your career? What was your answer? If you said “no” did the business add any sweeteners?Only you can do it! You're my hero, the best developer I’ve ever met!…
How much is it going to cost me to implement these Unit Tests?Is this refactor really necessary? Money doesn’t grow on the trees, you know… As mobile devs we’ve heard similar questions more times than we care to remember. Whenever we brooch the subject of improving the quality of our…
The benefits of having an exhaustive automated tests suite are obvious to anyone who ever worked on an app for more than a few months. We’ve all seen what lack of code maintenance might do: duplication, hidden side effects, convoluted business logic. A project codebase is like a garden -…
Let’s pick up where we left off! So far in part 1 we’ve discussed how to make a universal and robust networking client. Now, let’s take a look at how we can make it even better. Arguably, the most important feature of any universal tool is extendibility. We cannot account…
What’s the first service you usually implement in an app? It’s either networking or storage, right? And when it comes to networking, what are your choices? Most people either operate on URLSession directly, leveraging its multiple APIs, or add a 3rd party library like Alamofire. But there is also a…
If you've been a software developer for a while, you've likely heard about the Keep it Simple, Stupid (KISS) design principle. It suggests that our systems should be implemented in the simplest way possible across all application layers: persistence, services, business logic, and the UI. For all non-user facing app…
Picture this: You're finishing up an iOS app, and there's only one feature left to implement - the analytics. The client's marketing team has chosen a reputable framework that should be straightforward to integrate. They've even supplied a document detailing which user actions require tracking. It could take a day…