System Architecture is an essential aspect of any software powered system. The system architecture is a conceptual model that will specify the structure, the behavior and the different views of a system. In the first steps of a software system development it is important that the development team and the beneficiary agrees upon the existing or future system architecture. For it is a complex topic, there are still many differences on how different organizations understand system architecture. At Codespring the following aspects will be considered:
Sytsem Architecture Definition
- System roles elicitation
- Use cases
- RS (Requirements Specifications)
- FS (Functional Specifications)
- Test Plans
Addressed Requirements
- Multilayered architecture
- Multitier architecture
- Distributed application architecture
- Microservices architecture
- Cloud Based Architecture
- High availability
- Performance
- Scalability
- Plugin component based applications
- Security
- Integration with 3rd party elements
- Interactions with hardware
Methods
- Strategic Design
- Tactical Design
- Design Patterns
- UI (User Interface) mockups
- UX (User Experience) methods
- Wireframes
- DevOps tools & methods
- Automated testing
- Clusters, load balancing, asynchron communication
System Architecture Categories
As the complexity of developed systems is increasing, at Codespring we try to make it as perceivable as possible. Therefore we have also grouped the main systems architectures:
Desktop application system architetcure
Web applications system architecture
Mobile & embedded system architecture
Microservices architecture
Serverless architecture
Cloud services / middle ware system architecture
Complex system architecture should meet the requirements of performance, scalability, and availability. This will lead to capability of the designed system to adjust to new business needs. Going through this process over and over again, Codespring system architects strive to master each software development project from the conceptualization phase. The customers gain insight and control over the entire process. It is an additional guarantee that the design and the effective work goes into the desired direction.
Best practices related to System Architecture
- Choosing the right architecture in accordance with the projects’ available DevOps resources and capabilities;
- Use server clusters and load balancing in order to ensure high availability;
- Prepare for scalability: horizontal scalability and vertical scalability;
- Provide automatic deployment capability;
- Use proof-of-concepts and MVPs because a flexible architecture allows adjustments and modifications;
- Run performance tests in order to foresee potential threats;
- Assure high availability so that the applications run 24/7;
- Build adaptive architectures in order to effectively respond to change requests;
Codespring Experience In Designing System Architectures
At Codespring the system architecture is usually delivered as part of the software development process, based on the requirements analysis. This is mostly recommended when a new project is being initiated.
In the case of an existing software application, our team will proceed to system srchitecture Review and analysis, followed by proposals to change (e.g. refactoring, migration).
Communication is critical during this process, since it is important that both the customer’s team and the outsourced development team agree upon the new system architecture.
The importance of UI/UX Design
The UI/UX Design of an application improves the user experience and overall customer satisfaction. This ultimately helps increase the number of users of a specific application and ensures the intuitiveness, usability and up-to-datedness of every software product having a user interface.
UX relies on psychological and technological assumptions, analyses the different levels of interactions that users will possibly have with the product and validates solutions via internal and external user testing sessions.
In addition, an aesthetic and logical user interface (UI) helps achieve a professional and outstanding look and feel.
UI/UX Design Tools
For creating high-fidelity UI designs, we at Codespring use Sketch, a premium application that has been the first choice for designers for many years. We also use Sketch for creating low-fidelity wireframes, but Balsamiq is another viable option for this task.
We use Sketch Cloud for developer handoff, a browser application with a built-in interactive inspector tool. This tool is also great for showcasing our designs to the client so that they can provide feedback on our proposals and we can adjust them accordingly before starting the implementation. Note: The goal is to match these designs during development. 100% fidelity should be achieved.
If custom animations are required for a project, again, Sketch is a great tool for basic prototyping. If these interactions are more complicated, Anima or Principle has all the extra features required for such challenges.
User testing can be done in numerous ways, the digital tools we use most frequently are Maze, Microsoft Forms and in-house review applications. We also conduct personal user testing sessions in-house, if required. All these solutions provide reports, statistics, numeric and descriptive feedback that we can use to improve the product.
System Architecture Technologies
Kubernetes
Galera (for high availability)
Orchestration
For high availability
Streaming platform
Kafka, Eventgrid (for high performance, high true put)
Cloud services integration
for financial accessibility
Metric & Monitoring
for system status acknowledgments and bottlenecks detection