How Uplab transformed a faulty platform intoan ISO-compliant solution for strategic alliances

Domain:
Industrial alliances
Collaboration:
2018 - now
Country:
Canada
Team size:
10
challenge:
Our client, a professor of Strategy and Innovation, has been teaching and researching strategic alliances for many years. To put it simply, a strategic alliance is a business partnership between two or more companies that work together to achieve shared objectives.
For example, companies in the pharmaceutical industry can partner to develop a vaccine and distribute it across various countries, or companies in the government technology sector can team up with their peers abroad to gain access to new technologies and R&D initiatives.
According to our client, one of the major hurdles in such alliances is the difficulty sharing vast amounts of data and tracking processes, especially when multiple stakeholders are involved. That’s why he developed his own approach to improving alliance management and found a way to incorporate it into alliance management software.
He decided to start small and hired a development team to build an early version of this platform or an MVP. But they failed to provide a market-ready solution, so he turned to Uplab for help.

project evolution:
Our project started with the system audit, which uncovered a multitude of bugs and security vulnerabilities in the software. We performed refactoring and gradual application reengineering and finally went live with the upgraded platform. The improved alliance management application comes with advanced dashboards, custom reports, document management, and other features, enabling alliance leaders to conveniently organize, manage, and expand their alliance ecosystem all in one place.
To ensure that the platform complied with information security management requirements, which were necessary for their enterprise clients, our experts did everything needed to obtain ISO 27001 certification. We also expanded our team to 10 software engineers to facilitate the further scaling of the product.

Want to know the whole story?
Keep reading
Project highlights

Gradually replaced outdated Meteor with GraphQL, TypeScript, React, and Node.js

Split bulky monolith into 60+ domain-based modules

Reduced the regression bugs from 20% to less than 1%

Established automated end-to-end testing processes

Launched a boot camp to train developers in core project technologies

Scaled the project team from two to 10 software developers

Obtained ISO 27001 certification

Established a knowledge base to ease the developers’ efforts
Overcoming tech obstacles for the successful launch
conditions:
- After checking the system thoroughly, we found a bunch of problems with the application. It had repeating bugs, and issues with performance, scalability, and security such as XSS vulnerabilities and source code privacy issues.
- Because we had a limited budget and time, re-engineering this software from scratch was not an option, so we started thinking of solutions to address the obstacles before going live.
- But most importantly, we noticed that the technology being used didn’t match up with what the business needed.
Splitting the bulky monolith into domain-based modules
The application had a monolithic architecture where all the different modules are tightly coupled together and share the same codebase, making it difficult to maintain and scale.
To reduce dependencies and improve scalability, we applied a Domain Driven Design (DDD) approach which promotes the use of bounded contexts, which are isolated domains within a larger system.
We broke down the monolith into 60+ smaller, domain-based modules of different types (UI / Service / Entity). This way, we made the app more maintainable, scalable, and understandable for developers.

Minimizing the impact of Meteor.js to adapt technology to business requirements
First, Meteor might be okay for proof-of-concept work, but it doesn’t scale well leading to performance issues.
Second, isomorphic apps have potential problems with security because they share a lot of code between the client and server. You have to be extra careful not to accidentally give away API keys or passwords to the client. Maintaining and debugging such universal code is also very difficult – there is a high potential for making mistakes and doing things the “wrong” way.
Third, the use of Minimongo, which is a smaller version of MongoDB on the client side, forced us to use the same data structures as those stored in the database. And because our application needed to combine and analyze data from various sources, using the same data structures was highly problematic.
Finally, initially released in 2012, Meteor is considered “dead” in the developer community, and not without a reason. Many Meteor packages have become abandoned, and Meteor’s development has slowed down in recent years. And this leads us to the next problem – finding developers with expertise in Meteor is a big challenge.
Here is what we did exactly:
Separated the isomorphic code into distinct client and server code, while defining explicit shared constants.
Reduced our reliance on the Meteor ecosystem by replacing a significant number of Atmosphere dependencies with npm packages.
Integrated GraphQL between the client and server to replace the Meteor DDP protocol, resulting in a self-documenting and self-validating API.
Eliminated redundant Redux state management and opted to keep the local states within the React components and API data cache in the Apollo Client cache.
To enhance performance, we removed the Meteor publications and subscriptions mechanism entirely.
We minimized the impact of Meteor by limiting its responsibilities to bundling the app, managing user accounts, and establishing the MongoDB connection.
As a result of this work, the front end was entirely free of Meteor, and the back-end business layer operated without Meteor’s involvement.
Dealing with performance issues and establishing continuous testing
The faulty application not only prevented us from adding new features, but its existing features also failed to function properly. The effort required to fix bugs far surpassed that of developing new functionality.
To build new features, we had to eliminate deficiencies first, so we implemented numerous performance improvements.
For example, we added GraphQL data loaders to fix a problem we had with how we were getting data (N+1 query problem). We also added MongoDB aggregations so we could get data from different parts of the system more efficiently.
Finally, we added some functionality to GraphQL so that the system only sends the parts of data that the user needs, which makes it faster.
On top of that, we set up automated QA processes, including continuous regression testing, and integrated ESLint and Prettify – development tools to improve code quality.
As a result, we managed to reduce the regression bugs from 20% to less than 1%, while 95% of bugs were resolved before releasing into production.

