Welcome back to our Meet the Devs segment! In this piece we take a little time to get to know the people who really make Android what it is today and that is the app developers. In this week’s developer interview, we are talking to Luke St. Clair, developer of Jelly.
Name: Luke St. Clair
Developer Name: Luke St. Clair
Website: Facebook page
Google + Profile/Page: Google+ Page
How many people on your team? 1
Tell us about your company
Jelly gets answers from people.
The idea for Jelly is a reimagining of how we get answers to queries based on a more human approach. Jelly is a mobile application that uses photos, interactive maps, location, and most importantly, people to deliver answers to queries. On a fundamental level, Jelly helps people.
What level of experience do you have with coding and development?
I’ve been coding since I was in High School (17), and professionally, I’ve worked at Amazon (distributed systems, fraud detection, R & D), Facebook (mobile, mobile web), and Jelly. So, a bunch, I suppose, but not as long as some of the real luminaries in the industry. Where I really lucked out is that I got to learn from people who *have* been coding for a long time – I got to steal a little of their hard-won knowledge from them.
What languages do you know? How and where did you learn them?
My strongest language is easily Java, which I first learned by studying for the AP Computer Science test offered in the US. Since this class wasn’t officially offered by my school, I taught myself the language, then subsequently had to unlearn most of it when I joined Amazon 7 years later (turns out, no one builds a hierarchy of animals in real life).
For instance, I picked up C++ when I was writing networking and cryptography code at the University of Illinois, but I wasn’t very invested in the language. I wasn’t taking advantage of the things the boost library offered, I wasn’t using automatic memory management effectively, had poor instincts for subclassing/composition, etc. While I was at Amazon though, I was fortunate to have a couple of people, Jared Lundell and Stanley Wang, invest in beating some of these bad habits out of me. This process of correction, learning by example, and being part of much larger code bases helped me move from understanding syntax to understanding principles of language design. Basically, I got to make a lot of mistakes and have people point the out to me before they became too much of a problem.
I don’t really get excited to reach for a language as a tool until I fully understand the language idioms and why they exist. For instance, in Java, I’m perfectly comfortable explaining why to use a for loop with an iterator syntax vs iterating over indices in an array, but in, say, Python (which I’m not really familiar with), I’d have trouble justifying one approach over another, nor could I reliably predict the relative speed of their execution.
What level of experience do you have with design?
I’ve gotten a fair bit of exposure to different design processes, some good, and some bad. Though it isn’t always the most time-effective way to learn, seeing poor design processes alongside good ones is a great way to figure out how design should fit in with engineering and project management.
As far as creating designs personally, I’m embarrassingly unskilled. I like to think that I have a strong product focus (and do love a data-informed design process), but I’d be a terrible designer if left to my own devices.
What apps have you made?
The Facebook apps are obviously in collaboration with a lot of people.
- Facebook Home
How do you monetize your apps?
Facebook’s monetiziation strategies are pretty well documented.
Jelly isn’t focused on monetization yet.
Do you consider yourself successful?
Absolutely. I’ve exclusively had jobs I’ve enjoyed with great co-workers. The companies I’ve worked for are focused on delivering something that I believe in, and are doing so in exciting, ethical ways.
The other part of this for me is that I feel like I’ve leeched enough wisdom from the places I’ve worked to be able to deliver the types of experiences that are exciting to me. For instance, I’m at a point now where I feel pretty comfortable delivering a pretty non-standard, visually oriented design like Jelly. I’ve gotten the chance to work chipset manufacturers of Android devices, OEMs, fantastic designers, animation wizards, and data-conscious middleware folks. I couldn’t ask for better groups of people to learn from.
Perhaps as importantly, I’ve been consistently been given the space and time to create experiences that I’m excited about. For instance, on one UI, there was no good way to do physical animations without dropping frames, so our team got buy-in to divert someone to creating a library to do this well. Many teams/projects aren’t as fortunate.
How difficult is it to make money as a developer?
I’m probably not qualified to give a useful answer here.
What can Android do to improve?
There are some big-picture bets that I hope Android is willing to make in the near future, and some small details that meaningfully contribute to the difficultly of building beautiful apps.
In the big picture camp we have:
– Development speed – right now, Android is getting clobbered here. The build/deploy test cycle is much, much slower on the Android platform than the other mobile environments, in part due to Java and the dexing process. The verbosity of the Java language doesn’t help, even with the strong and active community helping with documentation, best practices, etc.
– Better tooling – development tools give people superpowers, and right now, I feel pretty normal-powered. There are a lot of improvements on the horizon, fortunately, especially with Gradle/Android Studio. That team at Google has been doing a great job of rolling out a much better experience for developers than was previously available, but there’s a lot of room to help make the entire process easier. For instance, there aren’t a lot of best practices docs for the Gradle build process – this makes the initial experience with the platform a lot harder than it should be for new developers.
A couple of examples of things in the smaller details camp:
– Keyboard control – it is shockingly difficult to control the keyboard and synchronize UI around it. For instance, if you want to have an element that reacts in sync to the height of the keyboard, you’re going to have a difficult time. Or maybe you just want to always bring the keyboard up when a text field is focused? Or dismiss it when the view is detached from the hierarchy? These things are surprisingly difficult to get correct right now.
– Testing – there’s no supported way to run true unit tests in Android right now with Gradle/AS? There are some sort of working workarounds that maybe sort of work, but after a year+ of development into AS/Gradle, there still isn’t a solution here. Good, thorough testing is a critical piece of solid software development, and it’s not something that gets enough attention on the platform. Right now, Android is the hardest platform to test on effectively that I’ve ever coded for, by quite a bit.
Why did you choose Android? Do you develop for other platforms? What are the differences between them?
I love the flexibility of the Android platform. I love that Android can be so many different things to so many different people. Someone with a Galaxy Ace in Africa is going to have a totally different experience than someone with a Samsung Y in Brazil or someone with a Note 5 in California. But the fundamental technology works across those experiences.
I believe Android is going to be the mobile platform that brings the next 2 billion people online. I’m excited about that. For many people, this will be the first experience they have with a computer, and we have the opportunity to help define how they look at computing. Android, more than any other platform, is very well positioned to do this.
Android became my platform of choice in part *because* of the challenges. Not many Android apps scroll at 60fps. Why is that? What’s going on there? Android developers are every bit as smart as developers on other platforms, so it was clear to me that there were additional challenges here that legitimately needed solving. I’ve enjoyed that process of investigation. My hope is to help (in an extremely small way) to help raise the bar for UI experiences on Android, in terms of fluidity, physicality, and delight.
What are your thoughts on iOS and Windows 8?
iOS seems to be created with graphical experiences in mind, and has done a great job of advocating a consistent, understandable design language. They’ve historically done an amazing job of taking technology that may or may not exist and reimagining just how good the experience of using that technology could be.
As for Windows 8 – I actually carried a windows phone for a few weeks – it’s a really neat OS. I enjoyed the beauty of the design ideas at the time (though they never really clicked with me personally), and they have the best mobile keyboard out there (I’m somewhat of a keyboard connoisseur).
What do you think of the Android design guidelines?
The Android design team has started (especially in the last year) to do a better job of communicating what these guidelines are and why developers should follow them. This is really important – it’s starting to bring the Android design community under a bigger tent than before, white maintaining consistency that’s useful to consumers. Whereas a few years ago you used to see pretty unpredictable designs, you now often see important patterns repeated between apps in an understandable way.
Check out the Google 2013 design standouts that they publish each year – you’ll see a lot of variation around a few important consistent themes, like navigation, but each app has a lot of room to explore their own style.
What are your favorite apps?
- Facebook/Facebook Messenger – simply the most useful app I have. It helps me connect with friends on a daily basis, provides news I care about, and is my primary messaging platform. I love it. Plus, the messenger features are really thoughtful. The stickers are super fun, and the instant video/picture sends are some of the best I’ve used. Killer stuff.
- I love Remember the Milk. It’s not quite there in terms of simplicity/interface some times, but it my favorite TODO app I’ve ever used (and I’ve tried pretty much all of them). Totally indispensable for me.
- Slingshot – I have no idea if I’ll be using it in 2 months or not, but right now, it’s really playful and fun.
- Strava – I’m a cycling nut, so this is pretty much made for me. I love competing with friends to see who’s the fastest up a given hill, who’s putting in the most miles/time, and who’s going on the most interesting cycling adventures.
What has been your experience been like working with Google?
Great – they’re incentivized to help and they want to make the platform better. Google’s beta program for developers was a really responsive and important addition for them. It’s so easy to get early feedback on your apps now that it changes the development cycle substantially.
Their design focus of the last couple years has also put them in a position to give better feedback about apps developed for the Play Store. They offer a lot of opportunities to get advice about apps from their design team, which is an incredible benefit that is often under-utilized.
What does the future of development look like?
If you haven’t checked out Bret Victor’s work at http://worrydream.com/, give it a look. This is where I hope development is going – more interactive, declarative processes and faster iterative feedback, for starters. This is part of why I was so excited to see the Swift sandbox released recently. It looks like an important first step towards this vision, and I hope it gets pushed forward in the Android world as well.
What tips do you have for aspiring developers?
For your first few jobs, be very sure to end up someplace where you’re excited to learn from the people around you. There’s a lot of knowledge other people have to share, and it can be quite difficult to painfully earn that knowledge yourself.
There’s a temptation when you’re just starting out to get things done as quickly as possible. Resist this. It’s important to work hard, sure, but make sure you’re really learning about why things are taking as much time as they are. Is there a better way to solve this? Why are you doing the work in the first place? Is it really helping solve an important problem? Be lazy, and learn tricks to solve things more simply.
Anything else you’d like to share?
Android development is starting to move into a much more mature era. There are a lot of really great third party libraries available for common problems (image loading, MVC, payments, HTTP, etc), so we no longer have to frequently reinvent the wheel. Consequently, a single developer can be far more leveraged than even 3 years ago.
Given that a developer can now operate with a much higher velocity than in years past, now’s the time to go build something awesome. Think of some really great new experience that you can’t have today, and think about how you might make it happen (or how you might pull us all one step closer to it). A lot of people have done a lot of work to make this easy (thanks Square and Facebook, in particular) – it’d be a shame not to take advantage.
We want to thank Luke St. Clair for chatting with us in this week’s developer interview! If you’re a developer and this looks like something you’d like to do, check out our Meet the Devs form! We look forward to hearing from you.