Custom CRM System: Benefits, Requirements & Cost of Development

Do you want to investigate the potential of having a custom CRM system for your business? What are the characteristics of custom CRM systems? Or curious about the cost and what it would take to build a custom CRM system? 

Customer relationship management (CRM) systems are widely available to businesses today. Custom software development is the greatest choice for creating and executing software from the beginning because one-size-fits-all software is not available.  Custom software enables businesses to focus a greater emphasis on the people who are a part of the organization, including employees, vendors, clients, and service users. The only way to guarantee that the software precisely meets the company’s demands is to create custom CRM software.
A custom CRM can help you ensure that your business takes advantage of all opportunities to engage, convert, and retain clients. Regardless of the size of your business, a custom CRM system might streamline your operations, improve your interactions with current clients, and elicit new leads and business opportunities.

This article will help you understand the advantages of a custom CRM system, the implementation requirements, and the development costs. You’ll also be able to understand why a customized CRM system is perfect for your business.

What is Custom CRM System?

CRM stands for Customer Relationship Management and refers to all strategies, techniques, tools, and technologies used by enterprises for developing, retaining, and acquiring customers.

Off-the-shelf (OTS) CRM is ready-to-use software that businesses may buy unmodified and use right away. It often includes modules for keeping track of sales possibilities, managing marketing campaigns, and setting up procedures for customer service.

Custom CRM systems can foster customer loyalty and automate several processes, saving businesses time and money. The main purpose of CRM software is to allow salespeople and marketers to better manage and analyze relationships with the business’s customers and potential customers.

Custom CRM vs. Off-the-Shelf CRM: What are the differences?

The biggest difference between a custom CRM and an off-the-shelf CRM is flexibility. An off-the-shelf CRM is frequently already created and prepared for usage, in contrast to a custom CRM, which is created especially for the requirements of the firm. Off-the-shelf CRMs can provide less adequate features and possibilities, but custom CRMs can be designed to satisfy the particular wants of the firm. Custom CRMs typically require more technical expertise and effort to set up and run than off-the-shelf CRMs do.

With a custom CRM, businesses may modify the program to meet their unique needs and requirements, ensuring the application is appropriate for their particular industry. Moreover, custom CRMs provide businesses the opportunity to integrate the application with their existing internal hardware and software, creating a seamless user experience. On the other hand, off-the-shelf CRMs were unable to offer as many customization and integration choices.

Usage of Custom CRM

With a customized CRM, any department in your company – from sales and customer service to business development, recruiting, and marketing – can benefit from improved methods of managing external connections and activities that are integral to success. As no two businesses are alike, a custom CRM is the only way to get precisely what you need without any unnecessary extras or having to make do with features that may not have been included in an off-the-shelf solution.

When it comes to investing in a CRM, you have three choices: 

buying an existing system, 
creating one with an in-house team, 
or outsourcing the development of a custom CRM. 

When you’re considering a CRM investment, it’s important to look into all of your options. Although buying an off-the-shelf CRM system could be the most cost-effective option, it might not be the greatest fit for the unique requirements of your company. While developing a custom CRM in-house can be a terrific option, it often takes a significant amount of time and resources and costs over $50,000. Instead, you might outsource the building of a custom CRM, which would be more cost-effective and efficient. These factors make it crucial to thoroughly consider all of your alternatives before making a choice.

Why is custom CRM important for your business? 

Custom CRM is important for your business since it offers a potent tool for managing client interactions and simplifying sales processes. It gives the ability to recognize, monitor, and control customer interactions, automate lead management, and examine customer data to learn more about how customers behave. This helps you better understand customer needs and create tailored customer experiences that drive customer loyalty and boost sales. As a consequence, improves client retention by raising customer satisfaction and a better understanding of their needs.

Types of Custom CRM

There are three major types of custom CRMs based on their function and the features they provide.

Collaborative

By establishing a clear framework for data exchange, collaborative CRM is intended to improve cooperation and communication. To create a custom CRM adapted to particular needs, it may be utilized internally inside a company or between external teams, such as partners.  Common features of this kind of system include group discussions, content sharing, and real-time activity updates.

Analytical

Analytical CRM systems are intended to help in planning. Such a system offers helpful data, analytics, and insights. It must be able to compile data from several sources, process it, and deliver real-time changes to be useful.

Operational

Operational CRMs focus heavily on simplifying and automating company processes to increase productivity. Lead processing, automated messaging to clients via various channels, and follow-ups are frequently helpful. You have two options when creating your solution: either choose certain features or mix various CRM kinds.

Benefits of Custom CRM

Because of their numerous benefits, custom CRM systems are becoming increasingly popular among businesses. These technologies not only enable businesses to give great and individualized customer care, but they also have a wide range of positive effects on customers. As a result, businesses are using CRM systems more often to increase customer service. Some of the benefits of custom CRM systems are:

Benefit #1 Time Saving

Organizations can easily obtain the information they need to complete some essential activities thanks to custom CRM systems. They can also automate certain monotonous chores. Therefore they may spend less time providing services to their clients. This allows them to focus on other important duties while letting the custom CRM handle additional tasks like data processing, analysis, customer care, sales, and marketing.

Benefit #2 Improved Efficiency

Using a custom CRM for task management gives employees a straightforward way to access the information they need to do their jobs and each employee can use their individualized dashboard. This makes their work easier and more productive; in fact, 60% of businesses report an increase in productivity from implementing a custom CRM.

Benefit #3 Enhanced Customer Relationship

Data about customers, such as their preferences, needs, and pain points, is readily available from a custom CRM. 84% of consumers believe that a business’s experience is just as important as the goods and services they provide. Custom CRM enables you to provide customized services to your consumers while addressing their pain points thanks to all the data available from the system. This can help you improve the way you communicate with your consumers, which will increase their likelihood of becoming repeat customers and help you grow your business.

Benefit #4 Access to in-depth Report

Making data-driven choices, such as adjusting prices or marketing tactics, requires the usage of reports that are produced by custom CRM using customer data. A custom CRM can give you reports that will help your business decision-making process because employing itself might boost report accuracy by 42%, according to studies.

Benefit #5 Increased Income

Сustom CRM system can handle practically all of your company’s requirements for attracting new clients, turning them into customers, and offering top-notch customer service. Sales are boosted as a result since the data it gives may be utilized to deliver better customer service and foster customer loyalty.

What to Consider Before Building Custom CRM Software

A good CRM tool will let you store contact information for clients and prospects, identify sales opportunities, keep a record of service issues, and manage marketing campaigns and tactics – all in one central location. Easy access to this data about customer interaction will allow anyone in your company to make informed decisions based on analytics. Before beginning to build a custom CRM system, there are several crucial considerations to be made. By doing this, you may decide as soon as possible and avoid making costly mistakes.

Setting the Goals

Prioritize the most crucial custom CRM platform goals after determining their importance. This will enable you to select the custom CRM system’s features and design that are most appropriate for your business.

Types of Custom CRM Systems

Decide on the type of CRM solutions you need after you’ve defined your objectives. CRM is divided into three categories: organizational, analytical, and collaborative. Each is made for a specific purpose.

Access Roles & Levels

Since several departments could utilize the custom CRM for various purposes, we recommend adding user functions and permissions. For instance, this may apply to top management, marketing directors, sales, and customer care personnel.

Custom CRM Features

Base your decision on which functionalities to include in your custom CRM on your objectives. Pay attention to the features that will be most beneficial for your business needs. Some of the most important features of custom CRM are dashboards, reports, tasks, contact management, lead management, and mobile access.

SaaS or Internal Software

Think about whether you’re going to create a custom CRM system for internal use or whether you’ll eventually transform it into a SaaS platform. It can be challenging and expensive to change the software architecture. Make sure your architecture is adaptable and scalable from the start if you choose the latter.

Cost of CRM Software Development 

Regardless of the size of your business, custom CRM software can benefit you. Estimating the associated costs can be difficult, so we’re here to explain the anticipated expenses. The cost of a custom CRM system depends on the features you want to include, the technical complexity, the development team’s experience, and other functionalities such as security measures.

To put things into perspective, if you manage a mid-sized business with more than 25 employees and your enterprise-sized subscription costs $125 per user each month, it works out to $3125 per month, $37,500 per year, and $187,500 over five years. The same amount of money, however, might be used to purchase custom CRM software that would be made to meet your unique needs. Determining the precise cost of your project is something we always advise doing in consultation with our specialists. We are aware that every customer is unique and needs a customized strategy to enable the smooth growth of their product. 