Launching a Meteor boot camp to address the skill gap
Although we were gradually minimizing Meteor’s impact on the project, we still needed professionals with experience in Meteor.js and the related tech stack, but finding the right talent was not an easy task. As we’ve already said, Meteor has lost its popularity in the developer community and there were very few developers available in the market who were proficient in the project’s technology stack.
To solve this problem, Uplab established a three-month training course covering key project technologies. It allowed us to train and hire four dedicated Meteor experts.
We also onboarded additional on-demand engineers that would enter the project in case of increased workloads.

The market-ready alliance management software
We spent about a year reviving the alliance management platform. By the time we were ready for the first market release, our team increased from two to ten dedicated experts, including the Head of Development, Team Lead, software engineers, and QA experts.
Our software comes with an advanced dashboard with 25 widgets that can be customized depending on what data the enterprise works with, and a collection of over 50 report templates that can be tailored to meet the specific requirements of a business. If a desired template is not available in the library, our team creates a bespoke report that is tailored to the individual needs of each client.
Also, the business management system supports different access levels and has a Single Sign-On (SSO) feature. In addition to the conventional email and password login, corporate users can enter the software with a single click using the centralized SSO system. This permits them to gain access to the platform based on their access level.

Once we launched the alliance management platform to the market, it started attracting customers which brought forth a new set of challenges that needed to be addressed.
These challenges required us to adapt and improve our platform to better meet the evolving needs of our clients.
Abandoning Meteor and adopting TypeScript to improve code quality and facilitate developer onboarding

To substitute Meteor in a cost-efficient way, we made several changes to improve code quality and facilitate the onboarding of new team members. Specifically, we adopted TypeScript and split our codebase into separate Node.js and React projects. By decoupling client and server code, we were able to expand our hiring options beyond just full-stack developers, enabling us to hire front-end and back-end developers separately.

We also created a knowledge base to help new hires get up to speed quickly. As a result of these changes, we were able to onboard two junior developers, whereas previously we had a high entry threshold and only considered senior developers.
Obtaining ISO 27001 certification to secure enterprise data
To protect their sensitive data, enterprises opt for software solutions that comply with ISO 27001, a global standard for Information Security Management Systems (ISMS).
As our client’s engineering team, Uplab had to align our development processes with the ISO 27001 standard to ensure information security. This involved conducting a risk assessment to identify and manage current and potential data risks, implementing risk treatment measures, and establishing processes to meet the ISO 27001 requirements.
During the ISO audit, Uplab’s security, management, and development processes, for which our team was fully responsible, received successful approval. Moreover, we managed the implementation of ISO standards across the client’s company and appointed an information security manager for this task.
This demonstrates our ability to manage confidential third-party information and establishes us as a trusted partner for enterprise businesses.

Developing a public API for integrating internal business systems
Prior to using our client’s SaaS platform, many large companies have already implemented various software systems and tools internally. To enable seamless integration between these systems and our client’s business management platform, we developed a public API.
This API allows companies to synchronize all their operations, both internally and with external software providers.

Making product development manageable at scale
We’re currently in the growth stage, working on the product that’s being used by different organizations. To make our development process more manageable, we divided it into several streams ‒ development of the main product, creation of custom reports for each company, and building of APIs and integrations.
When individual team members focus on designated sub-projects, our product development process becomes much more efficient.
results:
- Over 20 global enterprise customers
- Scalable platform
- Reliable team
- Fine-tuned SDLC
We completely overhauled our client’s buggy MVP and transformed it into an enterprise-grade ISO-certified alliance management platform. Today, over 20 international enterprises rely on it to collaborate with their strategic partners.
Uplab is fully responsible for product development, serving as our client’s own product engineering team. We’ve expanded from just two full-stack developers to a group of 10 dedicated experts.
Our solution is highly scalable, easily maintainable, and capable of adapting quickly to changing market needs.
We have a streamlined SDLC with automated testing and DevOps, manageable team configurations, and comprehensive documentation for the seamless onboarding of new team members.
Uplab is the best development company I have worked with…
As we have been working together for 5 years now our relationship is very strong and Uplab is a trusted partner responsible for the development of our solution. Uplab is the best development company I have worked with. We highly recommend them.

Louis Rinfret
Founder & Executive, Enterprise SaaS Company




