When a company grows a challenge emerges: to scale teams while allowing them to work independently from each other. Although teams can have autonomy and control over parts of the system, value is often delivered when multiple teams cooperate to accomplish a goal. Let's frame this problem from a user perspective, after all that’s the goal of any system: to deliver value to the end user.

How do we architect a system that puts the user first?

Who are the users?

That’s the very first question to ask yourself if you are a software engineer. I know it may sound strange to many, especially…


Test Driven Development is a controversial topic among software engineers and it is not rare to find very strong opinions in favour and against it. I am on the side of the ones in favour of it for the majority of the cases. This article is not focused on advocating in favour of TDD though, it is meant to explain how to properly implement this methodology to build an Android application.

Android or more specifically the Android SDK will be just an example, if the reader decides to replace it for Angular, React, iOS SDK or even Spring or Django…


Since Google introduced Android Architecture Components and finally became more opinionated about software architecture, some people started referring to it as modern android development. Although those libraries were important to the Android community, specially for newcomers to the Android world, they also created an abstraction on top of the Android SDK.

I've been working with Android development for nearly 9 years and I am often surprised for the lack of understanding Android developers have about the Android SDK. When interviewing I am always focused on the basics, not only regarding Android development, but also software engineering practices and software architecture…


It is hard to talk about dependency injection without mentioning Dagger. Dagger is becoming more and more popular among Android developers, but let's take a step back and discuss the definition of dependency injection:

Dependency injection is a technique whereby one object supplies the dependencies of another object.

The simplest way to accomplish that is by injecting all the dependencies of an object by its constructor:

class Car(private val engine: Engine) {

fun start() {
engine.turnOn()
}

fun stop() {
engine.turnOff()
}

fun isStarted() = engine.isTurnedOn()
}

By doing that we've delegated the instantiation of the Engine object to another…


State management is probably one of the most complicated challenges in Android development. The reasons behind the complexity of state management are tightly associated with Android architecture and in order to come up with a solution, some fundamental Android design decisions need to be understood.

Presentation Centric

Since the first documentation I read in Android Developers website back in 2011, the examples were always focused in the Activity. The Activity is described as the fundamental starting point of every Android application. …


Testing an Android application was always hard. In the past couple of years, we got access to better tools, but we still rely a lot on architecture and design decisions in order to properly test an Android application. This article will discuss the layers of automated testing an Android application should have, from End-to-end, Component to Unit tests.

Arrange, Act and Assert!

Automated testing can be summarized into three steps. Arrange: the step where we elaborate on the test. Act: when the code under test is exercised. And finally Assert: where the result or behavior of the code is verified.

Dependency Injection is a…


TLDR: A big challenge we aim to solve with AppCoins and the App Economy is to allow users to earn coins by paying attention to apps for a certain amount of time. This is also referred to as Proof-of-Attention (PoA). A big part of creating such a proof involves the smartphone environment and considering the majority of smartphones in the market run Android we have decided to focus in this platform.

Our Goals

AppCoins cryptocurrency is going to be developed using blockchain technology (which will bring reliability and transparency to the App Economy) but we still have to deal with challenges associated…

Marcelo Benites

Software engineer passionate about clean code and good beer.

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