Engineering Blog

Stories from our daily work

Hello World. Technologies behind SaaS Management Platform

Written by: Tran B. V. Son  Aug 27, 2021           7 min read

We envision that our SaaS Management Platform will assist in managing billing, licenses, accounts in the organization, as well as automate the onboarding/off-boarding processes. However, the first version of ITMC is primarily focused on account management. In this blog, we introduced our product architecture, the technologies behind it, and the reasons why we choose these technologies.

Read more →

Why did we choose Puppeteer for scraping?

Written by: Haran Rajkumar Sep 17, 2021           4 min read

ITMC allows our clients to manage their SaaS usage. This requires us to obtain data using the the public APIs of the SaaS. However, many SaaS do not expose all the necessary information needed to effectively manage them via API alone. To overcome this, we retrieve the data via web scraping. In this blog, we will go over what is scraping, examples of scraping software and comparisons between them.

Read more →

Partitioning and Data Modeling in SaaS Management Platform

Written by: Tran B. V. Son Oct 27, 2021           6 min read

Partitioning (also known as sharding) is a technique to break a very large dataset into many partitions (shards) to achieve horizontal scaling. In our product, we aggregate various data such as account information, billing from over 100+ SaaS/Cloud applications. Curious about how we are organizing data from over 100+ SaaS applications?

In this blog, we introduced partitioning in DynamoDB and how we chose the partition key.

Read more →

Class design for a simple yet extensible aggregation system

Written by: Nguyen A. Tuan Dec 14, 2021           3 min read

Our SaaS Management Platform integrates with more than 100+ SaaS and increasing. It’s important that we make the process of adding new integration as easy and effortless as possible while ensuring that when you need to make some changes, the impact should be kept to a minimum.

To realize that, besides having a good overall system architecture design, good class design plays a critical role in keeping your component code robust, maintainable and scalable.

In this blog, we shared our current approach to tackle this problem.

Read more →

How we leveraged AWS features to secure user sensitive data

Written by: Nguyen A. Tuan Sep 3, 2021           5 min read

ITMC is a SaaS Management Platform, which means we collect and store data from a vast number of SaaS with the goal of enabling SaaS discovery, visibility and automation for organizations. And since the data we collect contains sensitive information, it is crucial that we keep the data safe from all kinds of threats. In this blog, we explained how we leveraged AWS features to secure user sensitive data.

Read more →

Dynamic form creation and validation with Vuelidate

Written by: Nguyen A. Tuan Oct 1, 2021            5 min read

Using ITMC, users can integrate over 100+ SaaS applications by providing us with their SaaS credentials. We have the system which, on behalf of our users, fetch SaaS data into the database for further processing. Problem is, many SaaS have their unique set of credential attributes that users must enter. In this blog, we walk you through several steps on how we resolve that issue by creating the form dynamically in Vue, with Vuelidate library.

Read more →

Using Debounce and Throttle to enhance your website

Written by: Tri Minh Nov 26, 2021           3 min read

Nowadays, websites are more dynamic and reactive with user’s actions. Based on events from users, we often have to execute some functions to handle and sometimes users react more frequently than it’s expected, which decreases the performance, especially when we have to make API calls. It’s better to limit the number of times a function is executed, rather than let users do it freely. Debounce and Throttle are two important techniques, which not only enhances your website performance but also reduces unnecessary API calls and load on your servers. In this blog, we will learn about these concepts and their use cases.

Read more →

Money Forward i Engineering 2021

Written by: Tran B. V. Son Dec 23, 2021           11 min read

It’s been a year since we started the engineering team at Money Forward i. It’s time to look back at what we have done and what needs to be improved in the future.

In this blog, we shared about our engineering culture at Money Forward i, on how we build products, how we hire people and how we collaborate with others.

Read more →

Extensible and secure authorization with Nestjs and CASL

Written by: Tri Minh Sep 10, 2021           6 min read

Authorization is the process of determining which action a user can perform in your system. In this blog, we explained about two popular types of authorization: Role-based access control (RBAC) and Attributes-based access control (ABAC). Furthermore, we got our hands dirty by implementing authorization with Nestjs — our main backend framework.

Read more →

Aggregation debugging flow, what troubles are we having, what have we done, what can be done next

Written by: Tran V. Chung Oct 15, 2021           4 min read

One day your code still works fine in the local environment but crashes on production. As a programmer, you find what is causing the problem and then fix it. However, the debugging process sometimes consumes a lot of your time and effort.

In this blog, we will talk about our current Iggre Aggregation debugging flow, the difficulties we have been facing, and what can be continued to improve.

Read more →

An observation about MySQL join and why complex relation query can hit your app performance big time

Written by: Nguyen A. Tuan Dec 7, 2021            5 min read

Normalization is a way of structuring the database to reduce data redundancy and improve data integrity. Splitting your data into tables with relationships seems good, but the downside is that you need to make join queries against multiple tables if your use case requires the use of mixed data.

In this blog, we will discuss a particular case where, combined with the use of TypeORM and a relatively complex join query, our app performance was slowed down to a crawl.

Read more →