How I am developing a small Leave Management Application for a colleague?

This is how I am developing a small web application for a colleague concerning Leave Management.

How I am developing a small Leave Management Application for a colleague?

Introduction

A colleague responsible for a team asked me a few months ago if it was possible for me to develop an application for him to track who in his team is requesting leaves. Some of them sometimes send mails to his work mail and sometimes to his personal ones. So he has difficulty keeping track. He has been experimenting with Microsoft Access - but to no avail for the moment.

Features

For a basic Leave Management System, there are two types of users. One employee who is going to request for a leave. His/Her supervisor is then going to accept or decline the request. If the latter does so, they can put a reason why.

The colleague who is interested with this system, wants something inspired from the Sicorax HR Management system, developed by Uniconsult Ltd. This system though is too complex to begin with though.

How I plan the development?

I use a google spreadsheet to plan down everything. I try solving the problem first on it before coding anything. As I am working with a programmer colleague, in our spare time, I can validate solutions beforehand. Similarly, before deciding any major feature, I can test if it makes sense - but most importantly I can check if it's simple to implement.

The next step is to write down simple user stories. They are brief descriptions of how the user is going to use the features.

As a supervisor, John Doe will see a list of employee leave requests for the current month. All table fields will be displayed. For a leave request, he can change the status and the supervisor comment.

As a user, Jane Doe will see all of her previous leave requests; she can also make a new one. She can edit the request, but cannot change the status and supervisor comment.

An important field is isArchived or archived with a boolean type - so that data can still be kept without deleting them.

Constraint

I am developing this app in my working free time, therefore time is of a great factor. I therefore plan of making the system as simple as possible. For example, I can use employee model directly for user management instead of creating another user model and linking it with employee.

Communication Medium

vintage telephone on the wall.
Photo by Pavan Trikutam / Unsplash

To communicate with one another, we can use a plethora of tools such as:

  • Basecamp
  • Google docs such as spreadsheet
  • Email
  • Trello

Possible Technologies

I try balancing getting things done with learning. Learning in this case can be a never ending process. I can implement the same set of features on various technologies, such as the latest in Web, SvelteJS and NestJS and/or do the same on Mobile with React Native or Flutter.

A list of potential technologies:

  • NestJS to develop Rest API
  • VueJS for frontend
  • Ruby on Rails for full stack development
  • Ruby on Rails for Rest API development
  • Same using Laravel
  • SQL vs NoSQL

Database Design

Using MySQL, I create a database and two tables, employee and leave_request using phpMyAdmin. By doing so, I can switch between technologies and decide which one is most effective for developing the application based on our constraints. This data structure will change but I get a basic idea of the data type.

Some developers prefer starting designing the screens and then coding the front end. Once done, they develop the backend and tie the system together. This is an effective approach - one that I used a lot before at my previous companies.

Employee Table
Leave Request

My aim as a developer.

The question I ask myself is - what do I want to achieve with this project?

My idea is to learn more and develop a better understanding of certain concepts such as Token Based Authentication. Even if the project fails or stops in between, I am still going to learn plenty.

A list of Relevant Questions:

  • Ease of development based on technologies I already know vs technologies I want to learn, e.g. Ruby on Rails vs SvelteJS + NestJS
  • Ease of deploy? PHP is the easiest; however, it's been ages that I last worked with PHP, and I've forgotten most of the syntax and API. I can use CodeIgniter, a basic yet interesting PHP Framework or Laravel - similar to Ruby on Rails but requires a deeper learning curve - requiring at least a few weeks of training
  • How to deploy the web app to a live server? I have previous experience with Ruby on Rails, deploying to a linux server using Capistrano, a deployment gem ; with one command, the master branch is deployed on the server
  • As I am already working with JavaScript at work, I can also use NestJS + EJS as a single app, or isomorphic app with NestJS + VueJS. Or build a front end with VueJS and a backend with NestJS. I don't know the latter though, which can take a few weeks.

On the Development process

I started the development using NuxtJS, which uses VueJS. I, however, struggle with basic things such as showing which menu is currently (using Bootstrap menu). As my colleague is working on the frontend, I switched to NestJS to develop the Rest API.

The framework itself is straightforward, inspired from Angular. The MySQL database connection is easy to add. My biggest gripe though, is the error I got after adding the Employee Provider.

I keep getting an import is not recognised error. I try several solutions to no avail. A better approach for me is to follow a couple of tutorials online to learn the basics or watch a few YouTube videos on the subject. Once done, I can then code the leave management app. I won't be productive for at least two to three weeks.

I prefer in the meantime, switching to a technology I know quite well - Ruby on Rails - which helps with Rapid Application Development (RAD).

This is a full stack version - login using devise, a library that does the Authentication heavy duty.

Login Page

This is a complete barebones scaffold generated by Rails. I only added some styling and bootstrap.

Learning Progress & Obstacles

As my colleague is working on the frontend using an existing VueJS template, I've switched to develop the backend Rest APIS. I've followed a few tutorials on how to achieve it using Devise, an authentication gem, but this is becoming overly complicated for Token Based Authentication.

I've therefore switched to manually add the JSON Web Token (JWT) library, which is way easier that with my previous experience in NodeJS.

Clear and Simple

I am adding the next features one at a time; such as login - a means of getting the token for protected API requests.

Logging Sick Leaves

On talking with client colleague, that is, the one who is going to use the system, there are different types of leaves:

  1. Local Leave
  2. Unpaid Leave
  3. Sick Leave
  4. Vacation Leave

I am going to add leave types to differentiate and instead of keeping the number of leaves taken by an employee, I shall rely on queries.

So far, it has been an exhilarating experience for me working on a new internal project, one that is not required, as I can work on technologies that I like.