Summing Up

Are you looking for a way to improve your business performance? A custom CRM system can be the perfect solution. It provides businesses with a powerful platform for better managing customer relationships and increasing sales. With the right planning and guidance, you can create your own high-quality CRM from scratch that is tailored to your business needs. By centralizing customer data and tracking customer interactions, you can gain insights into customer behavior, create targeted marketing campaigns, and automate specific processes. This can help you improve efficiency, increase customer satisfaction, and boost sales. 

At Flatlogic, we provide full-cycle custom CRM development services to help you turn your concept into a working product. By leveraging our expertise and technical capabilities, you can create a high-quality custom CRM tailored to your business needs that will become the heart of your operations just in a few minutes. 

Custom CRM with Flatlogic

Flatlogic Platform offers an easy way to generate a custom CRM system with full control over the source code. You can make sure that you have the right features, scalability, and performance to match your business needs. Plus, with no-code development, you don’t need to be an expert programmer to make the necessary changes – making it easier to scale and customize as your business grows. With Flatlogic Platform, you have the flexibility to create a custom CRM solution that is tailored to your needs, while still having the scalability of more traditional development.

How to Create Custom CRM with Flatlogic Platform?

Using the Flatlogic Full-Stack Generator you can create CRUD and static applications in a few minutes. To start using the Platform, you need to register on the Flatlogic website. Clicking the “Sign in” button in the header will allow you to register for a Flatlogic account.

Step 1. Choosing the Tech Stack

In this step, you’re setting the name of your application and choosing the stack: Frontend, Backend, and Database.

Step 2. Choosing the Starter Template

In this step, you’re choosing the design of the web app.

Step 3. Schema Editor

In this step, you can create your database schema from scratch, import an existing schema or select one of the suggested schemas. 

To import your existing database, click the Import SQL button and select your .sql file. After that, your database will be opened in the Schema Editor where you can further edit your data (add/edit/delete entities).

If you are not familiar with database design and find it difficult to understand what tables are, we have prepared some ready-made sample schemas of real applications that you can modify for your application:

E-commerce app;
Time tracking app;
Book store;
Chat (messaging) app;
Blog.

Or, you can define a database schema and add a description by clicking on the “Generate with AI” button. You need to type the application’s description in the text area and hit “Send”. The application’s schema will be ready in around 15 seconds. You may either hit deploy immediately or review the structure to make manual adjustments.

Next, you can connect your GitHub and push your application code there. Or skip this step by clicking the Finish and Deploy button and in a few minutes, your application will be generated.

The post Custom CRM System: Benefits, Requirements & Cost of Development appeared first on Flatlogic Blog.

Flatlogic Admin Templates banner

Custom ERP System: Benefits, Requirements & Cost of Development

If you are looking for an effective and efficient way to manage your business, then a custom enterprise resource planning (ERP) system is the perfect solution. Custom ERP systems allow businesses to collect, store, and analyze information from several departments in one database, making it easier for executives to manage all fundamental business operations. Furthermore, the implementation of such software optimizes various workflows and processes. While there are various commercially available systems, custom ERP development ensures that you get a solution tailored specifically to your needs.

There is always room for development, even if your product is excellent. This is especially true for businesses looking for a custom ERP solution. The increasing need for specific software solutions serves as evidence of the need for a unique ERP system. 

If you are considering an ERP system for your business when making this important decision, ask yourself: What are the benefits of a custom ERP system? How does a custom ERP system compare to an off-the-shelf version? Is it the right fit for my business needs? Whatever you decide, it’s important to choose the right system for your business. In this article, we’ll talk about all of the above in developing custom ERP systems and provide some helpful tips on how to choose the right one.  Let’s dive into the details.

What is custom ERP?

ERP stands for Enterprise Resource Planning is a sophisticated software package that automates all business operations procedures. It aids businesses in optimizing efficiency and accuracy by automating data input and offering real-time visibility into their operations, consequently reducing the time and costs associated with managing operations.

An Off-the-shelf (OTS) ERP system is a pre-packaged, ready-to-deploy solution that comes with verified capabilities. It is designed to meet the needs of a wide range of businesses, however, its “one-size-fits-all” approach may not be the best solution for addressing specific challenges.

Custom ERP (as opposed to OTS solutions) system is designed around the unique requirements of a particular business. It offers a complete solution that unifies all of the business operations into a single platform and is created to match the particular needs of a particular business.

How Custom ERPs Different From Off-the-shelf ERPs

Custom ERPs are created especially for the individual or business that requires them, in contrast to off-the-shelf ERPs. This makes it possible to develop a solution that is more tailored to the unique requirements and needs of the customer and is also more effective, efficient, and affordable.  The capacity for custom ERPs to often be upgraded and modified over time typically allows for more flexibility and scalability.  Moreover, custom ERPs may be integrated into other systems to increase their versatility. Off-the-shelf ERPs, on the other hand, are pre-packaged, unchangeable systems with frequently limited scalability.

Usage of custom ERP

Custom ERP systems are produced to assist businesses in managing their operations more effectively. As they are customized to the particular requirements of the organization, they are more adaptable and able to offer a greater level of control. Sales, inventories, financial and operational procedures, customer support, and more could all be managed by custom ERP systems. Moreover, they can offer data to assist organizations in making wiser decisions. Customer Relationship Management (CRM), Human Resources (HR), supply chain management, and other business applications are frequently incorporated into custom ERP systems. This facilitates data access and the automation of numerous business operations. Custom ERP systems can help gain businesses a complete picture of their operations and can be extremely motivated, customer experience, and revenue.

Benefits of custom ERP

​​The main benefit of having custom software is that it can help focus on the specific needs and resources of businesses. It is essential to understand how to effectively incorporate and monitor all data management and workflows of the business from a single platform. These are some of the benefits of possessing a custom ERP system:

Benefit #1: Improved System Performance and Accessibility 

The goal of custom ERP is to be as effective and efficient as possible while offering more application availability than other systems. Businesses may easily adapt the software to their changing demands thanks to its modular architecture, saving money on potentially less-effective items.

Benefit #2: Balance Between Integration & Specification

Businesses may gain from an integrated workflow across departments with a custom ERP system, which will lead to better connections between buyers and suppliers. Different departments and teams can have their customized system thanks to the fact that custom ERP systems are created to match the specific needs of each business. Software developers may ensure the system is suited to the precise specifications and circumstances of the company’s numerous internal divisions and departments by developing and building a custom ERP that is adapted to the company’s particular system needs, workflow, and applications.

Benefit #3: No Need for Modifications

Businesses may save time and effort by using custom ERP systems instead of converting their current database architectures, applications, and tech stacks to the new system. Software development businesses may offer a ‘plug and play’ system by designing a custom ERP that suits the company’s current infrastructure, networks, capabilities, and resources, allowing enterprises to swiftly adopt the new system and begin profiting from its features.

Benefit #4: Custom Solutions for Your Business Needs

Custom ERP systems are created to deal with issues frequently encountered by businesses. The developers of such systems build the framework, features, and functionalities based on what they’ve picked up from past customers. This is a major plus point since it draws from the knowledge of many clients and businesses. 

Benefit #5: Automation Without Workflow Changes

Custom ERP can automate multiple operations within the company’s existing systems, databases, infrastructure, networks, and applications, without requiring extensive changes and modifications. This guarantees seamless integration while reducing any gaps between the company’s existing system and custom ERP. One important duty that may be automated with a custom ERP is the periodic report generation process, which makes it simpler to keep track of business activities.

Benefit #6: Improved User Experience and Customer Interface

Without a custom ERP system, many companies suffer from a lack of cohesion between their frontend website and backend database, middleware, and application systems. Even with a custom ERP system, plug-and-play capabilities for productivity applications and workflow systems are not always available. Software development companies can provide a solution to this issue by creating custom ERP frameworks and systems that allow for easy integration of existing infrastructure, workflow processes, and productivity applications.

Benefit #7: Monitor Performance with One Reporting System

Gain total visibility into all business processes, from Finance and Accounts Management, Human Resources to Manufacturing, Marketing, and Sales, and Supply Chain and Warehouse Management. Automate departmental workflow and track each department’s activities with a single reporting system, allowing for easy analysis of performance statistics and assurance that nothing is overlooked.

Benefit #8: Customized Reports & BI

Business is all about understanding the past and using that knowledge to make better decisions in the present. Statistics and analytics are essential for this, as they provide us with the data and insights needed to make informed choices. We can tailor our reports to our exact needs and integrate our business intelligence tools to gain even more statistics and insights.

