Define the first scenario "Search repositories by keyword"

We start by writing a unit test for your scenario.
This Java object will represent a single flow of your application and will encapsulate the business rules behind that user story.
Going test first allow us to discover the various dependencies that our scenario needs.
This package structure clearly reflects the intent of the application: all supported user stories sit on a package, and the boundaries should be as decoupled as possible from the rest of the application.
Add an end-to-end test for the first scenario

The scenario we created will interact with plain java object, which represent business concepts.
In order to actually start implementing the scenario in our application we have to deal with android specific concepts, so our IT test will remain red until we have implemented an android-specific presentation layer.
We decide to use Robotium as our IT library as it make easier to write expressive tests.
For now we're running our end to end tests over the network, but we will use a mock api boundary as soon as we implement one.
Parse a search repository response into Java models

We decide to use Jackson as a Json parsing library for its performance, flexibility and annotation-based configuration.
To ensure maximum flexibility, we hide the ObjectMapper object with our own implementation, JsonConverter.
As you see, we use custom converters for every entity, so that we create our entities through the constructor.
This way our models remain immutable and we can enforce class invariants such as "startDate < endDate".
Also, this keeps Jackson as an implementation detail and we're free to swap for another library (e.g, Gson) without touching our entities.
It is worth noting that entities that are Collections should be first class objects, because it is represented by a concept and this way we can add custom behaviour to it if necessary.
Introduce a stub for the github api