I've always been fascinated by the creative process. If I didn't study Electrical Engineering and Computer Science, I would have become an Industrial Designer. What tipped the scale in favor of Computer Engineering is the ability to implement a program, create an application, craft experience, and make it instantly available to the world.
As a Mobile Engineer, it's thrilling to think that I helped build an application that millions of people carry around in their pockets. There is something magical about witnessing an idea come alive by writing code.
I am an Android Engineer, but I switched from Linux to Mac more than a decade ago. I currently use a 15 inch MacBook Pro.
I generally go back and forth between 2 or 3 screens, one of them projecting my laptop. My ideal set up is to have the IDE on the biggest screen facing me with a few panes open, the browser on the smaller screen, and then slack, terminal windows, and everything else on the side screen.
A few years ago, I bought a Filco mechanical keyboard from a coworker. Despite being a bit loud, it makes typing such a satisfactory experience!
In terms of mobile devices, I have been using Android pretty much since the beginning. My first Android device was the very first Samsung Galaxy. I am currently using a Pixel XL 2. It takes fantastic pictures and gets the OS updates as soon as they are available. I have a habit of keeping all my smartphones. One day, I might open a museum!
My dock is pretty minimalistic. At Lyft, we use IntelliJ for Android Development because it supports the Buck build system). Besides a web browser, that is really the only application I need to be productive. I also have Slack's desktop app installed.
I sometimes have Spotify and the desktop app version of PocketCast open in the background. I use Radium every now and then when I want to listen to the news. It's a Mac app with live feeds from radios all around the world. I’m from France and grew up appreciating listening to news and perspectives from around the globe.
And lastly, although I frequently have my headphones on when I am seating at my desk, it doesn't always mean that something is playing. I’ve found that it’s a great way to focus, signal productivity, and prevent interruptions.
At Lyft, we transitioned from Java to Kotlin last year. After years of coding in Java, it is really refreshing to use a more modern language. Java 8 introduced Lambdas and some of the Functional Programming concepts along with improvements to the collection API. Nevertheless, Kotlin is significantly less verbose.
Besides, we heavily rely on the Reactive Programming paradigm. It can seem intimidating at first, but it's extremely powerful when used properly.
Very early on, Lyft embraced the Single Activity Architecture and we implemented our own CoreUI framework, Scoop (https://github.com/lyft/scoop). We aren't using the Architecture Components or any of the new Navigation API.
Every year Google releases the code of it's Google I/O Schedule application. This app can be seen as the best in class using new code architecture and the new Android APIs. You can learn a lot by just browsing the code.
Similarly, Google publishes a lot of sample code illustrating new APIs or new OS features. When you start investigating a new feature from the Android OS, it's always worth looking at the google sample repo.
Years agopen-sourcee called AndroidViews was cataloging open-source Android libraries. This site went away but the repo awesome-Android-libraries is the best attempt at replacing it.
Besides those repos, the official developer.android.com site has a trove of valuable content. The newsletter androidweekly.net is also a great source of news, technical blog posts, and open source libraries.
As surprising as it sounds, I am very excited about Flutter! Mobile Engineers are generally resolute detractors of ‘anything that isn’t native.’ I was never convinced by React Native. It solves some problems, but create new ones. With Flutter, however, Google is providing a very elegant cross-platform framework. It is still early and while Kotlin/Swift and native development are not going anywhere anytime soon, I wouldn't be surprised to witness Flutter grow significantly in the next 2-3 years.
At Lyft, Client Engineers members of Feature or Growth teams are fortunate to benefit from the work of Core and Infra teams. Most of the infrastructure required to create a new screen flow or update an existing one is already there. Moreover, Lyft's thoroughly documented Design System enables us to maintain UI consistency.
As a result, we can ship fast. In addition to the QA process, new features are beta-tested for a week and we start a controlled rollout while monitoring both business-wide and team-specific metrics.
I am reading a lot about Growth Engineering. I had the chance to be part of Lyft's Growth Team at its inception and we have since had very seasoned Growth experts joined us. It is a discipline that forces you to be nimble and to iterate quickly while remaining dependable and precise. It also forces you to be creative and think out of the box. It’s been a rewarding experience to focus on and develop a deep knowledge of Growth.
Lyft Seattle Office 2:
A few years ago, a team of us shipped Round Up & Donate. It’s a feature that enables you to round up the fare of your ride and donate to a cause you choose. To date, passengers have donated more than $14M. It is fantastic to see how our rider community embraced this feature, and see worthy causes benefit from their generosity.
A good CS background is important, but as a junior engineer, learning how to navigate a big organization can be challenging For example, how to identify new project opportunities, how to make your work visible, how to think about career development, influence without authority, etc.
Finding mentors who have institutional knowledge and experience is key. It doesn't have to be a formal mentorship relationship, either. Simply identify people inside and outside of your company who have been through similar experiences, reach out, and chat with them on a regular basis.
The Mobile Team has grown tenfold since I joined in 2015. Engineering at Lyft is very decentralized and bottom-up, which has enabled us to remain very productive as the team expanded.
However, it has become increasingly important to maintain proper communication channels between teams and identify a process for efficient work coordination.
I recently came across Julia Evans' zine: Help! I have a manager. It’s light, fun, and helps you see your work environment through the eyes of your Engineering Manager.
If you are into podcasts and want to know more about the Mobile Team here at Lyft, check out our Lyft Mobile Podcast.