Benefit #9: Boost Sales Through Enhanced CRM

Businesses may build a CRM that fits their unique demands and operations by deploying a custom ERP system. Their sales teams will be more efficient and productive thanks to our unique CRM system and platform. Several businesses are currently looking toward the use of consumer-level ERP solutions. The business may expand its marketing efforts and enhance the conversion of leads into sales by creating an ERP system that incorporates customer and CRM data. A smooth cooperation between the many departments involved in sales will be made possible by the custom ERP’s complete integration with all of the business’s sales platforms and assets. With this technology in place, sales teams may use customer behavior and purchase history information more effectively.

How to Formulate Clear Requirements for Custom ERP Development

Below are some identified necessary factors to create a custom ERP system that meets your individual needs. They include outlining your core requirements, considering how the system will fit with existing processes, and determining its scalability. With the help of this information, you can build the ideal custom ERP system for your business with confidence.

Functionality 

If you are looking to implement an ERP system, it is necessary to consider the functionality that it needs to include. To make this process easier, you can examine the features of your current system and identify what can be improved. Additionally, it is also beneficial to discuss with your team and ask questions such as: 

What processes can be automated for resource optimization?
What visibility or excessive reporting does each department require? Which information do different departments need access to? 
Why is a custom ERP system being considered in the first place? 

Answering these questions will help you to determine the functionality that needs to be included and assign user experience in the future.

Industry Research

Success depends on being current with developments in your industry. Research for most successful competitors and the top-performing apps for your sector. Learn about the benefits and potential pitfalls of these technologies by watching demos and reading reviews.  To ensure that your expectations are realistic and your custom ERP system meets the specific needs of your business. It is best to engage an experienced team of custom ERP development professionals to conduct a comprehensive market analysis.

Integration Requirements

The key to successful development is integrating your custom ERP system with external applications. The development team will have a clear knowledge of the project scope if you gather all of the software applications that each department in your company uses. Systems for managing client relationships, inventories, online storefronts, project management tools, accounting software, and more are examples of apps that should be on the list. Your development team will be better equipped to provide you with accurate time and cost estimates if you have this information available.

Deployment Type

Businesses must choose between an on-premises and cloud option considering custom ERP development. On-premise software is installed on the company’s hardware, while cloud-based systems are hosted on the vendor’s server and accessed online. In the past, most companies opted for on-premise ERP systems cloud solutions have become increasingly popular due to the numerous advantages they offer:

faster implementation, 
lower initial costs, 
less responsibility for security, 
easier collaboration between teams, 
automated updates provided by the vendor.

Cost of ERP Software Development 

Custom ERP solutions can range significantly in cost depending on the complexity and scope of the project. Factors that influence the total cost of a project include the number of people on the development team, the features and integrations required, and the duration of the project. Generally, custom ERP development projects can cost anywhere between $25,000 to $5,000,000, making it a more expensive option when compared to the average cost of a third-party system for resource planning which typically runs from $9,000 per user for mid-sized and large-scale enterprises respectively. The most crucial factors:

Size of Company

The size of your business will affect the amount of time and effort needed to create an ERP system. As the size of your business grows, the demand for a robust and comprehensive custom ERP system increases. This entails a more complex organizational structure, various business processes, and the need to integrate multiple software products across departments. To meet these demands, an experienced ERP development provider must be engaged to create a custom ERP system with all the required modules, integrations, and features. This will ensure that the custom ERP system is tailored to meet the specific needs of your business, no matter how large it may be.

Tech Stack 

When considering custom ERP development, there is a distinction between open-source software and proprietary solutions. Open-source software is free to the public, while proprietary solutions require the provider to pay a subscription fee for the platform. Additionally, the more sophisticated the technology, the more costly the developer’s time will be. When selecting the right custom ERP solution for your business, it is important to consider the cost implications of open-source versus proprietary solutions, as well as the complexity of the technology. This will ensure that you get the most suitable custom ERP system for your business needs.

Development Team 

For a comprehensive and versatile custom ERP system, it is necessary to hire a larger team of specialists, which will help to reduce the overall implementation timeline. Generally, the cost of a medium-complexity custom ERP solution is around $40,000 per module. This cost is comparable for testing, deployment, and data migration, so for a custom ERP system with 5 modules, the total cost will be approximately $250,000. To ensure that your custom ERP system is cost-efficient, it is important to accurately estimate the amount of time and resources that will be needed.

Summary

Custom ERP development allows companies to have a tailored system that meets their specific needs, allowing them to manage resources more efficiently, streamline their workflows, and modernize the enterprise. By investing in a customized solution, companies can ensure that their unique requirements are taken into account, as well as facilitate the adaptation of staff to the new system and avoid overspending on unnecessary features. 

Custom ERP with Flatlogic

Flatlogic Platform offers an easy way to generate a custom ERP solution with full control over the source code and scalability. With full control over the source code, you can make sure that you have the right features, scalability, and performance to match your business needs. Plus, with no-code development, you don’t need to be an expert programmer to make the necessary changes – making it easier to scale and customize as your business grows. With Flatlogic Platform, you have the flexibility to create a custom ERP solution that is tailored to your needs, while still having the scalability of more traditional development.

How to Create Custom ERP with Flatlogic Platform?

Using the Flatlogic Full-Stack Generator you can create CRUD and static applications in a few minutes. To start using the Platform, you need to register on the Flatlogic website. Clicking the “Sign in” button in the header will allow you to register for a Flatlogic account.

Step 1. Choosing the Tech Stack

In this step, you’re setting the name of your application and choosing the stack: Frontend, Backend, and Database.

Step 2. Choosing the Starter Template

In this step, you’re choosing the design of the web app.

Step 3. Schema Editor

In this step, you can create your database schema from scratch, import an existing schema or select one of the suggested schemas. 

To import your existing database, click the Import SQL button and select your .sql file. After that, your database will be opened in the Schema Editor where you can further edit your data (add/edit/delete entities).

If you are not familiar with database design and find it difficult to understand what tables are, we have prepared some ready-made sample schemas of real applications that you can modify for your application:

E-commerce app;
Time tracking app;
Book store;
Chat (messaging) app;
Blog.

Or, you can define a database schema and add a description by clicking on the “Generate with AI” button. You need to type the application’s description in the text area and hit “Send”. The application’s schema will be ready in around 15 seconds. You may either hit deploy immediately or review the structure to make manual adjustments.

Next, you can connect your GitHub and push your application code there. Or skip this step by clicking the Finish and Deploy button and in a few minutes, your application will be generated.

The post Custom ERP System: Benefits, Requirements & Cost of Development appeared first on Flatlogic Blog.

Flatlogic Admin Templates banner

Advanced Nextcloud Workflows with Amazon Simple Storage Service (Amazon S3)

If you are hosting your own server productivity suite or file storage software, you cannot overlook Nextcloud, an open source platform to store, share and manage files over the web.

In our previous blog post, we demonstrated how to securely connect your Nextcloud server with Amazon Simple Storage Service (Amazon S3), allowing you to scale storage flexibly to the cloud. In this blog post, we build on this idea and demonstrate advanced functionalities and optimizations, such as starting workflows when you upload a file and optimizing your Amazon S3 usage for cost.

Integration with AWS services

If you are using the setup from Part 1 of this blog, then you have successfully extended your Nextcloud to Amazon S3 using the Nextcloud connector for S3. It will allow you to use your Amazon S3 storage as any other Nextcloud storage to share and receive files that are directly transferred to Amazon S3.

However, there are a lot of great features to make even more of this combination, save costs, and stay on top of your data: First, Amazon S3 offers advanced functionalities to optimize costs by helping to place data into different (hot and cold) storage classes that suit your use case. For instance, you can use Amazon S3 lifecycle rules to manage storage lifecycle explicitly or let Amazon S3 Intelligent-Tiering optimize storage classes based on your usage patterns.

Second, the existing integration of Nextcloud with Amazon S3 is an entry point to other services offered by AWS. For instance, file arrivals or changes also allow you to trigger functions or workflows, such as starting AWS Lambda functions to process files managed by Nextcloud or you can use Amazon CloudWatch to monitor files and access.

Finally, there are advanced considerations depending on your security needs. For instance, you can use different methods of encryption from Nextcloud, Amazon S3, or AWS Key Management Service (AWS KMS) to encrypt your data on the cloud. Here, we will present these advanced topics in more detail.

Cost & Cost-efficiency optimization

