A/B testing isn’t just about shipping and learning. There’s also some hard work involved. What if you have several A/B tests running on top of one another? Should you duplicate lots of code or introduce lots of branching? What does statistical relevance even mean? In this talk, I’ll dig into the realities of A/B testing. I’ll discuss how to deal with A/B testing in practice, how to continuously split test an application with a non-trivial number of variants and not go mad, and how to keep your quality standards high. Come find out how to optimally learn from your users.
Lyft Android was started as a single app with one developer. Now it is more than 50 developers, two apps with shared codebase and tons of features that are releasing each week. The requirement had changed dramatically and now we have many challenges that were not seen in the past. The talk covers evolution and revolutions of solutions in the core structure of our codebase and explains current state and what problems it allows to solve at our scale. Listeners will learn how to prototype initial app architecture in respect of later scale and what kind of solutions are helping to produce a sustainable product.
Even though Android is a mature platform by now, the adoption of Kotlin at Google I/O 2017 brought about a sweeping wave of freshness and enthusiasm amongst developers. Regardless of what the language and design patterns we use when writing an app, there is only one way to ensure correctness and quality: testing, static analysis and continuous integration. Many still think that setting up a CI for your project is hard, onerous, and not that useful, but we’re going to see how this is not true. Focusing on static analysis and unit testing, we’ll walk through setting up a continuous integration pipeline for a modern open source Android project using Gradle, CircleCI and Kotlin. We’ll see what benefits this brings to a codebase and how with a few tricks we can make sure external contributors adhere to the project code style, how we can prevent subtle bugs to sneak into the codebase, all with very little effort and zero budget.
When building an app, a lot of focus and effort is put on crafting the best foreground experience for users. However, our apps also have a hidden life when we move them the background. And the system watchdog is here to make sure they all behave! In this talk, you will learn what the common pitfalls of background execution are, how you can make sure you don’t exceed system resources by applying best practices, and finally, how to optimize network requests when your app is not in the foreground.
Swift and Kotlin have a lot of concepts in common but they also have a few notable differences. Knowing both languages can help you write better code and share ideas between developers of “the other platform”. We will cover the basics of Kotlin before converting a Swift app into a Kotlin one. We will use concepts such as sealed classes, extensions and many others to make our code more robust and readable.
You want to style the title of dialogs throughout your app and you think it should be simple enough. However, once you dive into it, you might start asking questions - should I use alertDialogTheme or alertDialogStyle? Should I use dialogTitle, windowTitle or textAppearanceLarge? It is no secret that the styling and theming system in Android is complex, but I promise there is some method to the madness! We can avoid writing custom components just to achieve pixel perfection if we know how tame to the beast. In this talk, we will learn about the difference between themes and styles, the hierarchy of different styling techniques and how to use them effectively. We will also learn how they work internally, and the best practices of how to apply them. We will wrap up by discussing the newest app theme in town - the Material Components Theme and the attributes that come with it, like “colorOnSurface”. At the end of this talk, you will know how to style your app like a pro with the correct use of Styles, Themes, TextAppearance and sensible defaults while specifying colour, shape and typography through Material Theming.
Bringing Junior developers into your team can be a challenge, but it can also be rewarding. Mentoring can benefit both sides: It can help juniors with the most difficult moment in their career, and it can help seniors become better professionals. Come and learn how juniors and seniors can support each other and grow together.
As Software Engineers we know that Legacy Code and Technical Debt are familiar concepts we have to live with in our day to day life. We are also aware that our software, in general terms, is terrible and that does not make it any especial. Codebase healthiness and maintenance are challenging, so in this quick journey we are going to walk together through a bunch of tips and techniques on how to effectively address this problem.
Have you dreamed of deliciously sweet animations in your app but have no idea where to start? 🍫 What about creating some delightful UI treats to keep your users intrigued and wanting to discover more? 🍦 Join Rebecca on this journey into a World of Pure Android Animation ✨. From creating custom view animations on a Canvas to using MotionLayout to create complex layout animations, there is something for everyone. We will also see how to create your own AnimatedVectorDrawable using Shape Shifter. No golden ticket required.
Gone are the days when we only had two form factors to worry about: a single iPhone and a single iPad. The modern apps have to look good on iPhone SE, iPad Pro, and everything in-between. Let’s discuss some approaches for dealing with this problem to make the most of the screen real estate of any iOS device.