The Purpose
We are going to evaluate your software engineering practices with a simple Android based app.
The Task
Let's imagine, we are developing a to-do app for Android. Your task is to develop this app that will work offline.
- A to-do item can be created, read, modified, deleted and completed. A to-do item consists of: "Title", "Description", "Due Date", "Tags"
- There should be an alarm functionality based on the due date. When the due date arrives, we trigger an alarm within the app and inform the user. This feature should work even if the app is in the closed state.
- A to-do item may have one or more tags.
- There should be a search function based on title, description, tags.
- There should be a simple way to list all to-do items.
- There should be a way to easily generate thousands of fake to-do items for testing purposes. The content of the to-do items are not important.
Screens
We expect you to come up with a three-screen application. We have listed some of the UI requirements below. The look&feel of the design isn’t important. This is just to help you on choosing the right structure. You can come up with a different design and UX. It is up to you.
Main Screen
- You will list all the available to-do items.
- Search input box will be here too. You don’t need to have different input boxes for title,
description, tags. It is enough to search the text on both title, description, tags
simultaneously with a single input.
- Items that have due dates will be listed on top, sorted by their date.
- There should be a button to add a to-do items.
- There should be a button to generate fake to-do items.
- There should be a way to complete a to-do item.
- Completed to-do items will be listed at the bottom of the screen with an indicator.
To-Do View Screen
- This screen will show all the details about a particular to-do item.
- There should be an edit button on this screen.
- There should be a way to complete a to-do item.
To-Do Add/Edit Screen
- This screen will allow us to add and edit a to-do item.
Notes on Deliverables
- You should use Java or Kotlin. Your code will be evaluated within the constraints of the language. We do however expect you to maximise the performance within the language you have chosen. It should be as efficient and reliable as possible.
- We expect you to implement software engineering practices wherever possible. Always assume that this app should be production ready and might be pushed to the Google Play Store the next day.
- You can choose any tool, library and framework for your project. Your choices, however, will also be considered.
- Write a README file and include your reasoning behind your technical choices.
- Do not over engineer. We prefer simplicity over complexity. We value code quality.
- If you have any questions, you can ask us. Nevertheless, we do expect you to make meaningful assumptions if need be.
- You can submit your code to a private GitHub repository, or send us directly in an email. We can provide you a private repository if need be. Do not publish them on public repositories.
Thanks!