by veskoiliev | Jun 10, 2018 | Android, Development
This is Part 2 of a short series about optimising your build speeds. If you haven’t already, please check out Part 1, which describes the different build caches you can use.
In this post, I’ll explain some other build properties you can tweak. Let’s start with the Gradle ones.
read more
by veskoiliev | May 30, 2018 | Android, Development
One of my last tasks @ASOS was to investigate the slow build speeds of the Android application. This post is part of a short series about how we approached the problem, what we tried and what we found out. To be clear, don’t expect miracles and ? here, but you’ll get a better understanding of what you can do to optimise your builds.
read more
by veskoiliev | Mar 30, 2018 | Android, Development
Ideally automated tests should be predictable, isolated and precise, allowing you to find an issue quickly. If these conditions are met, you’ll never have to change a test unless to accommodate a changed requirement. This sounds great on paper, but in practice we often forget the isolated bit and start testing multiple things in a single test. If abused, we’ll end up with tests that need updating all the time, causing developer frustration and wasting time.
One tool that can help with isolation of tests is using matchers. As the name suggests, matchers allow you to match an object agains certain conditions.
read more
by veskoiliev | Feb 4, 2018 | Development
Many Jenkins plugins require changes to the default Content Security Policy (or CSP) to work correctly. A refresher on what CSP is and why you should care about it can be found HERE and HERE. If you use a hosted Jenkins installation, you’ll probably need to contact your service provider to do the necessary changes for you. However if you have a self-managed installation, please read on.
read more
by veskoiliev | Aug 3, 2017 | Android, Development
With the exponentially increasing usage of Kotlin
these days, many developers face the issue of how to test the newly created Kotlin classes. As we know all classes and methods are final
be default in Kotlin, unless specifically open
-ed. Unfortunately Mockito
, one of the most popular mocking libraries for Java projects, can’t easily mock final
classes. Since we don’t want to open
up everything just for testing purposes, we need another solution.
Hadi Hariri highlighted in his excellent blog post that Mockito version 2.1.0
and above can perform the magic of mocking final
classes. Since mocking is something used only in tests … and usually it just works, we’ve neglected Mockito and were still using a very outdated version (1.10.19) in our project. There were a few pain-points while updating to the latest one, so hopefully this post will save you some time when going through the same process.
read more
by veskoiliev | Jan 18, 2017 | Android, Development
1. Observable creation and error handling
Consider the following example:
public Observable<Book> getFavoriteBook(User user) {
return Observable.just(user.getFavoriteBookId())
.flatMap(bookId -> bookService.getById(bookId))
.onErrorReturn(throwable -> DEFAULT_FAVORITE_BOOK);
}
Focus on the error handling part. In my experience in 95% of the cases the expectation behind the statement .onErrorReturn(...);
is to ensure that the method getFavoriteBook()
is “safe”, e.g. that an exception cannot be thrown from it at all, as if it was surrounded by a giant try-catch.
read more
by veskoiliev | Sep 7, 2016 | Android, Development
Note: This post is based on the widely used Retrofit2 networking library. Although the examples use a Gson
converter, the same concept can be used with most of the other supported ones as well.
Imagine you’re in a situation where your backend can return a JSON
response that’s dynamic in nature, a.k.a some parts of it don’t adhere to a specific pre-defined schema. Say you retrieve information about a webpage that you need to open in a WebView
. You need to support both GET
and POST
HTTP requests, so two valid responses are:
read more
by veskoiliev | Jul 28, 2016 | Android, Development
Unit tests
Here’s a few handy commands if you want to run only a specific unit test(s). Suppose we have the following unit tests in the project:

./gradlew test
– run unit tests for all variants
./gradlew testDebug
– run tests for Debug variant
./gradlew testDebug --tests="*.helpers.*"
– run all tests in the helpers
package
./gradlew testDebug --tests="*.HelperTest"
– run all tests in HelperTest.java
class
./gradlew testDebug --tests="*.getHelp"
– run only the getHelp
test method.
read more
by veskoiliev | Jul 4, 2016 | Running Challenge
Today I took up a 60 day running challenge. It’s super simple – I need to run 60 consecutive days to succeed. I took up the challenge mainly for 2 reasons:
- To give myself a lesson in persistence, which I truly believe is the most important factor to success in any field or undertaking.
- Health benefits – I don’t expect to become a model, but should see some (minor) weight loss and boost in my overall energy levels and endurance.
- Fun – experienced runners say running can be fun. Currently I don’t see how this can be true, but let’s put it to the test.
Well today I did get to Primrose Hill and backwards, so let’s say run 00 to be completed.

by veskoiliev | Feb 21, 2016 | Android, Development
This post will list some of my favourite features of a Proxy tool that are used on a daily bases in my team. It’s about giving you the overview of how such a tool will help you be more efficient in your day-to-day development process. It won’t get into details of how to setup a proxy, how to use these features or which specific tool to use – this will be covered in a future post.
Let’s get to it!
read more