AWS
React.js
Node.js
IT Consulting
Web development
TAX REPORTS & LEGAL ENTITIES MANAGEMENT

How we developed 3 applications for a Big Four company

Project overview

The story of a leading global consulting company, which developed and modernized 3 applications for creating tax reports and managing legal entities

Client

A Big Four Company (NDA)

REsources

4+ years, 20+ experts

Introduction

The history of any company is defined by milestones, marking the following stages of its development, experience and expertise. For us, such a milestone was the long-term cooperation with one of the Big Four companies. The consulting leader approached us with a mission to create a product that two previous software agencies had failed to develop.

This short project turned into a 4-year cooperation and three products we created for our client. Moreover, it proved our expertise in developing efficient software within the fintech and finance domains.

Start of the project

Before entrusting us with developing their product, The Big Four Client worked with two other agencies in the US and Asia. Their objective was to build a financial application capable of serving a diverse range of users, necessitating a stable and trustworthy system that met exceptionally high performance and security standards.

The project was complex and demanded a high level of tech expertise. Previous vendors couldn't deliver a working product after two years of work on the project. Faced with a prolonged process and rising costs, the Big Four company decided to make another software agency change. This time, the choice was Brainhub.

Why Brainhub?

Every long-term cooperation starts with the first project. Our client contacted us, looking for the best React agency. The 4.9 rating in Clutch and the globally recognized brands in our portfolio confirmed our competency. Calls, talks, and workshops ended with signing a contract for the first project. After 12 months, we presented the finished app. Top-quality development, honest communication, and seamless cooperation led the client to entrust us with two more projects.

While working with global corporations, trust is not given in advance. You have to earn it. When we started cooperation, we delivered a complex product in record time. We proved our skills, and the single project turned into a long-term partnership.

Matt Warcholinski, Co-Founder of Brainhub
Brainhub Clutch Review
Read the whole Clutch Review

Project #1 Current and Deferred Tax Calculation App

The first project aimed to create an application that calculates current and deferred tax provisions. This tool's primary target audience is large, global corporations with multiple interconnected legal entities. The application's users have a complex structure of different roles, permissions, and capabilities within the system.

Generate and filter reports

The first step during user interaction is to upload the input, such as trial balance, to the application. Most often, such a document is an Excel sheet, but the application also supports many other formats. 

The next step is to select the rules determining what the application should do with the uploaded data. These rules determine what expense group a particular data set will be classified into. The rules applied depend on the tax laws and regulations in a specific country or state. The application user can customize such rules and create their own from the admin panel. The system generates a tax report based on uploaded data and applied rules.

In such a report, the user can apply advanced filtering functions, for example, for a specific country, state, company, legal entity, etc. Any report created can be easily generated as an Excel spreadsheet and shared with stakeholders. 

Migration

The first project for our client consisted of migrating an existing tool and was, in practice, legacy application modernization. The old solution was built on Oracle and was already several years old. The system was hard to maintain and scale mainly because Oracle developers were difficult to find on the market. As a result, the client had a problem getting an Oracle team for the project and finding experts to migrate such a large and difficult system. Considering these challenges, our client decided to switch to another tech stack and find a partner experienced in legacy app modernization. And so, they chose Brainhub.

Our job was to migrate the application, implement the new system in Node.js with a React frontend, and gradually rewrite the business logic. It took us 12 months to build a complex, functional application that met the client's business goals. Given the scale of the project, this record-breaking implementation time allowed us to gain the client's trust and caused them to entrust us with two more projects.

Challenges

  • Massive amount of data and rules needed to generate tax reports. 
  • A highly complex domain concerning state tax systems and their calculation.
  • Many roles and permissions for employees of global corporations and legal entities within them. 
  • Modernization of a large and complex system and migrating it to a new environment. 
  • Legacy code accumulated over the years, requiring rewriting.
  • Tech debt associated with the Oracle developers shortage.

Project #2 Master Data Management System

The second project was a cloud-based data management tool for consolidating legal entity data into a reliable single source of information. The application streamlines multiple data sources and migrates them onto a single, secure platform. It benefits primarily large corporations and companies that want to systematize data on their divisions, branches, and subsidiaries. The software supports centralization, standardization, merging, and management of such data, giving teams access to the same information across organizations worldwide. It also allows turning complex data into clear, visual reports and insights and modeling organizational changes such as mergers and restructuring. The application has been used internally within our clients' organizations and externally by its clients.

Business goals

  • The unified flow of information within the legal entity structure.
  • Transparency and control of data within the organization.
  • Single source of truth updated in real-time.
  • Automated process of report generation.
  • Sensitive data security.
  • Customization of roles and permissions for users.
  • Extensive content management capabilities from the admin panel.

