The recruitment task
My task was to create a simple web application that settles up expenses and debts. A user should easily add information about new debts by gathering all the necessary data: who owes who, how much and for what. The user should also be able to check the current status of accounts, check history with others and notify (on behalf of the debtor) that the debt is already covered. I had to design and create a website with a diligent consideration of the UX and UI aspects. The previous version of the app had been called Bailiff, after an officer whose main responsibility is the collection of debts. Mine was designing Bailiff2.0.
After the first look at the content of the task I had mixed feelings. First I thought that I've already had done similar projects, in terms of the level of advancement, so I could handle it easily, but on the other hand I knew that every project was different and I would have some difficulties for sure.
I can say that the biggest challenge was the time I had to complete the task. 40 hours is a lot of time, but not for a beginner developer, believe me.
The trial period
Prograils were happy with my work and decided to check my skills during the ‘trial’ period. (You can read more about recruitment process at Prograils in our Playbook). During this time my task was to improve Bailiff2.0. The main change to be done was to integrate the existing application with Slack – the communicator we use at work. By integrating I mean that the user can use Bailiff2.0 via slash commands in Slack. Introduction of this feature was the first big difficulty I met because I have never used an outer API in a Ruby on Rails application before.
Bailiff2.0 is the second version, so when the live time was coming, I needed to migrate data from the previous application to the new one – no one wanted to lose information about owed and borrowed money. Migrating the data was very interesting and didactic for me, but at the same time it brought me numerous difficulties.
The result of my work
I think it’s time to present the result of my work on Bailiff2.0. The application consists of the web version integrated with Slack. In Slack, you can communicate with the app by a slash command:
There are five available commands and each one of them has its corresponding action in the web version of the application:
Let's start with the landing page:
To authorize users, Bailiff2.0 uses the OAuth protocol. It allows to sign and log in using a Slack account.
After logging in, you can see your status - how much you owe and how much money you borrowed.
To see this information in Slack you can use the command
Bailiff 2.0 gives you the opportunity to check the history and activity of others.
In Slack use e.g
/bailiff @clakomy to check the status of a specific user.
In the web version you can also check your recent activity.
To create a new debt you can use form in web version or command
/bailiff debt. You must provide user or multiple user, the purpose and the amount of the debt, like
/bailiff debt @bercik95 10 @bartek 12 burger.
To cover active debts you have to use the 'pay' action. When you gave money back in real life, just fill in the form in web version or use slash command in Slack, like
/bailiff pay @bercik95 10 @bartek 12.
When you gave your friend a credit and realized that they had already given you the money back and they hadn't saved this fact in Bailiff2.0, you can use
/bailiff settle instead of waiting your friend use
If you paid too much, Bailiff2.0 creates an extra event with purpose
Pre-payment which will be used in the future.
Every action you are involved in creates a notification in form of Slack message from Bailiff2.0 bot user - you won't miss anything.
I enjoyed designing both Bailiff2.0 and despite the challenges, I managed to perform this task properly. What feels really rewarding to me is the fact that the recruitment task I completed is now used on daily basis at Prograils. The first months at Prograils were really productive and made me want to constantly upgrade my skills.
At the end I would like to thank Robert Kaczmarek for leading me during my trial period.
- First steps with Clean Architecture and VIPER
- How to make a reusable custom UIAlertController
- Adding Webpacker to a legacy Rails app
Top photo by Freddie Collins on Unsplash