One reason to run your own server and use Amazon S3 as storage is that you only pay for what you use, for as long as you use it. This is often cheaper and less hassle than buying a long-term plan or provisioning the maximum capacity you might need beforehand. This is especially true for use cases where you need a temporary extension of your Nextcloud, not a permanent one. However, in addition to the competitive pay-as-you go prices, there are three features that will help you make the most of Amazon S3 for almost no effort: S3 has a Free Tier offering free base storage, the AWS cost calculator allows you to obtain a cost estimate before you add your data, and S3 Intelligent-Tiering is available to optimize storage classes.

Free tier

Amazon S3 offers a “free tier” to new users of 5GB or less of storage and including a corresponding amount of monthly access transactions. You can try the setup presented here under the free tier and even run smaller setups entirely for free.

AWS cost calculator

The AWS calculator allows you to quickly obtain a cost estimate. For instance, when selecting a computation for S3 on the website, we can enter the relevant inputs for S3 cost as shown in this image. For illustration, we estimate in the screenshot the cost for storing 10GB of pictures for a month with a reasonable access frequency of 10,000 read and 1,000 write access. This results in a cost estimate of about 24 cents.

Intelligent Tiering & optimizing storage classes

Optimizing the baseline cost of using Amazon S3 Standard for storage can be done by selecting a storage class tailored to your specific usage (https://aws.amazon.com/s3/pricing/) and creating lifecycle policies to move the files between them (https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). However, there is an easier way that is better suited to the use of Amazon S3 with Nextcloud, where access frequencies change over time and are often unpredictable: Amazon S3 Intelligent-Tiering (https://aws.amazon.com/about-aws/whats-new/2018/11/s3-intelligent-tiering/). Once activated on your bucket, S3 Intelligent-Tiering automatically moves objects between storage classes optimized for you in terms of access and storage costs for frequent access and infrequent access.

To activate Intelligent-Tiering on your bucket, navigate to Amazon S3 under the AWS Management Console, select your bucket, and under properties select “Intelligent-Tiering Archive configurations.” Enable it for all objects in the bucket. In addition, if you know that most of the data in the bucket will be rarely accessed after an initial phase, you can even activate the Archive Access Tiers. This option offers even higher savings on storage, yet comes at a slightly higher price for data access. After you select create, Amazon S3 will optimize storage classes and cost for you.

Data Lifecycle and automatic expiration of files

Apart from using the right storage class, you can also use Amazon S3 lifecycle policies to automatically delete files that are no longer needed. For instance, when sharing pictures with friends, pictures might only be relevant while everyone uploads and downloads them, but can be deleted after a few months. To enable lifecycle policies, navigate to Amazon S3 in your console, select your S3 bucket, go to the “Management” tab and select “Create lifecycle rule.” This will allow you to move files to a specific storage class or delete them entirely, once they reach a specific age.

Advanced considerations for managing and securing your data

In addition to extending and optimizing storage, the combination of Nextcloud and AWS opens a whole series of great functionalities. Here is a selection of typical options that show how to make the most of your Amazon S3 connection to Nextcloud.

Share an entire external Amazon S3 storage between users

When creating a connection to an external storage service using the Nextcloud frontend, you can decide who should have access to that storage. More precisely, you can select users or user groups that will share that storage. This is useful, for instance, when you have users belonging to the same team that should share storage, rather than storage that is accessible to a single user.

To use this feature it is a good practice to first create a separate user group in Nextcloud (let us call it “S3Users”). Next, using the Nextcloud external storage configuration we allow access to the external storage for that group instead of for individual users. Managing access to the shared storage then becomes a matter of adding or removing users from that group.

Sharing files and folders on external with individual users or via link

Sharing an entire external storage between users is an independent feature from the Nextcloud standard features for sharing files and folders with internal users (via shares) or external users (via links). However, for external storage, sharing files and folders is deactivated by default. To enable that, navigate to the setup page of your external storage and open the advanced menu (three dots) and select “Enable Sharing.” Now you are able to share the folders located on Amazon S3 as you would with any other Nextcloud folders.

Server- side Encryption using AWS KMS vs client-side encryption using Nextcloud

Both AWS and Nextcloud offer encryption for your files. To give you an idea when to use server-side encryption on AWS (using Amazon S3 or AWS KMS), client-side encryption in Nextcloud or even both at the same time, let us consider their purpose.

Server-side encryption on the cloud using Amazon S3 or AWS KMS allows you to encrypt files when they are stored or retrieved. These files are protected against attackers that do not have the correct encryption key or access to the key as an additional layer of security to the storage access rights. In addition, when using AWS KMS managed keys, you can control on a granular level which user or service should have access to your files. For the present case this is useful to grant access to the encryption key to those AWS services (such as AWS Lambda) that should read or manipulate the files, for instance to generate reports or convert file formats. Encryption on AWS using S3 managed encryption serves as a fundamental security feature that you should always activate and will not limit how you can read or process your files. Encryption using AWS KMS managed keys gives you an additional more granular way to manage the underlying encryption keys.

To activate encryption on AWS, go to Amazon S3 on the console, select your bucket and activate the encryption type (Amazon S3 or AWS KMS managed) on the bucket. Note that if you use AWS KMS managed keys, any user accessing and writing the files needs the AWS Identity and Access Management (IAM) permissions to use the key you select.

Client-side encryption provided by Nextcloud encrypts files with a key that is located on the Nextcloud server and that is therefore not available in AWS. In other words, using this method, files can only be decrypted when using Nextcloud. This can be an advantage when the AWS account is shared by many users because the encryption prevents users with access to your AWS account from decrypting the files. At the same time, it means that AWS services cannot help to recover your files when you lose access to your encryption key. It also means AWS services can only act on encrypted files (e.g. moving files), preventing processing of their content. Hence the decision to use this client-side encryption needs to consider the use of such integrations.

Integrate with AWS Tools & Workflows

We have already mentioned that the arrival (or deletion) of a file may be used to trigger follow-up actions. Since AWS offers hundreds of services that could be relevant depending on the use case, we will only showcase one example here that demonstrates the use of this powerful feature: picture conversion and distribution.

Imagine you want to receive uploaded pictures from multiple friends and allow all of them to download the pictures that others uploaded. Also, you want to standardize naming and convert their format.

To solve this problem, you can create one folder on Nextcloud that is located inside of the external source that connects to Amazon S3, similar to what we would do with Nextcloud’s internal storage. Then share a (write-only) link to that folder with your friends to collect their uploads. Also, you create another folder and share a (read-only) link to that folder such that files placed inside it can be retrieved by your friends. With the two folders set up via Nextcloud, you only need to move and convert the files using AWS.

Working with the uploaded files is simple on Amazon S3. Whenever a file arrives in the upload folder (i.e. is uploaded though Nextcloud by one of our friends), it starts an AWS Lambda function using Amazon S3 Bucket Notifications or Amazon EventBridge Rules. The AWS Lambda function then processes the file (e.g. standardizes and converts the picture), and moves it to the folder with the read-only access link. For more information on the conversion itself, consider this tutorial, where uploaded pictures are converted into thumbnails. Hence, whenever a file is now uploaded to the write-only folder, it is automatically converted and made available for download in the read-only folder in Nextcloud within seconds.

Monitoring

To keep you on top of your data, AWS allows you to set up monitoring for your storage in seconds. More precisely, Amazon S3 will automatically deliver to Amazon CloudWatch crucial metrics such as total daily storage or number of objects. Other metrics, such as access frequency, can be opted into at a low cost. If you are using Amazon S3 as external storage and require transparency on the different operations happening in your bucket, these metrics can be used to create monitoring dashboards, trigger alarms, or automate follow-up actions, such as removing access entirely. Hence, CloudWatch allows you to keep on top of all the activities that happen with your data on Amazon S3.

Summary

In this blog, we described how Amazon S3 creates the link between your Nextcloud and all of the features and services that AWS provides. We shared how to use cost optimization features, data lifecycle management tools, and encryption to make the most of Nextcloud. If you are not using AWS yet, you now have a first impression of all the possibilities this will open up. With the AWS Free Tier allowance, you can even start for free.

Flatlogic Admin Templates banner

Improve collaboration between teams by using AWS CDK constructs

There are different ways to organize teams to deliver great software products. There are companies that give the end-to-end responsibility for a product to a single team, like Amazon’s Two-Pizza teams, and there are companies where multiple teams split the responsibility between infrastructure (or platform) teams and application development teams. This post provides guidance on how collaboration efficiency can be improved in the case of a split-team approach with the help of the AWS Cloud Development Kit (CDK).

The AWS CDK is an open-source software development framework to define your cloud application resources. You do this by using familiar programming languages like TypeScript, Python, Java, C# or Go. It allows you to mix code to define your application’s infrastructure, traditionally expressed through infrastructure as code tools like AWS CloudFormation or HashiCorp Terraform, with code to bundle, compile, and package your application.

This is great for autonomous teams with end-to-end responsibility, as it helps them to keep all code related to that product in a single place and single programming language. There is no need to separate application code into a different repository than infrastructure code with a single team, but what about the split-team model?

Larger enterprises commonly split the responsibility between infrastructure (or platform) teams and application development teams. We’ll see how to use the AWS CDK to ensure team independence and agility even with multiple teams involved. We’ll have a look at the different responsibilities of the participating teams and their produced artifacts, and we’ll also discuss how to make the teams work together in a frictionless way.

This blog post assumes a basic level of knowledge on the AWS CDK and its concepts. Additionally, a very high level understanding of event driven architectures is required.

Team Topologies

Let’s first have a quick look at the different team topologies and each team’s responsibilities.

One-Team Approach

In this blog post we will focus on the split-team approach described below. However, it’s still helpful to understand what we mean by “One-Team” Approach: A single team owns an application from end-to-end. This cross-functional team decides on its own on the features to implement next, which technologies to use and how to build and deploy the resulting infrastructure and application code. The team’s responsibility is infrastructure, application code, its deployment and operations of the developed service.

If you’re interested in how to structure your AWS CDK application in a such an environment have a look at our colleague Alex Pulver’s blog post Recommended AWS CDK project structure for Python applications.

Split-Team Approach

In reality we see many customers who have separate teams for application development and infrastructure development and deployment.

Infrastructure Team

What I call the infrastructure team is also known as the platform or operations team. It configures, deploys, and operates the shared infrastructure which other teams consume to run their applications on. This can be things like an Amazon SQS queue, an Amazon Elastic Container Service (Amazon ECS) cluster as well as the CI/CD pipelines used to bring new versions of the applications into production.
It is the infrastructure team’s responsibility to get the application package developed by the Application Team deployed and running on AWS, as well as provide operational support for the application.

Application Team

Traditionally the application team just provides the application’s package (for example, a JAR file or an npm package) and it’s the infrastructure team’s responsibility to figure out how to deploy, configure, and run it on AWS. However, this traditional setup often leads to bottlenecks, as the infrastructure team will have to support many different applications developed by multiple teams. Additionally, the infrastructure team often has little knowledge of the internals of those applications. This often leads to solutions which are not optimized for the problem at hand: If the infrastructure team only offers a handful of options to run services on, the application team can’t use options optimized for their workload.

This is why we extend the traditional responsibilities of the application team in this blog post. The team provides the application and additionally the description of the infrastructure required to run the application. With “infrastructure required” we mean the AWS services used to run the application. This infrastructure description needs to be written in a format which can be consumed by the infrastructure team.

While we understand that this shift of responsibility adds additional tasks to the application team, we think that in the long term it is worth the effort. This can be the starting point to introduce DevOps concepts into the organization. However, the concepts described in this blog post are still valid even if you decide that you don’t want to add this responsibility to your application teams. The boundary of who is delivering what would then just move more into the direction of the infrastructure team.

To be successful with the given approach, the two teams need to agree on a common format on how to hand over the application, its infrastructure definition, and how to bring it to production. The AWS CDK with its concept of Constructs provides a perfect means for that.

Primer: AWS CDK Constructs

In this section we take a look at the concepts the AWS CDK provides for structuring our code base and how these concepts can be used to fit a CDK project into your team topology.

Constructs

Constructs are the basic building block of an AWS CDK application. An AWS CDK application is composed of multiple constructs which in the end define how and what is deployed by AWS CloudFormation.

The AWS CDK ships with constructs created to deploy AWS services. However, it is important to understand that you are not limited to the out-of-the-box constructs provided by the AWS CDK. The true power of AWS CDK is the possibility to create your own abstractions on top of the default constructs to create solutions for your specific requirement. To achieve this you write, publish, and consume your own, custom constructs. They codify your specific requirements, create an additional level of abstraction and allow other teams to consume and use your construct.

We will use a custom construct to separate the responsibilities between the the application and the infrastructure team. The application team will release a construct which describes the infrastructure along with its configuration required to run the application code. The infrastructure team will consume this construct to deploy and operate the workload on AWS.

How to use the AWS CDK in a Split-Team Setup

Let’s now have a look at how we can use the AWS CDK to split the responsibilities between the application and infrastructure team. I’ll introduce a sample scenario and then illustrate what each team’s responsibility is within this scenario.

Scenario

Our fictitious application development team writes an AWS Lambda function which gets deployed to AWS. Messages in an Amazon SQS queue will invoke the function. Let’s say the function will process orders (whatever this means in detail is irrelevant for the example) and each order is represented by a message in the queue.

The application development team has full flexibility when it comes to creating the AWS Lambda function. They can decide which runtime to use or how much memory to configure. The SQS queue which the function will act upon is created by the infrastructure team. The application team does not have to know how the messages end up in the queue.

With that we can have a look at a sample implementation split between the teams.

Application Team

The application team is responsible for two distinct artifacts: the application code (for example, a Java jar file or an npm module) and the AWS CDK construct used to deploy the required infrastructure on AWS to run the application (an AWS Lambda Function along with its configuration).

The lifecycles of these artifacts differ: the application code changes more frequently than the infrastructure it runs in. That’s why we want to keep the artifacts separate. With that each of the artifacts can be released at its own pace and only if it was changed.

In order to achieve these separate lifecycles, it is important to notice that a release of the application artifact needs to be completely independent from the release of the CDK construct. This fits our approach of separate teams compared to the standard CDK way of building and packaging application code within the CDK construct.

But how will this be done in our example solution? The team will build and publish an application artifact which does not contain anything related to CDK.
When a CDK Stack with this construct is synthesized it will download the pre-built artifact with a given version number from AWS CodeArtifact and use it to create the input zip file for a Lambda function. There is no build of the application package happening during the CDK synth.

With the separation of construct and application code, we need to find a way to tell the CDK construct which specific version of the application code it should fetch from CodeArtifact. We will pass this information to the construct via a property of its constructor.

For dependencies on infrastructure outside of the responsibility of the application team, I follow the pattern of dependency injection. Those dependencies, for example a shared VPC or an Amazon SQS queue, are passed into the construct from the infrastructure team.

Let’s have a look at an example. We pass in the external dependency on an SQS Queue, along with details on the desired appPackageVersion and its CodeArtifact details:

export interface OrderProcessingAppConstructProps {
    queue: aws_sqs.Queue,
    appPackageVersion: string,
    codeArtifactDetails: {
        account: string,
        repository: string,
        domain: string
    }
}

export class OrderProcessingAppConstruct extends Construct {

    constructor(scope: Construct, id: string, props: OrderProcessingAppConstructProps) {
        super(scope, id);

        const lambdaFunction = new lambda.Function(this, ‘OrderProcessingLambda’, {
            code: lambda.Code.fromDockerBuild(path.join(__dirname, ‘..’, ‘bundling’), {
                buildArgs: {
                    ‘PACKAGE_VERSION’ : props.appPackageVersion,
                    ‘CODE_ARTIFACT_ACCOUNT’ : props.codeArtifactDetails.account,
                    ‘CODE_ARTIFACT_REPOSITORY’ : props.codeArtifactDetails.repository,
                    ‘CODE_ARTIFACT_DOMAIN’ : props.codeArtifactDetails.domain
                }
            }),
            runtime: lambda.Runtime.NODEJS_16_X,
            handler: ‘node_modules/order-processing-app/dist/index.lambdaHandler’
        });
        const eventSource = new SqsEventSource(props.queue);
        lambdaFunction.addEventSource(eventSource);
    }
}

Note the code lambda.Code.fromDockerBuild(…): We use AWS CDK’s functionality to bundle the code of our Lambda function via a Docker build. The only things which happen inside of the provided Dockerfile are:

the login into the AWS CodeArtifact repository which holds the pre-built application code’s package
the download and installation of the application code’s artifact from AWS CodeArtifact (in this case via npm)

If you are interested in more details on how you can build, bundle and deploy your AWS CDK assets I highly recommend a blog post by my colleague Cory Hall: Building, bundling, and deploying applications with the AWS CDK. It goes into much more detail than what we are covering here.

Looking at the example Dockerfile we can see the two steps described above:

FROM public.ecr.aws/sam/build-nodejs16.x:latest

ARG PACKAGE_VERSION
ARG CODE_ARTIFACT_AWS_REGION
ARG CODE_ARTIFACT_ACCOUNT
ARG CODE_ARTIFACT_REPOSITORY

RUN aws codeartifact login –tool npm –repository $CODE_ARTIFACT_REPOSITORY –domain $CODE_ARTIFACT_DOMAIN –domain-owner $CODE_ARTIFACT_ACCOUNT –region $CODE_ARTIFACT_AWS_REGION
RUN npm install order-processing-app@$PACKAGE_VERSION –prefix /asset

Please note the following:

we use –prefix /asset with our npm install command. This tells npm to install the dependencies into the folder which CDK will mount into the container. All files which should go into the output of the docker build need to be placed here.
the aws codeartifact login command requires credentials with the appropriate permissions to proceed. In case you run this on for example AWS CodeBuild or inside of a CDK Pipeline you need to make sure that the used role has the appropriate policies attached.

Infrastructure Team

The infrastructure team consumes the AWS CDK construct published by the application team. They own the AWS CDK Stack which composes the whole application. Possibly this will only be one of several Stacks owned by the Infrastructure team. Other Stacks might create shared infrastructure (like VPCs, networking) and other applications.

Within the stack for our application the infrastructure team consumes and instantiates the application team’s construct, passes any dependencies into it and then deploys the stack by whatever means they see fit (e.g. through AWS CodePipeline, GitHub Actions or any other form of continuous delivery/deployment).

The dependency on the application team’s construct is manifested in the package.json of the infrastructure team’s CDK app:

{
  “name”: “order-processing-infra-app”,
  …
  “dependencies”: {
    …
    “order-app-construct” : “1.1.0”,
    …
  }
  …
}

Within the created CDK Stack we see the dependency version for the application package as well as how the infrastructure team passes in additional information (like e.g. the queue to use):

export class OrderProcessingInfraStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);   

    const orderProcessingQueue = new Queue(this, ‘order-processing-queue’);

    new OrderProcessingAppConstruct(this, ‘order-processing-app’, {
       appPackageVersion: “2.0.36”,
       queue: orderProcessingQueue,
       codeArtifactDetails: { … }
     });
  }
}

