So, from today we are going to start developing a personal finance system from the ground up where we can track our expenses, income, get an idea of where our money goes, have a birds-eye view of our financial status, and generate some statistical reports which will help us drill down and analyze our expense habits and plan for the future expenses. We’ll start with the minimum viable product where we’ll have the most basic features a personal financing system should have. Then as we move forward we’ll start adding more and more features and we’ll see how we can develop this from a technical standpoint. We’ll explore what technologies can we use to develop the UI and frontend and what will be our backend look like with all the hosting and server infrastructure.
I’ll break down this into a series of posts and will try to focus on one thing per post. I’ll first start by explaining what our MVP will look like and what features will it have. Then we’ll move forward with the selection of technology and then finally we’ll start laying out our ground to bootstrap our application.
What are we going to develop?
As I’ve mentioned this will not only be an application but a whole system where we will have a web application that users can access via their web browsers, a mobile app that users can install on their mobile phones (we’ll try to develop both Android and iOS but we’ll see how practical that is later down the road), and a backend system that will most probably expose some APIs that web and mobile apps can call, and then we’ll have a whole server-side infrastructure where we’ll take care of hosting, load balancing, databases, storage, messaging, notifications, and so on. The backend infrastructure will be cloud-based and we’ll try to leverage some cutting-edge cloud-native technologies that we’ll explore later on as we get to that stage.
Let’s start by explaining what features we are going to add to our MVP.
The most basic thing a financing system requires is a record of the transaction performed, whether it is expense, income, transfer or whatever. So, a user should be able to add a transaction quickly and easily. Transaction will have:
- Amount – how much money spent
- Type – expense, income, or transfer
- Category – grocery, bills, or salary
- Account – bank account or even a cash
This will be very basic info and you’ll see we’ll add more information to the transaction as we add more features later on.
Besides transactions, a user would be able to manage their accounts where they can add their bank accounts, mobile wallets, credit cards, cash etc.
Users will get a default set of categories but they will also be able to add, update, or delete their own set of categories.
Once a user adds a transaction they can also edit it or even delete it. The system will track the balance of each account they have and will keep tracking all the transactions that will be used later on to generate some statistical reports.
These features are domain related or you can say business logic. However, some other standard features are required in almost every system or app. Like authentication and of course, we’ll implement a complete authentication system and we’ll see how different approaches are available to implement authentication.
So, this was a short introduction to a long journey we’re going to start. I hope you’ll enjoy the ride and come along. Subscribe to get notifications for upcoming posts in this journey and let me know your thoughts in the comments section below. Keep an eye on the next post in the series.
See you then!