Introductory task - Software Engineer
Part One of the Introductory task.
A simple Android (Kotlin) application.
Consider the following use-case:
- A user launches a mobile application on his Android smartphone.
- The user is shown a screen that represents a credit card form.
- The user fills in all the (simulated) information about his credit card.
- The application validates all the input “on the fly”.
- The users taps “Submit” and the credit card gets charged (simulation) with 1 EUR.
- The user is shown a “Thank you” screen.
- The user taps “Exit” and the application quits.
The task is to implement the use-case in a simple Android application:
- The use-case should be represented via a Cucumber specification (Calabash or Appium).
- When the tests are run, Calabash goes through the whole use-case scenario.
- The application should be implemented with Kotlin.
- In addition to Cucumber tests, the application should be 100% covered with unit tests.
- To implement the credit card form as well as to simulate credit card input and transactions, please, use the Mobile SDK and a Paymill demo account. No real credit card transactions are required.
- The application does not need to do anything outside the use-case.
To show off the results of implementing this introductory task, please do the following:
- Commit all the project files to an empty repository at GitHub along with a detailed README file which explains how to build, setup and run the application in the Android emulator.
- Create an animated GIF that demonstrates all the steps of the use-case in motion. Save the GIF to GitHub.
- Save a code coverage report (in any format) to GitHub.
Part Two of the Introductory task.
In case you are invited to complete Part Two of the Introductory task at our office, you will receive a detailed specification for the task on-site. As a clue, the task will be about implementing Continuous Delivery with Jenkins for various software development projects (mobile native, web, etc.) with the help of ansible, Vagrant and Docker. The estimated time of completion of Part Two is 2-3 hours (on-site).
How this introductory task is organized
Introductory task structure
The introductory task consists of two parts:
- Part One. A simple task that can be completed remotely.
- Part Two. A more advanced task that you will be asked to complete in one of our offices.
If you complete the Part One successfully (deliverable quality and respect to deadlines), we will be glad to invite you to visit one of our offices and to complete Part Two on-site. In case of successfull completion of the Part Two, we will be glad to have an interview with you.
Deadlines and reporting
While completing Part One of the introductory task you are expected to meet the deadlines and to report your progress:
- While implementing the introductory task you should send a simple 1-sentence daily report by email to email@example.com: “Yesterday I implemented X and today I am working on Y.”.
- Any applications with missed daily email reports will not be processed.
- You have 3 business days to complete Part One of the introductory task after you send your first email report.
The working and communication language of this introductory task is English (including the interview), if not specified otherwise.
The internship process is very well documented. Please, make sure that you have read this document thoroughly (including all the links, footnotes and references) before sending any questions to firstname.lastname@example.org.
When we talk about deadlines, a “week” means a calendar week, i.e. 7 calendar days.
Each task employs a set of custom-tailored reading sources that will help you to complete the task. If a reading source (article, book, link, blog post, etc.) contains some practical exercises, all of them should be completed and saved to your personal Dropbox folder (or Github account) before completing the actual task.
Please, create an empty folder with any cloud storage (Google Drive, Dropbox, etc.) and an empty GitHub repository (for software engineers only).
You should save all deliverables (files, documents, images, etc.) to your cloud file storage folder (or to Github in case of code).
If you think you need help, do as follows:
- Carefully re-read the task description, make sure you have understood the task correctly.
- If the previous step does not help, copy the text you are not sure about (Error text for software engineers, definitions for all the others) and try to perform a problem research with Google/DuckDuckGo.
- If the previous step does not help, create a detailed question in regards to your problem and post it on a respective site of the StackExchange network (some useful sites are Software Engineering, Graphic Design, UX, Startups (business-related), English Language and Usage and Writers among others). Your question should contain links to resources that you have found during your problem research.
- If the previous step does not help, send your question to email@example.com including the word “Question” in the subject. Your email should include a link to your question on the StackExchange network. Ambiguous questions like “It does not work” or “I do not know how to do that” will remain unanswered.
How to actually apply for this position
In order to apply for a position, please do the following:
- Complete Part One of the introductory task.
- Send an email to firstname.lastname@example.org:
- Subject: Applying for (Position title) - (Your full name)
- Full name.
- Position title.
- A link to access the cloud file storage folder (or Github repository for software engineers) that contains the deliverables for Part One of the completed introductory task.
- How did you find about this position? Please, explain in 2-3 sentences.
- Why do you want to work with us? Please, explain in 3-4 sentences.
- Please, attach your CV in the PDF format.