Propagating New Releases

We now have the responsibilities of each team sorted out along with the artifacts owned by each team. But how do we propagate a change done by the application team all the way to production? Or asked differently: how can we invoke the infrastructure team’s CI/CD pipeline with the updated artifact versions of the application team?

We will need to update the infrastructure team’s dependencies on the application teams artifacts whenever a new version of either the application package or the AWS CDK construct is published. With the dependencies updated we can then start the release pipeline.

One approach is to listen and react to events published by AWS CodeArtifact via Amazon EventBridge. On each release AWS CodeArtifact will publish an event to Amazon EventBridge. We can listen to that event, extract the version number of the new release from its payload and start a workflow to update either our dependency on the CDK construct (e.g. in the package.json of our CDK application) or a update the appPackageVersion which the infrastructure team passes into the consumed construct.

Here’s how a release of a new app version flows through the system:

Figure 1 – A release of the application package triggers a change and deployment of the infrastructure team’s CDK Stack

The application team publishes a new app version into AWS CodeArtifact
CodeArtifact triggers an event on Amazon EventBridge
The infrastructure team listens to this event
The infrastructure team updates its CDK stack to include the latest appPackageVersion

The infrastructure team’s CDK Stack gets deployed

And very similar the release of a new version of the CDK Construct:

Figure 2 – A release of the application team’s CDK construct triggers a change and deployment of the infrastructure team’s CDK Stack

