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.
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.
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.
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.
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.
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.
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.
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.
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.
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.