Multitenancy

The application operates on large batches of sensitive data about companies and legal entities, so it was crucial to ensure data security and isolation. To do this, we implemented a multitenancy per database model. This solution involves storing the data of different clients in isolated databases. At the same time, our application can use these separate databases with a stable technical foundation, as it is the core of the entire system. Implementing the multitenancy model took some time and effort, but we did it.

Custom roles and permissions

While working on the project, implementing the complex roles and permissions system was an exciting challenge. Multinational corporations, which are the application's primary users, need extensive access control due to the many people using the system and the presence of sensitive data. As a result, more than a few basic roles like admin, user, editor, etc. were needed. The application required a high level of customization in this matter and permissions inheritance options. Regarding the complexity of this feature and the massive volume of data, maintaining the high performance of the application was a real challenge. We focused on optimizing the system to meet the client's requirements and goals while maintaining high performance. 

Data visualization as graphical reports

How to present complex data simply and clearly? Every company relying on advanced analytics faces such a challenge sooner or later. We, in turn, faced the challenge of designing a solution that would make such a thing possible. The application we developed allows users to generate many types of reports based on vast amounts of data on legal entities in the form of a clear, graphic representation. 

PwC Entity Ops

Monitoring of edit history

Applications where many people work on vast amounts of data require a high degree of control over making changes. In our tool, we introduced a sophisticated system for tracking the history of changes, including dozens of custom properties. These properties could be grouped and combined with each other, and new properties could be assigned to them. For example, a country or legal entity could be assigned a set of properties describing it. Each client using the application could have its own custom properties regarding its industry, business scale, shares, etc. Such a thorough auditing of changes allowed users to gain transparency and control over data modification.

Process automation 

Automation is the key to optimizing work when dealing with large amounts of data and complex processes. It helps reduce work time and reduce the risk of error. We implemented automation of many areas within the application, including background processing and real-time data updates. Client dynamic provisioning is also an interesting feature. With this solution, the user can create a client profile in the admin panel, and the application automatically makes and assigns a database to it on the RDS cluster. Then, the system runs the data migration and saves the changes. 

Before the upgrade, this process had to be carried out manually, significantly increasing work time and posing a risk of error, such as migrating the wrong environment or database. With our functionality, all the user has to do is fill out a short form and click 'save', and the application automatically creates a separate database and updates it. Automating such a difficult process was quite challenging, but this functionality impressed our client the most because it allowed us to make the team's work easier and error-proof.

Intuitive CMS

The application's users are employees of global companies and corporations from diverse industries with different needs and structures. For this reason, our solution needs a high level of customization and agility from the administrator level in adding, processing, and modifying data and generating and sharing reports. In practice, the application we developed is a very advanced CMS, giving users a wide range of possibilities tailored to their needs and goals. CMS ​​(Content Management System) is a software application enabling users to create, edit, collaborate, publish and store digital content without programming.

Legacy app modernization

We mainly associate legacy software with outdated systems that haven't been updated in years and, in their current form, are no longer functional and need a complete overhaul. Meanwhile, even well-designed and relatively new tools can accumulate legacy code and tech debt in a rapidly changing technology and business landscape. This is often the case when dealing with large and rapidly growing systems. In addition, in systems designed from scratch, the original assumptions are usually only verified after the application reaches users. The need then arises to expand or modify the application to meet current business objectives.

And this is exactly the kind of situation we were dealing with in this project. 

The project for our client lasted four years. During this time, many new technologies emerged, allowing us to improve the application significantly. In addition, some of the project's original assumptions changed over time and required modifications. In this situation, migration proved to be the best solution for maintaining high software performance. 

This procedure covered three main areas:

  • Gradual introduction of TypeScript into the database.
  • Migration from a monolithic architecture to a modular monolith.
  • Infrastructure migration to the cloud (AWS).

1. Database modernization

The complex application structure required us to plan the database upgrade carefully. We, therefore, carried out the migration gradually, controlling it with reports generated by static code analysis, to which we introduced new rules to avoid further technical debt. The key when modernizing legacy systems is to ensure that they function and grow efficiently despite the changes, so we introduced new application features simultaneously with the migration.

2. Migration to a modular monolith

We used a strangler pattern during the migration from the classic monolith to the modular monolith. This approach allowed us to:

  • Insulate the individual modules of the monolith.
  • Start moving modules to separate servers.
  • Communicate new services with the old monolith using APIs.
  • Gradually carry out the migration of more modules, making their work independent of the existing monolith. 

3. Migration of infrastructure to the cloud