The application team publishes a new CDK construct version into AWS CodeArtifact
CodeArtifact triggers an event on Amazon EventBridge
The infrastructure team listens to this event
The infrastructure team updates its dependency to the latest CDK construct
The infrastructure team’s CDK Stack gets deployed

We will not go into the details on how such a workflow could look like, because it’s most likely highly custom for each team (think of different tools used for code repositories, CI/CD). However, here are some ideas on how it can be accomplished:

Updating the CDK Construct dependency

To update the dependency version of the CDK construct the infrastructure team’s package.json (or other files used for dependency tracking like pom.xml) needs to be updated. You can build automation to checkout the source code and issue a command like npm install [email protected]_VERSION (where NEW_VERSION is the value read from the EventBridge event payload). You then automatically create a pull request to incorporate this change into your main branch. For a sample on what this looks like see the blog post Keeping up with your dependencies: building a feedback loop for shared librares.

Updating the appPackageVersion

To update the appPackageVersion used inside of the infrastructure team’s CDK Stack you can either follow the same approach outlined above, or you can use CDK’s capability to read from an AWS Systems Manager (SSM) Parameter Store parameter. With that you wouldn’t put the value for appPackageVersion into source control, but rather read it from SSM Parameter Store. There is a how-to for this in the AWS CDK documentation: Get a value from the Systems Manager Parameter Store. You then start the infrastructure team’s pipeline based on the event of a change in the parameter.

To have a clear understanding of what is deployed at any given time and in order to see the used parameter value in CloudFormation I’d recommend using the option described at Reading Systems Manager values at synthesis time.

Conclusion

You’ve seen how the AWS Cloud Development Kit and its Construct concept can help to ensure team independence and agility even though multiple teams (in our case an application development team and an infrastructure team) work together to bring a new version of an application into production. To do so you have put the application team in charge of not only their application code, but also of the parts of the infrastructure they use to run their application on. This is still in line with the discussed split-team approach as all shared infrastructure as well as the final deployment is in control of the infrastructure team and is only consumed by the application team’s construct.

About the Authors

As a Solutions Architect Jörg works with manufacturing customers in Germany. Before he joined AWS in 2019 he held various roles like Developer, DevOps Engineer and SRE. With that Jörg enjoys building and automating things and fell in love with the AWS Cloud Development Kit.

Mo joined AWS in 2020 as a Technical Account Manager, bringing with him 7 years of hands-on AWS DevOps experience and 6 year as System operation admin. He is a member of two Technical Field Communities in AWS (Cloud Operation and Builder Experience), focusing on supporting customers with CI/CD pipelines and AI for DevOps to ensure they have the right solutions that fit their business needs.

Dive Deeper into Data Lake for Nonprofits, a New Open Source Solution from AWS for Salesforce for Nonprofits

Nonprofits are using cloud-based solutions for fundraising, donor and member management, and communications. With this move online, they have access to more data than ever. This data has the potential to transform their missions and increase their impact. However, sharing, connecting, and interpreting data from many different sources can be a challenge. To address this challenge, Amazon Web Services (AWS) and AWS Partner Salesforce for Nonprofits announced the general availability of Data Lake for Nonprofits – Powered by AWS.

Data Lake for Nonprofits is an open source application that helps nonprofit organizations set up a data lake in their AWS account and populate it with the data that they have in the Salesforce Non Profit Success Pack (NPSP) schema. This data resides in Amazon Relational Database Service (Amazon RDS), where it can be accessed by other AWS services like Amazon Redshift and Amazon QuickSight, as well as Business Intelligence products such as Tableau.

This post is written for developers and solution integrator partners who want to get a closer look at the architecture and implementation of Data Lake for Nonprofits to better understand the solution.  We’ll walk you through the architecture and how to set up a data lake using AWS Amplify.

Prerequisites

To follow along with this walkthrough, you must have the following prerequisites:

An AWS Account

An AWS Identity and Access Management (IAM) user with Administrator permissions that enables you to interact with your AWS account
A Salesforce account that has the Non Profit Success Pack managed packages installed
A Salesforce user that has API permissions to interact with your Salesforce org

Git command line interface installed on your computer for cloning the repository

Node.js and Yarn Package Manager installed on your computer for cleanup

Solution Overview

The following diagram shows the solution’s high-level architecture.

Salesforce and AWS have released the source code in GitHub under a BSD 3-Clause license so nonprofits and their cloud partners can use, customize, and innovate on top of it at no cost.

Use your command-line shell to clone the GitHub repository for your own development.

git clone https://github.com/salesforce-misc/Data-Lake-for-Nonprofits

The solution consists of two tiers which are frontend and backend applications. In the following sections, we’ll walk you through both architectures and show you how to install a data lake.

Frontend Walkthrough

