We were inspired by our working environment. We can can create issue, assign someone and then… turns out he/she have upcoming vacations in few days. It’s can be problematic, especially in current pandemic times, where we are working mainly from our homes and we have limited communication options than before. Holiday season is not helping either!

It’s also great way to learn Forge and start developing for Jira Cloud!

What it does

It helps you tracking leaves, absences or remote work of your colleagues directly on your Jira Cloud.

But it’s not an ordinary leave tracker! It integrates with Jira and shows upcoming and ongoing absences directly on Jira issue and only for users that are connected to that issue.

What does that mean? After you create issue, or you are viewing others tasks you will see absences only for users that are related to that issue: as reporter, assignee or any other custom user picker fields. Thanks to it you will get instant information about current and upcoming absences for users that are crucial to that issue. Now you will get some time to do important stuff with that task, before others will go on their dream vacation.

After installing our app you will be greeted with an initial setup message. You will need to be logged as admin, so you could create dedicated Jira project and custom fields for logging absences. After initial setup process you will end up will new project “Absence Tracker” with two new custom fields: start/end date. Users then could create new tasks in that project with their absences.

This approach let you store all personal data directly in Jira, without any external services. Additionally it’s easy to get custom absences statistics using Jira's built in issues search with JQL.

How we built it

We tried to get best of what Jira Cloud and Forge API can provide us.

First - don’t reinvent the wheel. We tried to use elements that Jira provided us out of the box. So we used dedicated Jira project for storing information about upcoming leaves. Every absence is logged as an issue in that project. We also created two date custom fields for providing start/end dates and added them to project screen. This way we got great way to store absences without using any custom storage or dedicated external database. We could also filter out those issues using JQL, just like in SQL!

Second - squeeze everything best from Forge API. With Forge we don’t need to care about infrastructure that our plugin runs on. It was great help, as we could focus more on development features that we want to provide for our users, not about future maintenance of servers that it will be running on. Additionally with Forge Issue Panel and Issue Glance we could fit our application perfectly in Jira issue view!

Third - clean code. With a quick and easy integration with TypeScript we were able to quickly build our app from scratch in a way we wanted to built it. Static type checking is something we wanted in an app that we plan to publish and support in longer term.

Challenges we ran into

Despite having experience developing Jira Server plugins, developing for Jira Cloud for our part of team was completely new experience. We were so used to Jira Server and its limitless ways of doing stuff in different ways (at least UI-wise) that at first we were a bit overwhelmed and skeptic, if our idea was even possible in current state of Forge UI.

So biggest challenge was definitely making some design changes so we could make our idea possible on Forge UI. And still, our app should be as less intrusive as possible, showing only crucial information at first glance, and display more detailed data only when user demanded for that.

Next big obstacle was project that we wanted to log absences on. We really wanted to automatize process of creating Absences Project and adding start/end date fields. And arrange them in a proper way on issue screen! It was crucial for our app, as we wanted to make it as user friendly as possible. So we studied Jira Cloud API v3 a lot. A lot of test projects were created. A lot of test projects were deleted. But we finally…

Accomplishments that we're proud of

…made it! Now setup process is completely automated. When first installed our plugin displays button with information about initial setup. This initial setup creates Jira project, start/end date custom field, add them to default screen and even arrange them on issue create screen! After that users are free to create their first absences in our project. We still got some timeouts due to a lot of API calls in one action, but we figured out that we can remove some unnecessary API calls, and use Promises to call multiple endpoints in parallel without waiting for them. At least where we could do this.

But this is not only thing we are proud of. Even with challenges that we met with limited UI features compared to Jira Server, we were still able to quickly redesign and ship our app. Instead of initial, impossible idea of displaying absence information below every user fields, we instead take some good use of Issue Panel and Issue Glance. Now we use Issue Panel for quick information about current and upcoming absences, and Issue Glance for detailed view. Everything is located in one place, so at the end we think it was great and user friendly redesign idea.

What we learned

First and foremost - developing for Jira Cloud. After years of developing for Jira Server this was our first app for this platform. With the help of the new Forge API it was like a breeze.

Second - fast app development. Due to relatively late entry for Codegeist we got some limited time to design app, learn new APIs and develop it. It was intense days for our small team, but we made it! And learned a lot from it. What's next for Absence Tracker

We definitively want to get more usage of issue types. Currently there’s one default issue type, but we plan to add ability to create more issue types specific for different absence types. Eg.: one issue type will be only for holiday leave, other for remote work etc. At the back-end we already have implemented issue type parsing, but there’s still some work to add ability to automatically create issue types in our project without need to do it manually in Jira configuration.

We also got some other ideas like project workflow with custom approve statuses, and ability to add more projects (eg.: one project per team).

At the end we also looking forward to publish our app on Atlassian Marketplace, when Forge will be out of beta. 😊

+ 1 more
Share this project: