After working for so many years in the software industry, I have observed a pattern in software development. All of us know DRY (Don’t Repeat Yourself) is a fundamental principle to follow, but we always repeat ourselves whenever we start developing a new product. Let me explain this below.
Having worked on multiple products and enterprise application development for more than 10 years, here is my observation. There are a set of features, modules, and behaviors required in almost every application and we repeat ourselves by developing them again each time we start with a new application. Don’t believe me? Take a look at the list below containing some of the large enterprise applications I have worked on.
As you can see in the above list, more than 70% of features are repeated and yet we would rebuild them every time. What if I were to tell you that there is a package that can give you the most commonly required features in any modern world software? A package of pre-built, reusable, configurable, extensible and open-source microservices that you can simply install as npm dependency and get all the APIs ready? That’s exactly what ARC by SourceFuse is.
What is ARC?
ARC by SourceFuse is a collection of pre-built microservices that aim to reduce time to market for enterprise applications, by eliminating repetitive work and following the DRY principle. Large enterprises usually face a similar set of challenges with cloud-native app development or platforms as part of digital transformation efforts, or when creating new products. ARC helps them avoid spending time on those challenges repeatedly, and lets them focus on the core problem statement. As a result, the go-to-market time for the product is reduced by 35% on average.
Currently, ARC provides 12 enterprise-grade microservices:
- Authentication Service — A microservice that provides pre-built and configurable APIs for various secure and standard authentication strategies. These include Oauth 2.0, JWT, Social logins (Google, Instagram, Facebook, Apple ID), Keycloak, AWS Cognito, MFA (using Google Authenticator), etc. It is completely configurable and extensible to use any other custom strategy you need, without changing the core interface.
- Audit Service — A microservice used for auditing user actions. All the user actions like insert, update, and delete can be audited. It uses @sourceloop/audit-log as a base which provides a mixin that can be integrated into any other service. This service exposes APIs to insert and read the audited data.
- User Management Service — A microservice that provides users and their identity management APIs. It also supports multi-tenancy and provides tenant management APIs. In addition, it also manages ACL data for RBAC and ABAC.
- Notification Service — A microservice that enables you to send notifications, alerts, and updates via Email, SMS and Push mechanisms, using several popular providers like SES, SNS, Pubnub, Socket.io, FCM, APNS, Nodemailer, etc. It exposes a single standard API interface to publish any kind of notification, be it SMS, email or push, adapting to the underlying provider on its own. It supports any other external provider integration as well, without changing the standard interface.
- Workflow Service — A pre-built microservice that can manage, deploy and execute industry-standard BPMN workflows using powerful engines like Camunda. Using this service, you can automate various business workflows needed in any enterprise application and even update them without any development effort. This is also built on the same adaptor pattern as others and hence can be used with any BPMN engine other than Camunda.
- Payment Service — A microservice primarily used for charging payments and managing transactions, supporting direct or subscription-based payments. It provides a standard API interface to be used irrespective of the underlying payment gateway. Currently, it has integration with Stripe and Razorpay. This is also built on the same adaptor pattern as others and can be configured to use any other payment gateway.
- Feature-toggle Service — A microservice that provides functionality to maintain feature flags at multiple levels – environment level, tenant level and user level. It works in tandem with @sourceloop/feature-toggle to provide a feature access check at the API layer in all services.
- Search Service — A microservice that provides standard API support for searching over configured models using in-built Full-Text Search in PostgreSQL and MySQL databases. Full-Text Searching provides the capability to identify natural-language documents that satisfy a query, and optionally to sort them by relevance to the query.
- Messaging/Chat Service — A microservice for managing messages, conversations, and chat threads amongst users P2P or in a group. It can be used as offline threads or if you integrate this with real-time service from the notification service above, you get a real-time chat and messaging app. It provides similar features like slack, messenger, etc., minus real-time.
- Scheduler Service — A microservice that allows you to schedule events/meetings on a calendar, set up reminders, export and import iCal, and integrate with external providers like Outlook, Google Calendar, etc. If you integrate this with a video-conferencing service mentioned below, you get a complete, virtual meeting scheduling app like Zoom.
- Video Conferencing Service — A microservice that provides APIs to set up, conduct and manage video conference calls, store recordings, and access management for the calls. It integrates and uses external providers like Vonage. This is also built on the same adaptor pattern as others and can be configured to use any other video calling service.
- In-mail Service — A microservice that provides simple and basic APIs to have an email-like feature in any application, similar to InMail in LinkedIn. One can compose in-mails, see draft ones, add recipients, read in-mails, mark as read, send replies etc.
Additionally, all of these services come with built-in security and non-functional capabilities such as:
- Soft delete
- Caching at an entity level
- ACL, RBAC, ABAC using industry-standard Casbin
- Rate limiting for APIs
- Security headers using helmetjs
- 100% cloud-native with optimized Dockerfile
- Open API spec
- Logging using Winston
- Observability and monitoring using swagger-stats
- Distributed tracing using open telemetry or New Relic
- Internationalization (i18n)
Above all, ARC also provides its own command-line tool @sourceloop/cli that can scaffold an entire new mono repo with multiple microservices in minutes.
How does ARC help?
By now, you are aware of ARC services and the features it provides. Now, if we go back to my earlier assessment of the enterprise applications list and replace all those features which are available in ARC, let us see how much DRY we can get, saving development effort and delivery time.
The last row above shows the percentage of work which is pre-built and provided by ARC microservices in these applications. As you can see, almost 80% of the overall effort is reduced when deploying ARC. That’s the power ARC can provide!