2016’s Banner

#360AnDev 2017

I attended my first Android conference! It was cool to see the Android scene in Denver as well as to meet the many others who traveled from across the U.S. and the world!

The keynote presentation about keeping up with technology by Huyen Tue Dao was inspiring and challenging. She exhorted us to never be comfortable; but instead to be like water — able to fill the shape of whatever container we find. She reminded us of the importance of community and challenged us to meet and share with others. She encouraged us to continually “just go for it!” and try new things via Code labs, test projects, side projects, Android Blueprints, and Advent of Code.

She challenged us to stretch ourselves by giving a talk and focusing on learning what we like and don’t like about new technologies.

Finally, keeping with the water metaphor, she concluded that it’s not necessarily passive to learn where the current takes me. My take away was to continue digging in and learning especially when it’s hard and to think of ways to stretch myself especially by practicing sharing what I’m learning.

Day 1 Talks

I attended 7 more talks on the first day including:

This talk covered the fundamentals of clean architecture patterns and demonstrated how easy testing is a happy side effect of a consistent and clean architecture. He hammered home the Single Responsibility Principle and the Dependency Inversion principle.

  • Clean App Design w/ Architecture Components” by Chuck Greb

Chuck’s talk was pretty similar to Brian’s talk. He stressed the importance of designing with a clear layer to separate UI and data. He also noted that the advantages of this “clean architecture” include flexibility, maintainability, and testability as Brian mentioned.

My favorite quote from the presentation was “Elegance is leaving out any unnecessary complexity so the true form can shine through.”

He also recommended clearly separating independent logic and data that doesn’t depend on the Android system from code that does rely on Android.

Separation between logic that cares about Android and logic that doesn’t

He demonstrated that logic on the right side (that doesn’t care about Android) can be easily unit tested. And logic on the left side (that does depend on Android) can be tested with Espresso or Robolectric.

Chuck proceeded to give an overview of the recently announced Architecture Components, detailing how the components can fit into a clean architecture and maintain a clear separation between Android-reliant and non-Android-reliant code. I learned that the Architecture Components are designed to be used in any combination of the 4 components (Lifecycle, ViewModel, LiveData, and Room). Chuck speculated that the Architecture Components will be integrated into 3rd-party libraries and will become commonplace in Android development.

Kasra detailed his experience implementing Instant Apps at Stack Overflow and gave tips on how to go about modularizing a code base. He recommended starting with creating a single shared “library” module from the “app” module that every other module may depend upon. That library module should include foundational dependencies such as analytics, base views, shared APIs, shared UIs, and configuration for shared external (gradle) dependencies.

Then, begin making another module for a single feature. This third module should have its own Activity to hold all UI. He reminded us it’s okay if things don’t compile for a while during this process.

Continue by looking for more classes that should be moved to the shared library.

Finally, extract all duplicated logic to the first “app” module. He said this process is not a good time to refactor, it’s just the time to get things to compile again.

The goals of this method (apart from being required to implement an instant app) include: no duplication, heavy re-use, and modularization of everything!

The take-aways included:

  1. thinking about possible use cases for distinct modules.
  2. Begin modularizing code now.
  3. Do a code lab.

Caren shared some good ideas to consider when implementing App Shortcuts. She recommended using an app shortcut to expose users to parts of the app they haven’t used. And since app shortcuts are new on Android 7.1.2 and later, she recommended informing users about this new feature somehow.

This was probably my favorite talk of the whole meetup. I’m trying to brainstorm a more comprehensive integration testing strategy at work and Chris shared some helpful ideas about how he has automated his integration testing process. In summary, he showed an automated way to scrape responses and use them in integration tests (or mock modes) rather than gathering the responses manually (or relying on an unreliable backend).

Photo Credit: Huyen Tue Dao

Nicolas gave an advanced talk on ConstraintLayout including the philosophy and math behind it. The idea is to separate views from their “layout rules”. All of a layout’s constraints can be encapsulated in one object. My takeaway is that I need to experiment with the blueprint editor in Android Studio!

  • Adventures in Ocean Mapping” by Saundie Peters
Photo Credit: Rae Macias

This talk was a case study of an Android app that detailed its creators’ use of MVP. I learned about the practice of creating a “contract” interface to define all interactions between a presenter and its view, and vice-versa.

Day 2 Talks

I attended 6 presentations on day 2 (plus the final comedic presentation about a fictional new programming language by Chet Haase and Romain Guy)! The talks included:

Christina and Huyen said this would be a fairly introductory talk to Kotlin concepts and language features. I learned a lot from it though! I appreciated how they focused on ways to teach Kotlin to beginners. The talk gave me some ideas for next steps to fill in gaps in my learning.

  • Continuous Integration” by Mark S
Photo Credit: Victoria Gonda

Mark is such an entertaining speaker. He incorporated some fun GIFs into his presentation. I wish I got a photo of his superman cyclist GIF slide demonstrating how using continuous integration makes you way more efficient.

His talk was one of my favorite talks from the conference. He gave the example of Zuckerburg needing a new infrastructure at Facebook and how they had to “slow down to speed up” by re-designing build automation.

He also quoted Bill Gates: “A lazy person will find an easy way to do it.”

Mark distinguished between CI and CD. Continuous Integration, as defined by Martin Fowler in 2006, means at-least-daily integrations per person.

CD can stand for Continuous Deployment or Continuous Delivery. Deployment is not to production whereas Delivery is to production.

Mark ended up going into detail on a CI solution called BuddyBuild, saying it is “Matt Harris approved”.

He also referenced a 2000 Joel Spolsky blog post about the importance of being able to make a build in one step.

The take-away: invest in CI upfront and save time later!

A library called Flank was referenced several times in this conference. It would be super useful for sharding tests on Firebase test lab.

Doug went through the new features available on the Play Store console as well as giving ideas for how to better leverage Firebase’s features. He also gave advice on how to decide between Firebase’s and Fabric’s offerings, saying that no matter what you choose, you won’t be in trouble when they eventually merge.

This was a deep-dive into Espresso. Inyaki encouraged us to take a look at the Dagger 2 graph of Espresso’s source to get a better idea of how it works.

This was another one of my favorite talks. Joe defined showing a loading spinner as being pessimistic. He encouraged developers to design apps that are more optimistic — that assume the best and plan for the worst.

He introduced us to the SyncAdapter as a way to sync data between the device and the server. This would be useful to cache requests that didn’t go through and sync them once the network is back online.

This talk went into depth about RecyclerView APIs showing how easy it is to create an efficient and well-styled RecyclerView. I thought it would be cool to use ItemTouchHelper#Callback to animate a list item’s color as it is swiped!

Overall, this was an amazing conference. Just in the variety and depth of the presentations alone, it was great. That’s not to mention all the knowledgeable people who were there! I brought home plenty of notes and ideas to sort through and lots of inspiration to get out there and get after it to become a better Android developer!

I am excited for all the talk recordings to be posted to Realm so I can catch the talks from other tracks that I had to choose between! [Update: Talks have been posted!]Thanks to the wonderful organizers of this event: Chiu-Ki Chan, John Wilker, and Dave Smith!