This tutorial shows a hypothetical assignment that I would give to candidates interviewing for a Flutter developer role.
You have been learning Flutter for a little while. You did some side projects, and followed some tutorials or courses online.
Then you found the courage to send your application for a Flutter developer role.
And you have been accepted for a job interview. You're excited and frightened at the same time!
One of the interview stages consists in completing a take-home project.
And your chances of getting the job depend on how well you perform on this task.
The interviewer is the tech lead for a startup or small company, that is currently hiring for a Flutter position.
As the tech lead, he/she is already busy with a lot of other tasks: planning work for other developers, doing feature development and code reviews, managing releases, and defining the longer-term vision alongside other stakeholders.
The tech lead wants to maximise the chances of finding good candidates, without completely disrupting his/her other work.
Maybe a few candidates will be interviewed before making a decision.
So he/she comes up with a take-home project that applicants should be able to complete.
To put it bluntly: people can write anything they want on their CV. But the CV in itself has little value if they don't have any supporting evidence for their skills.
Surprisingly, many candidates don't have anything to show beyond their CV. This is a great chance to stand out.
As an interviewer, I'd like to see either of these two things:
- some code on GitHub - whether it's an app, or contributions to other open-source projects.
- one or more mobile apps that they have personally published on the Apple or Play Store.
Why? Because this gives me some insight into how they work, what their code looks like, and how well they present their work (hint: make your README look good!).
If these things are missing, I have no choice but to give them a structured technical interview to better assess their skills.
And a take-home project gives me good insight into how they would do on the job on a daily basis.
I find this much more valuable than other types of interviews - where candidates are asked to solve tasks on the whiteboard, or recall algorithms that they haven't seen since they graduated from college.
You're likely to get those types of interviews if you apply for positions at big tech companies. But for a lot of other jobs, a take-home project is a more optimal way of assessing candidates.
By the way, in recent times I have also seen a trend towards creating a developer portfolio. Don't get me wrong, this adds a lot of value when you present yourself to a hiring manager. But as far as I'm concerned, links to your GitHub work and the apps that you have built are sufficient.
Now let's get back to the take-home assignment.
And as an interviewer, I'm likely to give you a project that requires knowledge of the same stack that is used at the company you're applying for.
For Flutter positions, I would ask to build a simple app which makes use of either:
- Flutter & Firebase
- Flutter & REST API
In this article, we will focus on a Flutter & Firebase assignment. Maybe I'll write a follow up with a project using Flutter & some REST API in the future.
In any case, I want to be mindful of people's time. Any assignment that I would give should take a few hours to complete, and no longer than one day at most.
With that in mind, here's the brief for a possible assignment using Flutter & Firebase:
Implement a simple weight tracker app using Firebase Auth and Cloud Firestore.
On first launch, the app lets users sign in with Firebase (use anonymous sign-in for simplicity).
After sign in, the app shows a page where the user can:
- Enter his/her weight into a form and submit it
- Save this along with the current time into Firestore
- View a list of all weight entries, sorted by most recent date
The app should update in realtime when the data changes on Firestore.
- Edit an existing weight entry
- Delete entries
- Sign-out functionality
- feel free to use dependency injection libraries such as
- when building the UI and navigating between screens, choose the approach that makes most sense in terms of usability.
- adding tests is not required for this project, but the final code should be testable.
If some requirements appear to be vague or lack sufficient details, make assumptions based on your own judgment.
The assignment will be evaluated according to the following criteria:
- the app works and satisfies the requirements outlined above
- general project structure and organization of code
- separation of concerns between UI, authentication, database code
- simplicity - we don't require an over-engineered solution
- naming conventions for variables, functions and classes
Making the UI look nice is not required as part of this task - legible text and usable UI is sufficient.
The expected duration of this assignment is between 3 and 8 hours.
When submitting the assignment, compress the entire Flutter project into a zip file, and send an email to firstname.lastname@example.org. If there are any parts of this assignment that you can not complete, include a brief explanation of why.
The project requires knowledge of the most basic features of Firebase Authentication and Cloud Firestore.
However, it does tell me a lot about how candidates organize their code and their understanding of some fundamental concepts:
- user sessions and storing per-user data in Firestore
- CRUD operations in Firestore
- working with forms and basic state management
- async programming (Futures, Streams)
- making Flutter applications and widgets reactive
- approach to dependency injection (scoped access vs global access)
"Junior" candidates with some basic understanding of Flutter & Firebase should be able to produce a working solution.
More experienced candidates should be able to produce modular, testable code with good separation of concerns and clear naming conventions.
The brief was deliberately vague in some of the requirements. This is an opportunity for candidates to come up with good solutions, that can be discussed at a later stage in the interview process.
As an interviewer, this take-home project gives me a good understanding of the candidate's skill level with Flutter & Firebase.
I can discuss the completed project in the final part of the interview. If a candidate did well, this can lead to a broader discussion of some more complex problems that they have faced in the past. If they didn't, I can provide constructive feedback about things they could have considered.
Of course, the take-home project does not give me the full picture. And I also need to evaluate how well the candidate would work in a team. In this context, communicating clearly is important - especially for remote positions.
But missing the mark on the take-home project is very likely to result in a no-hire decision.
I hope that this article has given you some perspective about what to expect when interviewing for a Flutter developer role. Of course, interviews can vary quite a lot from company to company. But if you do get a take-home assignment, then you'll be better prepared.
As I said before, Flutter & Firebase are a great combination for quickly bringing apps to market. Many companies are using them to build their products. So if you want to learn more about Flutter & Firebase, you can take my course. With over 20 hours of content, this goes above and beyond the assignment that we have covered in this tutorial - and prepares you for getting a real job as a Flutter developer.
Looking for your next Flutter job? Try Jooble.org: https://jooble.org/jobs-flutter