We (Spartez Software) have a Server app for assets tracking: Asset Tracker for Jira-Asset Management. We have more than 400 customers that use the tool and “when will it be available for Cloud?” is one of the very frequent questions we get.
Few engineers decided to start the development of the Cloud version of Asset Tracker as their 20% time. A great chance to experiment with new technologies, re-consider features need and usability, and develop something from scratch.
And when Codegeist was announced we asked ourselves - why not push now and make the app available for the customers?
What it does
It helps with assets management directly from Jira. Asset Tracker for Cloud (AT4C is how we call it internally) comes with a preset of different asset types - computers, printers, TVs, etc. And then a journey begins - the user can:
- Manage asset types
- Create assets
- Customize fields per asset
- Group assets into folders
- Search for assets
- Customize assets list view
- Print asset labels
- Link assets between themselves
- Link assets to Jira issues
- View assets from Jira issues directly
- View History of asset modifications
- Import / export assets through .csv file
- Configure permissions - who can view/edit assets (global and per-folder configuration is available)
How we built it
App is run from Google Cloud:
- Cloud Run - auto-scalable back-end based on Docker containers
- Cloud Tasks - to execute long-running & async tasks, e.g. as import/export operations and synchronization with Jira
- Cloud Storage - storing files required for import & export
Data resides in FaunaDB database, some highlights:
- Powerful query language enabled us to move almost all back-end logic to database
- Support for temporal queries made it easy to handle assets history
- Attribute-based access control allowed to create security rules that work on database level
- Built-in multi-tenancy guarantees data security
Back-end / REST API - TypeScript - mostly to validate incoming data and perform DB queries.
- Single-page app based on VueJS
- Re-used front-end of Asset Tracker for Server in 99%
- We created and maintain unofficial UI library, built according to the Atlassian Design Guidelines: https://github.com/spartez/vue-atlaskit
Challenges we ran into
Creating/updating a large number of assets at the same time; Ensuring that Asset Platform data is consistent with the Asset Tracker database; Multi-tenancy:
- Making sure that the activity of one customer won’t affect app performance of other customers
- Security - isolating customers data properly
Accomplishments that we're proud of
- UI shared between Cloud and Server versions of Asset Tracker
- Cloud version with tens of thousands of assets has better performance than Server version
What we learned
Creating an app is a no brainer :), giving it into customers hands is difficult: answering “are we ready?” question from feature-wise and operational readiness perspectives.
Data consistency in distributed systems is HARD (well we knew that before, but this was a good reminder ).
FaunaDB & FQL - slightly different approach to database systems than other well-known solutions like Firebase or MongoDB
What's next for Asset Tracker for Cloud (AT4C)
We want to have all features that are used by at least 10% users of the Server version of Asset Tracker in Cloud.
A short-term plan includes:
- Full-text search speed improvements
- Possibility to save / share search filters
- Adding a unique identifier for every asset
- Validation of field types
- Improvements to CSV import/export (validation, error handling)