Scott Chacon: GitHub to Chatterbug - Lessons Learned by an Accidental Entrepreneur
Scott had a really inspiring talk about how, if you want a project to really succeed, you should "dogfood" as much as possible. Use your project, be your own user, and most of all, reduce as many barriers as possible to get feedback from your users!
Rebecca Franks: In a World of Pure Android Animation
Rebecca gave an amazing deep dive into all the different ways to animate things in Android, and their strengths and weaknesses. On a personal note I was especially blown away by the shape shifter tool (https://shapeshifter.design) which allows even a non-designer such as my self would be able to develop bespoke vector animations and transitions! I highly recommend looking up shape shifter if you want to add an extra bit of flavour to your apps UI.
Fernando Cejas: Congratulations! Legacy code GURU level unlocked!
I loved that Fernando opened his talk with this quote:
"If you write code without writing tests, then that code is legacy code".
It really reflects how we develop software at Instil as a good product is always changing, and in order to facilitate change you have to write good tests (and a lot of them!).
I also really liked how Fernando described the term "tech debt", he described the creation of tech debt (like in finance) as something you want to avoid paying for right away (like some not so readable code), but as time goes on (again like a financial debt) that debt will start to gain 'interest' and become a bigger and bigger problem. The only way to avoid being overwhelmed by tech debt is to address it as soon as possible.
He then ended the talk by going into detail about various tools (specifically static analysis) that can be used to better detect tech debt. Again this echoes what we do at Instil as we always enforce the use of static analysis tools in all of our projects as it enhances the quality massively.
Lara Martin: Supporting Each Other - Growth for Juniors & Seniors
Lara opened with quite a profound statement on the industry as a whole: everyone just wants to hire senior developers, they never want to hire juniors. But where do seniors come from? No one is "born" as a senior developer, they instead have to be nurtured, and guided towards that level.
Lara highlighted that, of course, there are a lot of challenges with hiring junior developers. For example ensuring they are not overwhelmed, do not suffer from imposter syndrome, they often cannot work on a task on their own without guidance. However she also highlighted how a junior developer can benefit the existing seniors on the team: fresh motivation, new knowledge or ways of tackling existing problems from a different mindset, they aren't already boiled down with the "tried and try" frameworks and can see things from a new light, and most crucial of all, they give the senior developers on the team a chance to grow as leaders and develop much better "soft" skills which can be so difficult to acquire.
She ended her talk with tips for both seniors who are mentoring juniors, and juniors who are being mentored by seniors and how both sides can really maximise the benefits!
Anita Singh: Styles, Themes, Material theming, Oh My!
Anita's talk focused on the challenges of having an easy to change theme in Android, especially when you wish to migrate to the (currently beta) material theming. There were some interesting gotchas around how to ensure your elements can be dynamically themed to support complete overhauls like dark mode out of the box. Will definitely keep aware of the tips here for my next project!
Marco Zimmermann, Nicolas Märki, Joseph El Mallah: Sharing Code Between iOS and Android Apps
An interesting take on how to maximise code sharing between iOS and Android, while still using native components. There were 3 approaches:
Using Djinni to create objective-c bindings for Swift and Java. Then all the "common" code can be written on Objective-c. They said that this didn't seem to be the most reliable approach as debugging was very difficult, Djinni is no longer maintained, and JNI calls in Java are quite expensive.
J2ObjC as the name suggests will convert Java code into Objective C code in order to share models and business logic. Unfortunately the limitation here is that database, network, or UI code cannot be shared so the amount of shared code is very small. Also the build times are extremely slow. Was again suggested that this should be avoided.
They went onto our (maybe a little bias) favourite: Kotlin Native. They did say that there are of course teething issues as it is still Beta, but it does have an xcode plugin to allow easier time debugging and reading kotlin code while using the iOS IDE (though we at Instil would still recommend sticking with Jetbrains great tooling infrastructure). This again has limitations on UI code, but their summary suggested that this could be a strength as you can leverage the platforms strengths and tooling in the UI department rather than have something that covers both, but isn't as good as both (like Xamarin forms)
Watch Marco, Nicolas & Joseph's talk
Sabastiano Poggi: Computer Says No - Static Analysis and CI in a Kotlin World
Sabastiano went into more detail about the static analysis tools that are available in much more detail than Fernando's talk the day before, and specifically in regards to Kotlin development. It was a great talk if you are on the fence about these techniques, though here at Instil we have been using all of these tools already, so unfortunately for us there wasn't a big additional take away (this is not to dismiss the talk, do watch it!)
Pietro Maggi: Embracing the WorkManager
Pietro introduced an incredibly deep dive into the new WorkManager library that was introduced in Android (and is also part of the new Jetpack family of libraries!). Extremely interesting and detailed talk that really sold WorkManager to me as it abstracts a lot of the complexity of the existing implementations (JobScheduler, Alarm Manager, etc) while ensuring it runs on all currently supported versions of Android.
Aydar Mukhametzyanov: The Realities of A/B Testing
Aydar introduced a concept I haven't had much of a chance to use personally which is A/B testing, and how in his own work he has benefited in his own projects. In essence, his description was "A/B testing is letting percentages of users access different features, and then analysing the user's behaviour". This, as he described, requires a lot of initial setup in regards to proper (and thorough) analytics in the application, analysis of what you want to achieve from A/B testing as a feature, and the infrastructure to support feature toggles in real time. At scale, the pay offs of this approach looked very impressive!
Denis Nekliudov: Scaling Archietecture at Lyft
Denis opened his talk by talking about all the different patterns that were attempted initially for the Lyft Android app. These included: MVP, MVVM. MVI, and how they each had their own strengths and weaknesses. This reenforced a theme which seemed very strong the Android side of the conference which was - create lots of tests, use static analysis tools, use CI, use dependancy injection. It was very refreshing to see such a strong focus on these ideas.
Adrian Kosmaczewski: Refactoring Ourselves
A very inspirational talk (and very funny) about modern technology and the issues we face on the ethical, social, and political side of things. The whole thing was told with twitter posts (of which some were very funny). Adrian was a great speaker and I would highly recommend watching the video!
Overall
The conference is for sure one of the best I've ever been to. The organisation was fantastic, the talks were top quality, and the location was breathtaking. I very much hope I can go next year as well!
For more information on the conference visit their website here.