We have developed the frontend application using React with Typescript, and it has three layers.

The view layer comprises React components.
The model layer is where the most of the application logic is maintained. The models are Mobx State Tree (MST) types with properties, actions, and computed values. Relationships between models are expressed as MST trees.
The API layer is used to communicate with AWS Services using AWS SDK for JavaScript v3.

The frontend application has been built and zipped for AWS Amplify using GitHub Workflows. This is done for every change in the repository. The latest build can be found in the GitHub repository.

Backend Walkthrough

We have developed the backend application using using AWS CloudFormation templates that can be found under the infra/cf folder in the GitHub repository. These templates will provision the resources on your AWS account for your data lake as below.

vpc.yaml template is used to provision the Amazon Virtual Private Cloud (Amazon VPC) that the application will be running in.

buckets.yaml template is used to provision several Amazon Simple Storage Service (Amazon S3) buckets.

datastore.yaml is used to provision an Amazon Relational Database Service (Amazon RDS) PostgreSQL database.

athena.yaml is used to provision Amazon Athena with a custom workgroup.

step_function.yaml is used to provision AWS Step Functions and related AWS Lambda functions. Step Functions is used to orchestrate the Lambda functions that are going to import your data from your Salesforce account into Amazon RDS for PostgreSQL using an Amazon AppFlow connection.

Lambda functions can be found in the infra/lambdasfolder.

src/cleanupSQL.ts performs the movement of data from the data-loading database schema to the public database schema.

src/filterSchemaListing.ts filters out S3’s “schema/” key as well as queries Salesforce for deleted objects.

src/finalizeSQL.ts drops tables that will be no longer needed in the application to save cost.

src/listEntities.ts calls APIs since the output is too large for Step Functions.

src/processImport.ts imports a Lambda function which writes to RDS the data which is sent to the Amazon SQS queue.

src/pullNewSchema.ts queries Amazon AppFlow and then Salesforce to gather any new or updated fields.

src/setupSQL.ts sets up the data-loading database schema and creates the tables based on the schema file.

src/statusReport.ts performs a status update to S3 based on where it is in the Step Functions State Machine.

src/updateFlowSchema.ts uses the updated schema file on S3 to create or update the Amazon AppFlow flow.

Amazon Simple Queue Service (Amazon SQS) is used to queue the import data so that the Lambda function can use it.

Amazon EventBridge is used to set up a job that syncs your data based on your choice of frequency.

Amazon CloudWatch is used to keep logs during installation as well as synchronization. The application creates a CloudWatch dashboard to track the usage of the data lake.

Deploy the Frontend Application using AWS Amplify

The latest release of the frontend application can be downloaded from the GitHub repository and deployed in AWS Amplify in your AWS account as explained in the User Guide. It typically takes a few minutes to deploy the frontend application, after which a URL to the frontend application is presented. The URL should look like the link here:

https://abc.xyz….amplifyapp.com

When you open the URL, you will see the frontend application, which provides a wizard-like guide to the steps. Each step will guide you through the instructions on how to move forward.

Step 1 will ask for an Access Key ID and Secret Access key for an IAM user of your AWS account. The application shows guidance on how to log in to AWS Management Console and use Identity and Access Management (IAM) to create the IAM user with admin permissions.

This step also requires you to select the AWS region where you would like to create the Amazon AppFlow connection and deploy the data lake.

Step 2 establishes the connection to your Salesforce account. The application guides the user to leverage Amazon AppFlow, which allows AWS to connect to your Salesforce account.

At the end of the page, use the drop down menu to select the connection name and click Next.

Step 3 will help you choose the data objects and set the frequency of data synchronization for your data lake. The data import option can be set to any date and time, and you can choose the frequency from the given options: daily/weekly/monthly.

This page further displays the complete set of objects from your Salesforce account. Choose the necessary objects that you want to import into your data lake.

In Step 4, you can review the data lake configuration and confirm. This step is where you are allowed to go back to the previous step to make any changes if needed.

Step 5 is where the data lake is provisioned, and then your data is imported. This can take half an hour to several hours, depending on the size of the data in your Salesforce account.

Once the data lake is ready, in Step 6, you can find the instructions and information needed to connect to your data lake using business intelligence applications such as Tableau Cloud and Tableau Desktop that will help you visualize your data and analyze it per your business needs.

Cleanup

Keeping the data lake in your AWS account will incur charges due to the resources provisioned. To avoid incurring future charges, run these commands on your terminal where you cloned the GitHub repository and follow the instructions:

cd Data-Lake-for-Nonprofits/app

yarn delete-datalake

Conclusion

This post showed you how AWS services are used to transform your Salesforce data into a data lake. It uses AWS Amplify to host the frontend application and provisions several AWS services for the data lake backend. The architecture is based on the successful collaboration between AWS and Salesforce to build an open source data lake solution using a simple and easy-to-use, wizard-like application.

We invite you to clone the GitHub repository and develop your own solution for your needs, provide feedback, and contribute to the project.

Flatlogic Admin Templates banner

How to Build Your ERP System in Minutes

Do you need an effective way to manage and optimize your business operations? Enterprise Resource Planning (ERP) systems are the perfect tools to help you do just that. With an ERP system, you can manage various tasks, including financial management, supply chain management, project management, and customer relationship management. While these systems can be expensive and complex to purchase and implement, you can build your system in a relatively short amount of time. This article will discuss the steps to create your ERP system from scratch, using open-source software and other readily available resources. With this knowledge, you can benefit from the power of an ERP system without the expensive cost of purchasing a commercial solution. So, if you’re looking for an efficient, cost-effective way to manage your business operations, trust the expert advice in this article and read on to find out how to create your ERP system from scratch.

What is an ERP?

ERP (Enterprise Resource Planning) system is a centralized platform that helps organizations manage their business processes and data across various departments and functions, such as finance, human resources, supply chain, and operations. It streamlines multiple processes, such as accounting, inventory management, and project management, and provides real-time data visibility and insights to help organizations make informed decisions.

Modern ERP solutions include in particular important business areas such as

Financials & Accounting. This includes financial management, budgeting, accounting, and cash flow management. 

Human Resources (HR). This includes payroll, time and attendance, recruitment, benefits, and training management. 

Supply Chain Management. This includes inventory and warehouse management, order management, supplier management, and logistics management. 

Manufacturing. This includes production planning and scheduling, quality control, and cost management. 

Customer Relationship Management (CRM). This includes sales automation, marketing automation, customer service, customer analytics, and customer support. 

Business Intelligence. This includes data mining, data visualization, predictive analytics, and dashboard reporting.

Analytics. This includes predictive analytics, data mining, and machine learning.

Building your ERP system from scratch can be a daunting task, but with the right tools and resources, it can be done in a matter of minutes. Here’s how you can get started:

Identify your business needs and objectives. The first step in building an ERP system is determining what you need it to do for your organization. Consider your current business processes and identify the pain points and inefficiencies that an ERP system could address. Determine what features and functionality are essential for your business and prioritize them accordingly.

Choose the right platform. There are many options available when it comes to choosing an ERP platform, including open-source options and commercial options. Consider factors such as the cost, scalability, integrations, and user-friendliness of the platform when making your decision.

Set up and configure the platform. Once you’ve chosen an ERP platform, it’s time to set it up and configure it to meet your specific business needs. This may involve importing data from your existing systems, creating custom modules or integrations, and setting up user roles and permissions.

Train your team. An ERP system is only as good as the people using it, so it’s essential to provide training to your team to ensure they are comfortable and proficient with the new system. This may involve in-person training sessions, online tutorials, or other resources to help your team get up to speed quickly.

Go live and monitor performance. Once your ERP system is set up and configured, it’s time to go live and start using it for your day-to-day operations. Monitor the performance of the system and make any necessary adjustments or improvements as needed.

The key steps and processes of ERP software development

Requirements Gathering

Requirements Gathering involves gathering information about the customer’s business needs and processes and identifying specific requirements for the ERP software. This includes understanding the customer’s current business operations, their goals and objectives, any existing software they use, and any changes they may need to make. The requirements-gathering process also involves identifying and documenting functional requirements, such as the types of data that need to be captured, the types of reports that need to be generated, and any other processes or activities that need to be automated. This information is used to help the ERP development team design and develop the software.

System Design

After requirements gathering, the ERP development team will design the system based on the customer’s requirements. System Design is the process of designing the software architecture and user interface to meet the customer’s requirements. This includes designing the database structure, the user interface, the business logic, and any integrations with other systems. The design process also involves creating user stories, which describe the actions a user can take with the software, and identifying potential use cases. This information is used to create the software architecture and user interface that will be used to develop the software.

