SOFTWARE ARCHITECTURE DESIGNBackend Architecture
Microservices design for backend modules in Java Spring-Boot or NodeJS TypeScript technologies. Porting existing application from JEE, C++ to Spring-Boot. Domain design for SQL and NoSQL databasess. Secure API Design.
Software projects become more and more complex every year. Time of complex monolith backend solutions reside in the past. In order to stay competitive and be able to manage large software solutions companies have had to shift to a more modern approach with architecture that can change functionality rapidly and withstand enormous load.
Modularisation with microservices in backend development is usually the answer for complexity. There are however traps along the way to good architecture. Traps that can be avoided if a project is led by an experienced architect.
Sizing & Split
First of all, microservices are great but they also bring a log of organisational overhead for the development process. The real question is, “When is the size of the project big enough so that micro-services will improve overall development efficiency?” Early projects that operate on minimum budgets, and building MVP are not good for micro-services – best strategy is to start lean in monolith and build modules for later target architecture. When using additional overhead is reasonable then switch to target micro-services architecture.
Communication
Second caveat is also proper communication. Very often, micro-services use too much synchronous communication instead of asynchronous messaging. This brings long latency for calls, and too much dependencies to manage in a complex distributed system.
Testing
Proper testing is also a challenge. Micro-services have to be tested either in complete isolation or in selected subgroups, so that communication problems may be spotted early in the development cycle. Proper architecture makes this an easier task, allowing the use of standard tools and approach for all typical test scenarios.
Building proper micro-service architecture for big systems is like going through a mine field. Sometimes after a few months you may find out that you are standing on a mine already. To move in any direction can be very painful.
Arch Forge Solutions with its extensive experience can help you navigate through this minefield.
Typical software challenges we encounter at customer projects:
- Bad domain boundaries in modules
- Too many dependencies between modules
- Too many single points of failure in solution
- Teams working on separate modules block each other with dependencies
- Bugs detected too late in development process or first time in production support
- No base framework for components
- Improper database use by microservices (no db. separation)
- Lack of proper global event tracing for issue diagnosis
- Improper cache implementation in clustered environment
- Lack of proper security in critical places in code
- Bad transaction management for distributed processes
- Improper saga implementations that leave inconsistent data
- No proper, or no testing automation at all
- Bad security role and permission model for authorisations
- Badly designed APIs that aren’t prepared for growth
- No automated performance testing
- Improperly implemented CQRS (Command Query Responsibility Separation) concept
- Using dependencies instead of dedicated cross component data models
- Lack of decoupled configuration for microservices
- Concept design errors with time dependent data
- Domain model leakage across system boundaries
If you feel that you suffer in your projects due to any of these points, we can help.
What we can do to solve those challenges:
- Analyse requirements for an entirely new system or an extension of it, and prepare a set of tailored design deliverables
- Analyse existing architecture and propose an architecture transformation roadmap to fix most painful business problems first
- Transform solution architecture to move from software individual project to customisable standardised product
- Transform solution architecture to move from MVP to global multi-tenant SaaS product
- Perform a backend security check and prepare fix plan
- Design and prepare migration plan for Go-Live cut off and help to execute it
Technology
Technologies & tools that we typically use in our backend projects.
- Spring-Boot
- NodeJS
- Redis
- Quarcus
- GraalVM
- Kafka
- RabotMQ
- Python
- Kotlin