Pedro Gómez

First Karumi Architecture Open Training

The first edition of our architecture open training has come to an end! Two awesome weekends coding with great Android and iOS engineers. We'd like to thank every attendant for their compromise and effort during the four sessions our training took.


Software design patterns, architecture, and principles should be part of every developer toolbox and that is what we reviewed during the 16 hours of training:

  • Software design paradigms (OOP & FP).
  • Coupling vs Cohesion.
  • Single responsibility principle.
  • Open close principle.
  • Liskov substitution principle.
  • Interface segregation principle.
  • Dependency inversion principle.
  • Software design patterns for mobile.
  • User interface patterns: MVP vs MVVM vs MVC.
  • Clean architecture.
  • Unit testing.

We started the first session reviewing object oriented programing and functional programming as paradigms. Then we moved to the difference between coupling and cohesion. Once the basics were perfectly clear, we started talking about the SOLID principles and software design patterns we can use as mobile developers.


Last but not least, we went deep into all the details related to clean architecture for Android & iOS based on different patterns already reviewed. After an introduction to the core concept, we started coding our own application based on the usage of the following elements in our architecture:

  • Usage of a dependency injector or hand made dependency injection based on creational patterns.
  • Implementation of UI patterns such as MVP or MVVM.
  • Implementation of use cases needed for our app based on the command pattern.
  • Implementation of a rich domain where our business rules can be easily represented.
  • Implementation of the infrastructure code needed to retrieve data from a real API based on the repository pattern.
  • Implementation of a remote data source adapting the usage of a third party library to retrieve data from a remote service.
  • Implementation of unit tests to cover our business layer.
  • Implementation of user interface tests using test doubles and based on the dependency injector.


It's important to remember that most of the course was practical. During the whole training, our attendants were coding exercises related to patterns, SOLID principles and a complete app based on Clean Architecture. Of course, all of this while covering their code using unit tests and linking new concepts with the concepts explained previously!

Thanks everyone for your time and effort! See you in our next mobile testing open training.

If you are interested in performing a training in your company or to be part of our open trainings, all the information can be found in our web site.

Pedro Gómez

I'm a software engineer focused on new technologies, open source, clean code, and testing. Right now I'm working as a Senior Software Engineer at Karumi, a little software development studio.

Subscribe to Karumi Blog

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!