What do Android developers wish they would have known when starting out?
I have my own thoughts, but I was curious what others in the Android community had to say. So, I asked.
preping my #chicagoroboto talk this weekend— Nate Ebel (@n8ebel) April 7, 2018
would love to include community examples of challenges or "things you wish you would have known" when starting with Android (learning Android itself, finding a job, growing in career, etc)…will shout out in slides 🙂
The responses were illuminating, supportive and thought provoking. They came from developers of all experience levels, on a variety of topics.
Because the advice was so varied and relevant to developers of all skill levels, I thought It could be useful to consolidate it in a single place; making it easier to discover and share for those looking for tips, advice and validation.
So that’s what you’re reading now.
A community-sourced collection of useful tips, tools, and advice for Android developers.
The most popular theme was centered around the Android “community.”
What’s the “community” you might ask?
The Android community is You, it’s Me, its anyone and everyone building for, and contributing to, the Android platform.
I started out with solely reading Android documentation and put most of the logic in Fragments =/. I wish I had utilized the community and learned about all the gotchas earlier!— Anita Singh (@anitas3791) April 8, 2018
It can be tough to be critical of something you've just learned, but don't let that stop you! 💪🏽
Valuable for me was learning to engage with and utilise the community. Lots of knowledge, but how to find libraries and people to trust.— Ryan Harter (@rharter) April 8, 2018
Interacting with the community can be incredibly useful and rewarding:
- generators of documentation
- filled with helpful people that love to answer questions and help solve problems
- source of support and validation
- place to find mentorship
- builders of amazing open-source tools and libraries
It helps you stay informed. It will help you solve problems and be more efficient. You also may build great friendships, and discover that the members of the community you’ve looked to for tools and support are extremely welcoming and willing to help.
Don’t underestimate the power of teamwork and never be afraid to ask questions!— We Are Mobile First (@WeAreMobile1st) April 11, 2018
Not specifically for Android but in general, asking questions and getting help from others and accepting the fact that making mistake is completely fine. This held me for a while.— Orhan Obut (@orhanobut) April 8, 2018
There are many ways to connect with the community:
- …and more.
This post from Tyler McCraw is a really great look at the many ways you can interact with and learn from other Android developers.
As others mentioned in these tweets, I wish I would have been more involved in the Android community early on in my career. If you’re someone that’s been considering reaching out to someone on social media, or going to a meetup, or sharing a blog post… I highly encourage you to take that step 🙂.
Being a lone wolf will only get you so far, you need to have a few solid relationships with others in the business to expand your sphere of influence <- definitely wish I had realized this sooner 🤷🏽♀️— Annyce Davis (@brwngrldev) April 8, 2018
Not learning the basics. I jumped into library development for a project without even doing a proper app before, the amount of things that I had to "relearn" later was alarming 😂 Also not engaging with the local and online Android community before, which I wish I did earlier— Miquel Beltran (@Miqubel) April 8, 2018
The Android platform, tools, and patterns are constantly evolving, and as developers we must continue to learn to keep up.
If you’re new to the platform and/or starting out in a career this learning curve may seem especially daunting. You may start asking “how do I keep up with all of this?” or “how do others seem to have all the answers?”
I remember early in my career feeling this constant sense of not knowing enough and always needing to research the latest tools and trends so I could be useful/relevant to my team.
The good news is that, in fact, nobody knows everything. Nobody is always up to date on the latest and greatest from the entirety of the Android platform.
Slightly related: I wish I had mentally prepared for how much it changes. Example – learning how to use a ListView and CursorAdapter only for that idea to be more or less obsolete after RecyclerView came out.— Adam McNeilly (@AdamMc331) April 8, 2018
No one knows it all, even the people speaking at large conferences.— Rebecca Franks 🌴 (@riggaroo) April 8, 2018
That you won't know it all. Become an expert at one thing, and then keep expertising different areas.— Sam Edwards (@HandstandSam) April 8, 2018
In order to stand out, you need to put in more time than the 9-5.
One of the big challenges in learning anything new is discovering what to look for. You often don’t know what you don’t know.
I often was conflicted between wanting to seek out answers and wanting to seem like I had the answers. (I also had never heard of Imposter Syndrome at the time)
That’s why this tweet from Craig Russell stuck out to me so much
Not asking questions is a sure fire way to hold back your learning over time.— Craig Russell (@trionkidnapper) April 8, 2018
Not asking questions is a good way to avoid looking silly and a great way to avoid becoming smart! 🙃
It’s perfectly normal and expected to not have all the answers. No one does. It’s also completely normal to feel like there is so much to learn and too much new stuff to keep up with. You’re right.
A big key towards learning (and maintaining a balanced life) is to prioritize what you need/want to learn.
Once you know what your priorities are, don’t let shame or embarrassment keep you from seeking out answers. Everyone has different skills, experience, backgrounds and everyone will have different questions and answers.
This is a vague response, for which I’m sorry. I’m coming into Android from 20 years web. I don’t know what good Android java looks like. Conventions, style guides, file locations, patterns. Knowing where to look for that is the hardest. Where is the best place to find info, etc.— Rob Drimmie (@RobDrimmie) April 8, 2018
Another idea, just throwing it out, which even applies to experts sometime… While there are so many things evolving in Android community, try not to get overwhelmed/distracted and loose focus. Has happened to me. This will only help in frustrating yourself.— Akshay (@avdave83) April 9, 2018
There were a lot of people interested in Jake Wharton’s thoughts about objectively evaluating tools/patterns/etc that come from Google.
This is great advice, particularly for Android where there are many ways to accomplish most tasks. Google often recommends a general approach or provides a solution and because it’s from Google it’s easy to take that as THE way to do things.
I certainly thought this way when starting out. Spending most of my first 2 years developing for Android on my own or in school projects, I didn’t know where to look for answers so I generally went to the Android developer docs and treated the recommended solutions as gospel.
Google doesn't always know best, and justifying something as "because Google/Android says/does it" isn't smart. Evaluate their stuff the same as you would anything else. Their engineers are no different than the ones everywhere else.— Jake Wharton (@JakeWharton) April 8, 2018
We shouldn’t single Google out as a special case to evaluate fairly. Any tool, library, pattern, etc should evaluated fairly. The same goes within your teams and projects.
“a good engineer is curious about everything and questions everyone…” — Andreas Ioannou Mobile software engineer
As a junior developer, or a dev new to a team/project, it’s easy to defer to others on your team that you view as more experienced and/or knowledgeable. They very well might be more knowledgeable, but that doesn’t mean their work and ideas shouldn’t be evaluated the same way anyone else’s are.
Everyone on your team should have a voice and the opportunity to contribute to and evaluate ideas and code. In doing so, better solutions may be found and more knowledge shared.
If you find yourself not speaking up, or not asking questions because you assume you’re wrong I would really encourage you to try and put that fear aside and add your voice to the conversation.
The same can be said for those on the other side. More senior members of teams should be working to ensure everyone has a say and is contributing their thoughts/ideas. If you find that someone isn’t, try and have a conversation with that person and understand what you can do to make sure they feeling comfortable and encouraged to contribute.
A good engineer is curious about everything and questions everyone – the only way to a more accurate result and innovation.— Andreas Ioannou (@xnorcode) April 8, 2018
could extend this to devs as well. Just because the person on your team has more experience doesn't mean their ideas are automatically better and their code should be auto-merged— Nate Ebel (@n8ebel) April 8, 2018
Useful Tools 🛠
Tools make developers’ lives easier. No doubt about it.
But if you don’t know what tools are out there, they can’t help you.
Developers shared a few tools they wish they would have known about or leveraged sooner.
- Android SDK Search: A Chrome extension that adds an ‘ad’ omnibox command and view source links for the Android SDK. Also available as an app
- Genymotion: Awesome Android emulator
- Android Studio Shortcuts: Quickly perform tasks without touching your mouse
One of my fav chrome extension is Android SDK search. type ad and it will show you results from https://t.co/REqHmxcpPR. Also, option to view source of a class while on https://t.co/REqHmxcpPR. Pretty nifty if you wanna look at actual implementations— Akshay (@avdave83) April 9, 2018
I wish I would be aware of @Genymotion, such a faster experience compared to the standard simulator.— Giorgio Natili (@giorgionatili) April 8, 2018
Android Studio shortcuts! ☝️ Not that I know all of them now, but the ones I know are increasing my efficiency so much. They are really powerful! Like crazy powerful. My favorite so far is "CMD + G" 😍 Learn them as soon as you can to enjoy coding #productivity— Kaan Mamikoglu (@kaanmamikoglu) April 7, 2018
I can’t understate how useful the right tools can be. When I first learned of Genymotion it really did change my life. I used to alter my entire work/study schedule for a day if I forgot a physical device to test on because the stock emulator was so poor. (This was years ago. I actually love the stock emulator these days). After using Genymotion I was finally about to efficiently test on an emulator and I became more productive.
I also want to add throw in my own suggestion here of a really useful couple of tools that I didn’t discover soon enough.
Git & GitHub
Git is a widely popular, open-source solution for source control (ie. managing changes to your projects). GitHub is a platform for hosting & sharing projects which uses Git to track changes.
Source control is a vital part of my daily work habit today, and I highly encourage you to give it a look if you haven’t before.
Udacity has 2 free courses to help you get started:
Architectures / Patterns / Languages 📚
We’re often on the look for the “best” or “correct” way of doing things. When we don’t have as much experience in a particular area, it’s natural to want some guidance so we don’t stray too far down the wrong rabbit hole.
That’s always been a challenge for new Android devs.
What UI architecture should you use?
- MVC? MVP? MVVM? MVI?
Activities, Fragments, or Custom Views?
Enums: Yes or No?
Java or Kotlin?
Native, React Native, Flutter ?
It’s easy to become really invested in these debates and forget that the end goal is to build working software that benefits our users. Users want a great experience, and typically don’t care how that’s provided behind the scenes.
Ask questions, study, check out sample apps, learn about these different concepts if you want. But remember that you don’t have to know them all right now. Often the choices will be made for you based on whatever your team is already using.
Architectures! At least exposure to the different types of them, so I wouldn't have written everything in my activities and fragments.— Adam McNeilly (@AdamMc331) April 7, 2018
Kotlin 😀— Eric Maxwell (@emmax) April 7, 2018
Pros and cons on how to create views. Using a custom view, fragments and activities. This will make life easier with reusability.— Anthony (@AnthonyOng03) April 8, 2018
If you’re looking for some guidance on these types of questions, here are a few resources to get you started.
- Modern Android Development
- Android Architecture Components
- Kotlin Bootcamp for Programmers
- Android Architecture Blueprints
Whether you’re just starting out, or have been an Android developer for years, your experiences and perspectives are worth sharing.
It’s common to hear people claim they have nothing worth sharing, or that because someone else already discussed a topic they can’t add their take.
In reality, I think it’s quite the opposite.
You can document your process, bugs you track down, interesting ideas or implementations, your struggles, your triumphs… really anything.
You could share to document things for your future self and/or for others. Either way, don’t let yourself be discouraged because others have discussed similar topics before.
The fact that it’s your take makes it unique and it could be exactly what someone else needs to make a topic click.
Blog. Even the little things. Hell, especially the little things. Every new 💡moment you have could be blogged about.— Craig Russell (@trionkidnapper) April 8, 2018
There's probably a million cool things I've learned that I've later forgotten. That happens considerably less often with things I've written about.
Wish I knew about app architecture patterns, about the value in sharing things you learn and about the #AndroidDev community.— Aman (@multivitaman) April 8, 2018
Share your knowledge. This forces you to understand the topic at a deeper level. There are tons of opportunities in the Android community, and people are hungry for good info.— mikewolfson (@mikewolfson) April 8, 2018
In addition to learning the Android platform, it’s patterns and tools plenty of other challenges arise.
Planning and scoping of work was noted as one such challenge.
Learning to accurately break apart, scope, and plan your weekly work will set you up for success by placing reasonable expectations on yourself. This takes time, experience, and often a lot of trial and error.
If you’re starting a new, or especially your first, role you should talk with your manager/team about how your planning process works and what the expectations will be. Then practice breaking down a task, estimating the required time, and comparing that to how much time it eventually takes.
Through this repeated process you’ll be able to more accurately plan and help your team consistently reach its goals.
The importance of creating appropriately sized JIRA tickets for my work and keeping those organized.— Jonathan Maltz (@maltzj) April 8, 2018
Estimate complexity not time.— Jordan Carlyon (@JordanCarlyon) April 8, 2018
Seconded, and also that it's much easier to get better at writing all your stories the same size than it is to get better at estimating a huge variety of story sizes.— chris (@kodi) April 8, 2018
Other challenges shared were the hiring/interview process, work-life balance, and product aims like boosting engagement and user retention.
The variety in these illustrates this fact: there will always be new, and varied challenges.
You won’t, and can’t, have all the answers all the time. But you’re not alone 😀
Don't let job requirements put you off applying, my current job (working as the sole Android developer for a small golf tech startup) was seeking for someone with a couple years experience, I applied to join straight after I finished university and got the job.— Mark O'Sullivan (@MarkOSullivan94) April 8, 2018
That it's okay to not code outside 9-5. 🙂— Zarah Dominguez 🦉 (@zarahjutz) April 8, 2018
Challenge I guess would be App engagement and User retention?— Divya Jain (@divyajain2405) April 7, 2018
Android development is constantly evolving. It can be overwhelming, but learning to accept, manage and embrace that change will set you up for continued long-term growth.
How can you manage and embrace that change?
- curiosity — Be curious. Ask questions. Seek out answers.
- self-compassion — Avoid putting pressure on yourself to learn/try/know everything.
- community — The developer community is an awesome support system. It can be a source of information, questions, support, validation, and friendship.
I’d love to hear more about the challenges people face when learning Android, starting a career as a developer, or about tips/tools/advice on how to overcome those challenges. Leave a comment, or share on social media.
The more we share about these, the more we can help others avoid the same.
The Android developer community is always ready & willing to help out. Here are some more great resources to help you develop for my favorite mobile platform 🙂