“It doesn’t make sense to hire smart people and then tell them what to do. We hire smart people so they can tell us what to do. “ — Steve Jobs

Time to start working, and if you’re like me, your main responsibility might be writing scalable code along with a good suit of unit tests. If you’re lucky, you may even ship something to production without bugs. Life isn’t so bad, right?

What if I told you it could be better? As a software engineer, we can contribute much more to the solution we are developing to achieve a…

Photo by Hannah Busing on Unsplash


When I’ve been promoted to a leadership position, one of my greatest challenges was the management of other developers on career progression. I wasn’t sure what was the best way to encourage people to improve themselves, because if I push too hard they may feel I’m a jerk boss and feel unmotivated, but on the other side, I couldn’t be too soft, or else I wouldn’t be doing my job correctly.

The main difficulty is that this hasn’t a straightforward solution, far from programming problems I was used to. …



So far we have created a reliable source of data for our app, and we now we will work towards creating a communication between data and view.

Application architecture basics

The MVC architecture proposed by Apple official documentation is the most intuitive for new developers. …



When I was elaborating the scope for this app, I didn’t want the main data source to be a simple API call, but something a bit more complex, that depends on an integration of two data sources. This way the test would be more complex and it would require more planning and study.

In this case the final data displayed to the user depends on user location provided by the iOS SDK…



In this part, we will continue the implementation of UserLocationService class, which has the responsibility of obtaining and transmitting the user location.

The ReactiveX API will be used for this transmission, allowing us to exercise reactive skills and also write more readable tests.

Basic ReactiveX

I’d like first to give a (really) simple introduction to this great library, so you can understand what the code will do in this article and its main concepts.



We will use Continuous Integration (CI) in our project to check the quality of our application automatically by each commit we push to the repository. CI could also be used to automate the build and deploy of the application to App Store but this won’t be covered here.

You can always check the Github repository for reference.

Travis CI

Travis will be responsible initially for cloning the latest repository commit, installing its dependencies and…


Location data source

As mentioned in the first part, the app will rely on user location to display its nearby interesting places. Unfortunately, the iOS native location API isn’t simple as I would want, so I’ve decided to wrap this logic into another class called UserLocationService.

Dependency management

Since the main goal is to achieve high testability with our code, the dependency of the wrapper class (the CLLocationManager provided by iOS SDK) won’t be instantiated by the…



In this article I want to show how to build a scalable iOS application by using concepts like continuous integration and state management. We will also aim for a good object-oriented design to make sure the code can be tested properly.

The app will make use of user location and show the nearby places of interests using the Foursquare API.

This won’t be a detailed step by step tutorial because I will…

In the current software development ecosystem, it's not surprising that Model-View-Controller (MVC) architecture doesn’t have a great reputation. Common alternatives have been gaining popularity, such as Model-View-Presenter (MVP) and Model-View-ViewModel (MVVM).

As a mobile developer, I tried the MVP architecture. And in fact, I had a better experience because of the separation of concerns and improved testability provided by this architecture. But it doesn't propose a pattern for data flow (like Flux or Redux), and I felt somehow dissatisfied by this. I wondered if there’s a way to minimize the bugs and provide a better developer experience.

Model-View-Intent (MVI)

The first concept…

In my previous article, I have shown a simple way to unit test the presenter of the MVP architecture, ensuring either the data returning from the API or an error object will be passed to the view. Now I want to add more value to that tests, showing how to validate that same API response data using Java annotations and reflection.

If you want to check the entire code, it’s at this github repository.

Mobile development and API instability

As a native mobile developer it is very important to keep your app safe when integrating an external API. The main reasons for this are:

  • The…

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store