[MonkeyUser: The Struggle](https://www.monkeyuser.com/2018/the-struggle/)

How Much QA Is Too Much QA

It’s a common age-old adage, the ongoing war between Software Engineer and QA Engineer, the eternal struggle between the bright-eyed, and those tasked with enforcing practical reality. I mean not to demonise either party here, this is exactly the picture that can be seen if both are performing their roles adequately. It is very important to understand, at least from a Software Engineering perspective, that QA Engineers, not out to make your life difficult, and often will be happy to help you work out the kinks… mostly. ...

July 19, 2021 · 7 min · Ash Davies
Photo by [William Daigneault](https://unsplash.com/@williamdaigneault) on [Unsplash](https://unsplash.com/photos/oWrZoAVOBS0)

A Short History of Android and Reactive Programming: Coroutines Edition

Preface Last year, there was a hot topic on Twitter about how relevant RxJava was with modern Android development, which garnered a pretty interesting debate with some convincing arguments from both sides. The claim was that given the popularity of modern frameworks, RxJava is too bloated and should be removed. The debate was even given a catchy title, which prompted a panel discussion at Droidcon Berlin last year, with Hasan, Ivan, x, and myself. ...

June 3, 2019 · 12 min · Ash Davies
Photo by [Goh Rhy Yan](https://unsplash.com/@gohrhyyan) on [Unsplash](https://unsplash.com/photos/FFgcWvplwsc)

The Dangers of Language Abuse

Much of our responsibility as software engineers is based upon problem-solving, we are required to use our knowledge of available tools, and our experience, to find the most appropriate solution to a given problem. That’s what I’d like to focus on here, on finding the most appropriate solution. More often than not, the solution to a problem can be quite simple and doesn’t require over-engineering, which is perhaps where the age-old KISS and YAGNI principles come from. ...

March 9, 2019 · 4 min · Ash Davies
Photo by [Elena Mozhvilo](https://unsplash.com/@miracleday/) on [Pexels](https://unsplash.com/photos/ArLds1dWvuw)

Leveraging Android Data Binding With Kotlin

Android Data Binding is a support library that allows us to bind UI components to data sources declaratively rather than programmatically, it’s potentially really powerful and complex, but used effectively it can really cut down on presentation boilerplate. We started off with Data Binding beta in 2015 when Google announced it after Google IO as a support library that can be used right back down to Android 2.1 which is API version 7, to write declarative layouts and minimise the glue code required to use your application logic in layouts. ...

November 12, 2018 · 17 min · Ash Davies

Embracing Impostor Syndrome

Early on in my career, you could say I had what you might like to call a mentor, we were friends, we still are, and naturally he taught me a few things. Things like how to be taken seriously in the workplace as a young developer, how to deal with office politics, but also something quite significant, which has stuck with me since then. Something that I’ve always believed to be his mantra, to, as he would put it, “fucking own it”. ...

July 21, 2017 · 3 min · Ash Davies
Photo by [Digital Buggu](https://www.pexels.com/@digitalbuggu) on [Pexels](https://www.pexels.com/photo/colorful-toothed-wheels-171198/)

Dagger 2: Module Parameters

Last month, I went into detail about how to use the recently released Dagger 2 Android modules, and how you can make your injection code much more concise. Google have gone through a lot of effort to enable developers to use Dagger with very little integration and more importantly on how to use a common injection paradigm without the injection target being concerned with how it is being provided with it’s necessary dependencies. ...

June 19, 2017 · 3 min · Ash Davies
Photo by [Alog Sharma](https://www.pexels.com/@aloksharma/) on [Pexels](https://www.pexels.com/photo/black-android-smartphone-177707/)

Dagger 2: Android Modules

Many of the articles I write tend to involve application structure or architectural design patterns; and one of the most recurring topics I tend to visit is that of dependency injection. Dependency injection is probably one of the most important topics of modern application development, whilst often overlooked as a necessity, it allows us to build highly scalable, powerful applications and platforms. Dependency inversion works seamlessly with many other design principles and in many ways facilitates them, most specifically single responsibility. Effective dependency injection is achieved by providing dependencies through the constructor, usually as interface types, thereby allowing the class in focus to not worry about the instantiation of these types. I’ve gone into further detail about this in my previous article Effective Dependency Injection. ...

May 1, 2017 · 5 min · Ash Davies
Photo by [Tim Gouw](https://www.pexels.com/@punttim/) on [Pexels](https://www.pexels.com/photo/man-in-white-shirt-using-macbook-pro-52608/)

Effective Naming Conventions

Modern day development can be one of the most tasking professions around, but without a doubt also one of the most rewarding. Amongst the trialling tasks we must go through each day, one of the most arguably difficult necessities is how we name our types. This is partly due to the different naming conventions that come into play when using multiple words, underscores, hyphen, camel-case. Though we usually have code style guidelines to enforce a consistent use, this doesn’t really address the original problem. ...

April 30, 2017 · 3 min · Ash Davies
Photo by [Daniel Frank](https://www.pexels.com/@fr3nks/) on [Pexels](https://www.pexels.com/photo/empty-cave-287229/)

Effective Dependency Injection Scoping

The concept of dependency injection is a relatively simple one, and can usually be adhered to with a small set of rules when writing your code. Specifically, avoid creating new instances of objects within your classes, and opt to have the instance provided through the class constructor. This allows your class to focus on the key operations without having to worry about the state or creation of it’s dependencies. This means that your class will be small, concise, readable, and most importantly, easily maintainable since it only contains the logic required to perform the necessary operation. ...

April 10, 2017 · 8 min · Ash Davies