My first android dev interview experience

Stelios Papamichail
6 min readJul 10, 2021

I recently got a job as a Junior Android Developer for the first time in my life and I thought I’d share some info about my experience in case anyone else is interested or curious just like I was. I’ll try to go over the following topics:

  1. Info about me
  2. Coding/Assessment interview
  3. My code and the feedback I got
  4. Technical Interview & anxiety
  5. What I did to prepare
  6. Overall experience

A bit about me

I’m a CS student, currently in my third year and I’ve built a few apps that are available on Google Play and I’ve also been doing some freelancing here and there. I mostly build android apps when I have an idea that I like and the respective budget! That’s all about me, so let’s move on now.

Coding Interview

In my case, the company (thankfully) had a project description document that contained a rough outline of what I would need to do, some links to a few assets, and some info regarding their API which only had two endpoints. The project had to do with very basic but important aspects of the job such as:

  • Form validation for a Sign-in/Sign-up page (had to make requests to an API and authenticate)
  • Dynamic Language selection
  • Bottom Navigation with four pages (only one had to be complete and there were no restrictions regarding the implementation) and custom Navigation bar look (background, fab in the middle with a cutout)
  • The main page of the app would display a list of Books with a cover, Title (data fetched from an API as JSON), and the data also contained release dates and an associated pdf
  • Implement download functionality for the books: The user should be able to click on a download button that’s shown over each book cover and download multiple books at a time as a pdf. The pdf should open a prompt for the OS to handle it and the download icon should go away. The progress of each download should also be shown using a progress bar.
  • The UI should be responsive and look as expected on multiple devices of different densities

Note: There were a lot more in the document such as sorting the data, language details, etc. but I don’t have the patience to write everything out. To top everything off, the deadline was 2 days!

My code

Moving on to how I structured my code and how I implemented the features mentioned earlier. For starters, I decided to use the MVVM architecture since they had mentioned that they were using it in-house along with clean code and I wanted to at least try and present something relevant. After building the basic Model & ViewModels, I started working on the UI which took me much longer than I had anticipated due to facing some issues with a few assets and me not having enough experience with customizing views. For the layouts, I decided to use ConstraintLayouts to achieve responsiveness and SVG files for the icons and the images, in order to reduce the apk size and to make working with different densities a breeze.

Once the UI was done, I started working on the API fetching logic using Retrofit, Gson, coroutines, and repositories along with LiveData that would expose the details needed through the appropriate ViewModel to the UI. I tested everything to make sure the API and the calls were working and moved on to form validation.

I hated my life for a few hours since the validation had to be done with REGEX and used a lot of constraints, but once I taught myself how it works (for the 100th time), everything fell right into place. The bad thing here is that I placed all of the validation logic in the activity and not the ViewModel.

As far as the main page goes, I simply used a RecyclerView and handled the onClick events and download logic in the Adapter class (which as I told the reviewer, was a bad call on my part and that I would have definitely done it differently had I had more time). For the downloading part, I used the Fetch library which required a lot less code on my part. Finally, I tested everything manually a few times and called it a day.

Feedback

The reviewer told me that he was very happy to see that I had used an architectural pattern and especially MVVM. He commented on a few changes that could be made to follow clean code architecture practices, pointed out that the validation logic should be placed in the ViewModel, and also mentioned that he was glad to see that I had used Coroutines, Kotlin, MVVM, LiveData, and Retrofit since they appreciate people that try to use the newest tools. Imagine that :)

Anxiety

The tech interview was by far the most stressful part of the process. I’ve never had any interviews before so when I looked up the term for the tech one, my anxiety went through the roof knowing how I would be sat down for an hour and be fired at with questions of various things. No matter how confident I was in some of my knowledge, I started panicking but eventually realized that no matter what happens, it’s an important experience to have so screw it. Having calmed myself down, I decided to figure out what I should read up on, in order to prepare myself since I only had ~4 days to spare between the coding interview and the tech one.

My preparation

Having no idea what to expect, I decided to read up on the lifecycle of activities, which I consider very basic and important knowledge, then move on to Coroutines, understanding the coroutine scopes and how they are used alongside MVVM and finally refresh my knowledge on MVVM. I definitely didn’t study enough for the interview but I tried.

Tech interview

The moment finally arrives and I’m greeted by two people who would be the ones asking the questions. They told me they had a lot of questions so we should just get to it and that’s what we did. The questions varied a lot, they covered basic lifecycle questions, components such as Bluetooth and Location, UI responsiveness, things like “How would you request the assets from a designer who has never developed anything for a mobile/android app?” and many more. They also asked about the differences between MVP & MVVM, SQLite & GraphSQL, XML, Proguard & obfuscation and they also asked about Build variants, Testing & publishing apps as well as what the differences are between .apk and .aab files.

I had no idea what GraphSQL was, I wasn’t sure about the differences between MVP and MVVM, I didn’t know enough about Proguard, and I also told them that I had used Location services before but not Bluetooth and that I could still answer most lifecycle questions.

I think it’s worth noting here that I decided to be very honest and upfront with them about the things that I didn’t know or the things that I hadn’t done before. I also asked for clarifications on things like Proguard and the GraphSQL questions, and their answers actually helped me make some pretty good guesses. Lastly, we talked about unit testing, at which point I mentioned that I do know how to write JUnit tests in Java but not on Android.

All in all, the recruiters told me that I did very well, answered most questions and that for the ones that I wasn’t very certain about, my guesses were pretty close to the answer they were looking for. This sums up the tech interview part.

Overall Experience

To sum things up, this was definitely a very important and great experience to have and it taught me a lot of things that I hadn’t considered before. It was worth it and even if I hadn’t gotten the job, I would still want to try again. If you are like me and you’re scared to go for an interview, I’d suggest you just go for it and if it doesn’t pan out, you’ll be stronger and more knowledgeable for the next one!

I’d love to hear your opinions and experiences down below!

--

--

Stelios Papamichail

Android developer, Comp. Science student & fitness enthusiast