Development

Once the system design is approved, the development team will begin to develop the software according to the design. Development is the process of coding and testing the software according to the system design. This includes writing code to implement the user interface and business logic, as well as testing the software to ensure that it meets the customer’s requirements. This is an iterative process, which involves making changes to the code based on feedback from the customer and testing the changes to ensure that they are functioning correctly.

Deployment

Once the software is developed, it must be deployed to the customer’s environment. Deployment is the process of setting up the hardware and installing the software in the customer’s environment. This includes configuring the hardware, installing the software, and performing data migration and integration with other systems. The deployment process also involves setting up user accounts, configuring security settings, and testing the system to ensure that it is functioning correctly.

Training and Support 

After deployment, the customer must be trained on how to use the software. Training and Support is the process of providing the customer with training and technical support to ensure they can use the software effectively. This includes providing user manuals and tutorials, providing access to customer support teams, and providing ongoing maintenance and updates. The customer must be trained on how to use the software, and the ERP development team must provide ongoing support to ensure that the customer can use the software effectively.

The cost of custom ERP software development

The cost of custom ERP software development depends on the scope of your project. Typically, the cost of custom ERP development ranges from $50,000 to millions. Factors that influence the cost include the complexity of the project, the size of the project, the development team, and the technology used. Additionally, if you are implementing an ERP system within an existing software architecture, there may be additional costs associated with integrating the existing architecture with the ERP.

The cost of custom ERP software development also depends on the features and capabilities included in the software. For example, if you need an ERP system that tracks inventory and accounting information, the cost of development will be higher than for a system that only tracks customer and sales data. Additionally, the cost of custom ERP software development may also depend on the type of software development methodology used. For example, agile software development processes typically cost more than traditional waterfall methods. Furthermore, the cost of custom ERP software development may be higher if you require the software to be hosted in the cloud, or if the system requires custom integrations with other software.

Pros & Cons of building ERP Systems

Pros of Building a Custom ERP System

There are several benefits to implementing an enterprise resource planning (ERP) system in an organization:

Improved efficiency and productivity: ERP systems streamline various business processes, such as accounting, inventory management, and project management, and provide real-time data visibility, which helps organizations make informed decisions and increase efficiency.
Enhanced data accuracy and integrity: With an ERP system, data is entered only once and is then shared across all relevant departments and functions. This eliminates the need for manual data entry and reduces the risk of errors and inconsistencies, resulting in improved data accuracy and integrity.
Greater collaboration and communication: An ERP system provides a centralized platform for all departments to share information and collaborate on projects, which improves communication and decision-making across the organization.
Increased scalability and flexibility: ERP systems are designed to be scalable and flexible, allowing organizations to easily add new modules or integrations as their needs change. This helps organizations adapt to changing market conditions and grow their business.
Reduced costs: ERP systems can help organizations save money by streamlining processes, reducing the need for manual data entry, and eliminating the need for multiple software systems.

Overall, implementing an ERP system can help organizations improve efficiency, increase data accuracy and integrity, enhance collaboration and communication, increase scalability and flexibility, and reduce costs.

Cons of Building a Custom ERP System

The main problems when building ERP systems include: 

Complexity: ERP systems are complex, and require knowledge and skills to set up and maintain them. This complexity can make it difficult for businesses to understand how to use and configure the system correctly. It can also make it difficult to troubleshoot any issues that arise. 
Cost: ERP systems can be expensive to purchase and maintain, and may require additional hardware and software investments. The cost of an ERP system can be high, and the cost of maintaining and updating the system must also be taken into consideration. 
Vendor Lock-in: Once you have chosen an ERP system, you may be locked into that vendor’s products and services, and unable to switch to another vendor without high costs. This can make it difficult to switch vendors if the current vendor’s services are no longer meeting your needs. 
Integration: ERP systems must be integrated with other systems, such as financial and CRM systems, to be effective. This can be a difficult and time-consuming process and may require additional resources and expertise. 
Security: ERP systems must be secure, as they contain valuable business data. This requires careful planning and implementation and may involve additional security measures, such as encryption and two-factor authentication.

How to create an ERP system using the Flatlogic Platform in minutes

Flatlogic is a company that provides a range of web and mobile application templates and UI components. They offer Full-Stack Generator to build an ERP system by yourself or/and a various number of templates for an ERP system, which is a type of software that helps businesses manage and coordinate various aspects of their operations, such as financials, supply chain, manufacturing, HR, and more. This template includes a range of features and functionality that can be customized to meet the specific needs of an organization, such as CRM, project management, inventory management, and more. It is designed to be responsive and user-friendly and can be easily integrated with other systems and applications. It is worth noting that an ERP template is not a complete ERP system, but rather a starting point that can be customized and developed further to meet an organization’s specific needs.

Flatlogic Full Stack Generator is a tool that helps you create a fully functional full-stack application from scratch. It provides templates for the frontend and backend of the stack, as well as database connections and authentication features. The generator also comes with a range of customizable components, such as user interface elements, forms, and dashboards. Once you’ve chosen your templates and components, you can easily customize and extend the application to meet your specific needs.

Flatlogic Platform provides a ChatGPT+ solution that enables you to create a conversational chatbot for your website or application. The solution can be customized to your exact requirements and includes features such as natural language processing, machine learning, deep learning algorithms, and real-time analytics. Flatlogic’s ChatGPT+ solution can help you create a powerful and sophisticated chatbot that can provide your customers with an engaging and interactive experience.

How does it work?

Using the Flatlogic Platform you can create CRUD and static applications in a few minutes. Creating a full-stack application consists of 3 steps and static only 2 steps.

Step 1. Choosing the Tech Stack

In this step, you’re setting the name of your application and choosing the stack: Frontend, Backend, and Database.

Step 2. Choosing the Starter Template

In this step, you’re choosing the design of the web app.

Step 3. Schema Editor

In this step, you can create your database schema from scratch, import an existing schema or select one of the suggested schemas. 

To import your existing database, click the Import SQL button and select your .sql file. After that, your database will be opened in the Schema Editor where you can further edit your data (add/edit/delete entities).

If you are not familiar with database design and find it difficult to understand what tables are, we have prepared some ready-made sample schemas of real applications that you can modify for your application:

E-commerce app;
Time tracking app;
Book store;
Chat (messaging) app;
Blog.

Or, you can define a database schema and add a description by clicking on the “Generate with AI” button. You need to type the application’s description in the text area and hit “Send”. The application’s schema will be ready in around 15 seconds. You may either hit deploy immediately or review the structure to make manual adjustments.

Step 4. Choose Integration method & Features

Next, you can connect your GitHub and push your application code there. Or skip this step by clicking the Finish and Deploy button and in a few minutes, your application will be generated.

Benefits of ERP systems created with Flatlogic Platform

An ERP system created using the Flatlogic platform may offer several benefits, such as:

Improved efficiency

An ERP system can help streamline and automate various business processes, reducing the need for manual data entry and reducing the risk of errors. This can save time and resources, and allow employees to focus on more important tasks.

Better decision-making

An ERP system can provide real-time data and insights that can help managers and decision-makers make informed decisions.

Increased visibility

An ERP system can provide a single, centralized source of data that can be accessed by authorized users throughout an organization. This can improve communication and collaboration, and help ensure that everyone is working from the same set of accurate and up-to-date information.

Enhanced security

An ERP system can help protect sensitive data and ensure that it is only accessed by authorized users. It can also help meet regulatory compliance requirements.

Reduced costs

An ERP system can help reduce the costs associated with manual processes, such as paper-based systems and manual data entry. It can also help reduce the costs of training new employees, as they can easily access the information they need to perform their tasks.

It is worth noting that the specific benefits of an ERP system created using the Flatlogic platform will depend on the specific features and functionality implemented, as well as how well the system is customized and integrated with an organization’s existing systems and processes.

Summing Up

In conclusion, building your ERP system can be a daunting task for many businesses. However, with the right tools and resources, it is possible to build a powerful, custom ERP system in minutes. By following the steps outlined in this guide, you can quickly create a customized ERP system that meets your business needs and saves you time and money. By taking the time to research, design, and deploy an ERP system, your business can reap the benefits of a centralized and efficient system that can help you increase efficiency and profitability.

The post How to Build Your ERP System in Minutes appeared first on Flatlogic Blog.

Flatlogic Admin Templates banner