Trace financial accounting software
Case study
Problem
A financial accounting system is required which has multi tenants. Each tenant can have one or many companies or private accounts. Each account can have multiple branches and multiple financial years and multiple users with role based management. Entire system would run on browser, mobile phones and tablet. PDF printing for financial documents is required. System should be hosted on cloud and scale well. There should be proper product price and inventory management.
Selection of technology
Trace would be a massive codebase. At client side between Angular and React I selected React for its virtual dom and speed and flexibility. I selected TypeScript over JavaScript and SCSS over CSS. I selected Material-React for UI because of its superb data grid. For PDF printing I selected React-PDF after lots of research.
For API I selected Apollo GraphQL at client side, and Ariadne schema based GraphQL at server side, because I could minimize the number of endpoints, which would otherwise be plenty in numbers and soon would become unmanageable. Also I wanted to get rid of documentation of API by using GraphQL. I selected python Flask as web server in comapre to Djanjo, because flask has a very small foot print. In later versions of Trace I would migrate Flask to Fastapi for its asyncronous nature. I selected Python as server side language over Java, Golang and Node.js, the reason being I wanted to incorporate Machine Learning algorithms in future.
I selected PostgreSQL over other databases due to its super compatibility with JSON. In PostgreSQL you can easily convert your complex query results in JSON format.
Finally After doing lots of research I selected Jelastic cloud framework through Cloudjiffy because this cloud platform is truly based on Docker based containers from base. You also have tremendous flexibility and its too economical.
My Role
- User Research
- User Experience
- Visual Design
- Database design
- Architecture, design, coding
- QA and deployment
I was the solo developer in this project. I did all research at client, server and database side, did whole bunch of coding all alone, created database tables, did QA and testing, created documentation and deployed it on cloud. Thereafter provided training to users. Project is now at production and I am working on its next version.
Technical challanges
There were many forms at client side. Creation of so many forms was a challanging task. Initially I thought of creating each form individually, but later on I decided to create a framework which would accept a json object and output a form. This worked very good.
Displaying tree data in new accounts creation and final accounts was a challange. I zeroed in to the prime-react tree control. This along with recursion solved the problem.
Creation of PDF was taken care of by react-pdf library. Handling enormus data was taken care of by Material data grid.
At server side storing data to multiple tables in a transaction was difficult. There was no ready framework available for it. So I created a framework in Python which would accept json object as input and save that data in multiple tables based on description in json object. Querying multiple tables in PostgreSQL and output the result in a single object was a challange. I solved this problem by using CTE and JSON features of PostgreSQL.
Finally cloud platform selection was a problem. Requirement was an economical and flexible environment which would accomodate Flask, PostgreSQl and node.js together. I found Cloudjiffy fit for all, which provided docker containers for each requirement.