You are on page 1of 6

● How would you approach designing such an application so that it could be developed by

multiple teams in parallel?

It would begin by analyzing the design of the application at the level of components or modules, work groups,
integrations and tests.
The modules are analyzed and organized to generate the microservices of the solution. These microservices
will allow independent development and deployment.
Development teams are generated for each identified microservice, as well as test teams and integration
teams.
Each microservice will be deployed in docker containers so that they can also be scaled and deployed
independently.
The progress and delivery dates will be defined according to priorities of the functional and non-functional
requirements.
The repositories and branches of code controls will be defined to avoid conflicts of versioning of the
advances of the teams.
After uploading changes to the development branch, they would go to certification for validation by the
testing and integration team.
The deployments will be carried out applying the Blue Green strategy, which consists of having two parallel
production environments (one called blue and the other called green) where the new versions of the
applications are deployed alternatively. That is, if blue has Version 1 of our application installed, then green
will have Version 2 installed, and when the next version (Version 3) is deployed the blue environment will be
used again, and the alternate sequence continues indefinitely.
The monitoring of the tasks of each team would be carried out by Kanban boards

● Would the application be hosted within a cloud or would it be an on-premise


application? What would the benefit of your selection be?

The application will be hosted in the cloud. The benefits of deploying an application in a cloud are that the
cloud provider takes care of the infrastructure, security, scaling, availability, speed, application encryption,
etc. to allow us to worry only about our business requirements.
It reduces costs for the maintenance of infrastructure on premise.
● Demonstrate design using diagrams that you would use to explain your high-level
architecture to your software engineering and DevOps teams.

To obtain the list of Azure and Ebay Products, Message Broker will be used to handle messages, retries
and asynchronous processing, using RabbitMQ. If a component crashes, messages are not lost as they are
persisted by RabbitMQ, which provides retries and asynchronous communication.

Frontend components

Backend Microservices
Receiver to get sales of Amazon and Ebay

Component Level
Logical View
Physical View

DevOp control Versiones

Configure

QA PROD
DEV
Team

Trigger
Update Version
Build

Build Import Solution

Automation Import Solution

Publish
Solution

Repository Release
Automation Ops
Use Approve
artifacts
● What technologies would you use? Why?

The technologies to be proposed would be:

* Backend: .Visual Studio Net Core or NodeJs.


- NodeJs has an architecture directed to Events which allows the occurrence of multiple events without
blocking since they are executed asynchronously. It performs well in response to requests coming in from
the client.
- Visual Studio Net Core allows to apply polymorphism, encapsulation. interfaces, etc in its object-oriented
programming. Integrate Design Patterns such as Dependency Injection and MVC. Integrates tools to work
with dockers and containers. Respond to events synchronously and asynchronously.
* The technology for the Front end side would be Angular or React.
- Angular is a frontend framework. Work with components, services and dependency injection.
- React is an easier and faster library to learn. It also works with components. Generates its own Virtual
DOM improving front-end rendering and performance.
* The database would be: MongoDb because it is geared towards high availability and scalability.

● How will it remain highly available?

To be highly available, the application must have:


* Error Tolerance Capability: The application must keep running even if some of its components fail.
* Backup of critical resources: Minimizes downtime.
* Load balancing: They improve service performance and avoid saturation.
* Monitoring: Allows you to detect any problem before it happens.
These conditions are provided by cloud providers.

● The service is a huge success and we now need to scale to ten times the current customer traffic and
larger amounts of data. How will you scale the application to take the additional load?

In order to maintain the scalability of the application, take into account:


* Load balancers: It is a central network solution used to distribute traffic between multiple servers in a
server farm. Load balancers improve the availability and responsiveness of applications and prevent server
overload.
* Horizontal Scaling: It consists of a main server and several more servers (nodes) that work as one as a
network (clusters). This allows the quality of these servers to maintain their availability and performance
times despite the increase in users.
* Improve Performance in backend: Use memory cache and configure it so that when fetching data from
the server it only travels 1 time to the server so that it then saves that response in the backend to return
future queries from that saved response so as not to travel to the server again.

● Be prepared to discuss extending functionality of the product and adding new features.

This is common in project development. The main thing is to understand the user's requirement and to know
in which part of the system these changes would affect. Carry out the functional analysis and review of the
modules involved.

You might also like