Capital Intensive MVPs

According to Eric Reis, MVPs allow us to test our business’ most important “hypotheses.” This is supposed to help us “fail faster,” but I’m finding that there are real differences in how much effort we have to put into our MVPs before we can validate our business hypotheses. In other words, some MVPs are more capital intensive than others. This is a big deal because you often can’t get favorable investment terms until you’ve shown that you’ve got product-market fit. »

On Selling your Soul: Notes on Gregg Pollack's Founder's Talk

If you’re going to be successful, Richard, you need to learn to be an asshole. Erlich Bachman, Silicon Valley For those of you who don’t know, I was recently accepted into Starter Studio, an Orlando-based incubator to work on University Android, a codeacademy-like program for learning Android development. Every Monday night, Starter Studio brings in successful founders to talk about things they’ve learned along the way to success. I’ve decided that throughout my time at Starter Studio, I’d like to note two big “take aways” from each founder’s talk: one business-related and one personal. »

Unit Testable RecyclerViews

When building our Android apps, we can often wind up with a decent amount of code in our RecyclerView.Adapters that we want to test. In this article, I briefly suggest two ways of structuring our RecyclerView-related classes so that we can accomplish this.

»

An Espresso Test Recorder Deep Dive

I’ve been working on a unit test recorder for Android. After struggling to find a way to implement the unit test recorder,1 I decided to take a look at how Google implements the espresso test recorder. This post presents what I found when I dug into the source code of the espresso test recorder. Collecting User Interaction Info Before I took a look at the source for the espresso recorder, I half expected to find some fancy bytecode manipulation of the sort we see for the proguard or jacoco transformers. »

Why don't we have a unit test recorder?

Last week, I introduced Vice, a proof of concept regression test generation library. Vice generates regression tests simply by exercising the code we want to test. This is neat, but there’s already something else out there that does something like this, and ultimately, Vice as it stands doesn’t answer a fundamental question I have about regression tests: if we can record functional UI tests using the espresso test recorder or apple’s test recorder, why don’t we have a unit test recorder?1 This past week, I’ve been exploring potential ways creating a unit test recorder with special attention to implementing this functionality for Android development. »

Vice: A Regression Test Generation Library

Changes in a system can be made in two primary ways. I like to call them Edit and Pray and Cover and Modify…When you use Edit and Pray, you carefully plan the changes you are going to make, you make sure that you understand the code you are going to modify, and then you start to make the changes. When you’re done, you run the system to see if the change was enabled, and then you poke around further to make sure that you didn’t break anything…Cover and Modify is a different way of making changes. »

How to Safely move Logic out of Activities

In my last post, I argued that we should stop putting our app logic in Activitys and Fragments because it makes both unit testing and functional testing our apps more difficult. In this post, I’ll try to suggest a method of safely removing app logic from our Activitys and Fragments, drawing on a central idea discussed in Michael Feathers’ Working Effectively with Legacy Code: characterization tests. In the first section, I briefly introduce the idea of characterization tests. »

Why we Should Stop Putting Logic in Activities

A while back, I wrote a series of articles about why unit testing Android apps is so difficult and what we can do to make our apps more unit testable. The upshot of the those articles is that dependency injection makes it easier to unit test our Android apps and we can’t get proper dependency injection just by using Dagger (or any other DI framework for that matter) to inject dependencies into our Activitys (or Fragments). »