Industry: Professional Services
Team Size: 9
Technologies used: .Net Core, C#, Azure, Active Directory, App Service, Logic Apps, TypeScript, MS SQL Server, Application Insights, Azure DevOps, Artifactory, Terraform, Twilio, Azure Functions, Service Bus, PowerBI, Angular, Azure Bot Framework, LUIS, MediatR, XUnit, Entity Framework, .etc.
The client is global professional services and technology consulting company. It serves clients undertaking capital projects in the manufacturing, energy, construction and public infrastructure industries.
Challenge
The company wanted to build a bridge/aggregator platform that would allow combination data from tools like Oracle Primavera, Archibus, MS Project, Unifier, P6, Aconex, e-Builder and other CMMS applications. They have started to build microservices architecture, but unfortunately, benefits of it were not felt, delivery speed has been getting worse and code became hard to maintain. There were problems with understanding of how to implement federated identities, how to design Data Warehouse, conversational Ui/Chatbot with NLP capabilities and other complex platform components.
What TageSpot did for a client
As the first thing, we conducted an assessment of existing architecture and identified a lot of severe problems e.g. mistakes in the design of microservices (overuse of proxy services), single database for all microservices, poorly implemented security mechanisms, poor maintenance of shared logic, DevOps practices were lagging behind. From the process side, there were problems with understanding of agile delivery, requirements elicitation process and product roadmap creation steps. These challenges in design and process culture have been dealt with by different engineers and consultants from our side. We held a couple of architecture workshops and designed a system, a conceptual model of which is outlined below.
During the design and implementation phases, we made a bunch of important architectural decisions that helped the client solve his most painful problems. We managed to successfully balance business value delivery and the evolutional enhancement of the platform infrastructure. A few of the things worse mentioning are listed below:
- We implemented different authentication & authorization, SSO and federation scenarios, using Azure AD B2C, that client has struggled to achieve.
- We designed a new database strategy and refactored existing databases to support it, which significantly raised scalability & performance of the platform.
- We designed and implemented a new mapping/integrations infrastructure that allowed the client to seamlessly integrated with 3-rd parties like e-Builder etc.
- We introduced the API Gateway component in the microservices architecture which simplified platform maintenance and ease of use by external clients.
- Microservices communication has been improved to make the platform more resilient to failure and be faster. We used different strategies that allow handling partial failures: retries with exponential backoff (ORM resilient connections with retry logic, HTTP call retries exponential back off (using Polly library), circuit breaker pattern, strategy for testing HTTP retries and partial failures, jitter strategy for the retry policy, health monitoring using Azure Application Insights, migration to Async/await mechanisms across all layers.
- New application architecture has been designed, based on MediatR library that improved the extensibility of the codebase.
- Conversational UI app has been developed based on Azure Bot Framework.
- Data Warehouse with all the dependencies and adapters to Tableau and PowerBI has been implemented.
Business outcome
All these steps helped a client to deliver a robust platform with a lot of important business features. The platform will be able to serve change requirements and adapt to market needs for years without significant reworks. We also feel proud of being able to do a culture shift with client employees on how to properly approach agile software development, balance tech & business tasks and how to treat and ensure code quality.