At the same time, we migrated the infrastructure to AWS. We decided to migrate environments and preview to test assumptions and coordinate with the client's DevOps team. Since the test environments had an artificial data set, verifying access and maintaining data security was easier. 

Challenges

  • Creating a CMS-type application with a vast amount of data and thousands of users.
  • Ensure complete database isolation and maintain application operability.
  • Automate complex processes.
  • Maintain high performance with an extensive system of roles and permissions.
  • Legacy app modernization.
  • Gradual migration of the system while maintaining its operation.

Project #3 Local and State Tax Aggregation System

The third project concerned the development of a tax provisioning application on a local and state scale for US companies. The application's main task was to handle local tax reports and send them to the main state reports. The system supports all 29 mandatory states e-files and paper filings for all other states, totaling 700+ forms. 

The description of the functionality itself sounds simple, but the mechanics behind the processes required the implementation of complex solutions and high expertise. A key challenge of the project was to create a modern tax application that would communicate with external state systems, which were often built on outdated technologies and accumulated legacy code.

Business goals

  • Integrated end-to-end state income tax compliance app
  • Enhanced data ingestion from connected internal and external applications
  • Integrated federal proformas
  • Complete state tax lifecycle management
  • Embedded workflow

Legacy app modernization

We built the application using the latest Node.js and React/Redux ecosystem hosted on AWS. We were responsible for rewriting existing .NET/Cold Fusion solutions to a new, future-proof stack and for writing custom solutions for modeling tax entity hierarchies. The app is supported by a few microservices to efficiently export Excel files, parse tax form PDF files, send emails, and manage scheduled asynchronous jobs. We integrated it with third-party services (SOAP and REST) for submitting and parsing tax forms. We also built a library of UI components and backend libraries that we reused across different apps.

Integration with state tax systems

Modernizing the application was only part of our battle with the legacy system in this project. Another challenge was enabling our tool to communicate and cooperate with the state's outdated tax system. 

Updating public digital systems is often complicated and time-consuming, as it requires advanced operational planning and meeting numerous requirements. As a result, such national systems are often outdated and can be as old as 20-30 years. However, these giant legacy systems are impossible to replace or bypass in many processes, so new solutions must be compatible with them. As part of the project, we also faced this challenge. Our application had to not only perform complex tax operations but also effectively communicate with outdated state system APIs.

Optical Character Recognition

The tool we designed mediates between analog and digital processes primarily for preparing tax reports. In the .NET backend, we implemented an OCR (Optical Character Recognition) system that converts analog scans into digital PDFs and allows users to modify them.

Partnership

When we partnered with the client, we developed a product in 12 months and met our client's business goals that previous agencies were unable to deliver for two years. The speed and quality of our work earned us trust, which shaped our entire, long-term cooperation. We were not just a vendor dedicated to developing an application. We were a committed business partner who worked with the client on the product concept, validated ideas, and served as a technology advisor. We also actively worked together to optimize processes, including communication, task preparation in Jira, and decision-making.

Thanks to transparent communication without intermediaries, broad decisiveness on the part of the Product Owner, and a lot of autonomy for the development team in choosing solutions, we could work quickly and efficiently. Regular two-way feedback allowed us to verify progress and control the direction of product development. The Brainhub team also deeply understood the client's domain and industry, which allowed us to make more accurate decisions and offer better recommendations. Business awareness and knowledge of the client's specific business at such a level is one of the most important benefits of long-term cooperation.

Transfer of the project

At Brainhub, we take care of client relationships to the very end. We are aware that from the client's perspective, the end of cooperation with a digital agency is always challenging because, from that moment, many processes must be taken over in-house. We worked with the company for more than 4 years, developed 3 advanced digital products together, and when the projects ended, we made sure to leave the client with a set of information allowing them to further develop the applications we created together. 

The project handover took six months, which is a relatively short time for systems of this scale. For six months, we shared knowledge with the client's in-house developers and organized pair programming sessions. We also regularly conducted training sessions, workshops, and presentations in which we discussed specific functionalities and code snippets. We later handed over the recordings of these meetings to the client so the client could always refer back to them. We also included in the project documents a discussion of priority areas for further work and a set of recommendations for future product development.

Learnings

  • Defined goals, KPIs, and OKRs get people on the same page and improve workflow- everyone knows what they should achieve
  • In the project, there is no bad information. There is only information. Trust and partnership create space for honest feedback, validation of ideas, and reaching the best solutions.
  • One single source of truth and the ability of the Product Owner to make final decisions streamline processes.
  • Long-term cooperation gives developers the best understanding of the domain and industry.