# Assessment Review - Phone with Ron
## Assessment Summary
Please find [assessment grading](#assessment-grading) criteria and [problem statement](#problem-statement) at the bottom of this page.
| Grade | Skill | Notes |
| --- | --- | --- |
| | Architecture design | Candidate demonstrate experienced in fundamental system design ability, such as load balancing, cache, db cluster etc. |
| | Problem solving | Candidate demonstrate certain level of problem solving in the perspective of understand the problem, analyze the problem and providing solutions to the probelm. |
| | Technology knowledge | Understanding how to use technology and failed to understand how the technology works. Minimal knowledge to varity options of technology and the difference among different options |
### Overall comment
Candidate demonstrate the ability more of senior backend developer. For an architect role, candidate demonstrated more of juior level to mid-level ability.
## Assessment Details
### Architecture design
#### Summary: Candidate demonstrate experienced in fundamental system design ability, such as load balancing, cache, db cluster etc.
**Conversation Log 1**
> Suppose you have a search bar and you would like to implement search query suggestions while a person is typing. How would you design this system? Explain components first and then we would dive into the implementation details.
>> I will use keypress event combined with ajax to retrieve data from backend
>So you are saying you will use key-press event plus ajax in the front-end, what about backend, what would you choose?
>> I will use RESTFul API
**Comments**
Pros:
- Candidate demonstrate to design this problem in the perspective of the front-end.
Cons:
- I have to lead his answers with more architectural overview design.
- Given the context of his interviewing position, I am expecting to hear some of more architectural answer, for example:
- "I would design an API to accept the request, with cache of database and front-end to call the API to get the result...."
**Conversation Log 2**
> If the API received 10K requests at the same time, how would you design
>> I will have have many nodes of the serch service and dispatch requests via API gateway
>> Another solution is that if the data is static, then I will put the data to CDN
**Comments**
Pros:
- Candidate demonstrate a good design on how to scaling up the system.
**Conversation Log 3**
> Assuming you design the system with multiple components like you describe before (front-end API service, API Gateway, database, load balancer), how would you design your deployment process
>> I will use tool to scan source code to make sure no bad smell or other issue. Then I will use Gitlab CI/CD or jebkins to build the code. Then I will make built code into docker image and deploy to VM.
> How about configuration?
>> I will probably use dockerfile for configuration
**Comments**
Pros:
- Basic understanding of using Gitlab as CI/CD system
- Understanding building an artifact
Cons:
- Candidate doesn't appear fully understanding the whole DevOp process, such as configuration management, code-base commit strategy (chunk-base or feature based), or automation process.
**Conversation Log 4**
> Assuming you design a ecommerce system, how would you structure your code?
>> Traditionally, application will use MVC structure. Currently, I will seperate front-end and back-end. Front-end I will use react and back-end are all RESTFul API. I will add a repository layer to prevent API layer directly access to database. RESTFul API will own a service layer to control repository layer.
>> Another approach is that I will implement MQueue to decouple data access layer and database.
> Can you describe more?
>> I should say the service layer to send request to MQueue and using a consumer to write data to system. So that if any service is down, MQueue can persist the request.
**Comments**
Pros:
- Candidate is demonstrating decent ability to design distributing system, probably from his experience.
- Good understanding of how to do code decoupling by introducing dependency inversion principle (later in the conversation)
Cons:
- With seperation of layers and using queue system, it will lead to later design of micro-services, which will encouter deeper issues such as 2-step transaction, or transaction roll-back machenism. But candidate doesn't have any experience with it. (in later conversation)
- Candidate seemed to understanding partially architecture design but doesn't appear to be fully understanding the architecture he is providing. I am expecting to hear answers like "Hexagonal Architecture", "Onion Architecture", "Clean Architecture" and how he will design it under such architecture.
**Conclusion**
It seems to me that all the answers from the candidate is based on a senior deploper's role instead of an mid-level or senior architect role.
### Problem solving
#### Summary: Candidate demonstrate certain level of problem solving in the perspective of understand the problem, analyze the problem and providing solutions to the probelm.
**Conversation Log 1**
>Can you describe more about this API, how would you design it?
>> Depends on if this functionality required login or not, if it requires login, this API needs to include an token to validate if the user is authorized to use this functionality.
>> If the amount of data is not very large, I might cache data on the client side to reduce the requests count to server.
>> If the amount of data is large, I might also cache data on server side. It really depends on the requirements.
> Lets assume a specific scenario
>> Assuming we are searching a country code, the amount of data is not large (around 180+), I will cache data on the client side.
> What about searching a restaurant? Restaurant data is definetely large amount of data
>> It depends on if there are other combining searching criteria, such as location to narrow the scope of data search and then cache the data,
**Comments**
Candidate seemed to have idea of what might be the problem and provide his solution but he couldn't articulate the actual problem.
I am expecting to hear response like "limite data query in a range to reduce data transfer time"
During the whole conversation, I constantly hearing "it really depends on the requirements." I certainly expecting to hear some problem clarification questions, such as:
- "Does the search restaurant name comes with other criteria?"
- "Does the API needs authenticate?"
**Conversation Log 2**
>You suspect that there are vulnerability issues. How could you diagnose the system? What would you check?
>> Source Code, authentication system, firewall
**Comments**
Candidate seemed having limited experience in security area.
**Conclusion**
Problem solving is an essential skill for an architech. An architech must be able to
- Understand the problem
- Understand the problem behind the problem, example: what is the purpose of reduce the query data amount?
- Analyze the problem
- Gathering necessary information
- What might be side effect from this problem/soolution.
- Providing proper solution to the problem
- Understand the problem and side effects combining with knowledge of technology choices then make decision of solution
Candidte demonstrated limited ability on each of the category of described above.
### Technology knowledge
#### Summary: Understanding how to use technology and failed to understand how the technology works. Minimal knowledge to varity options of technology and the difference among different options
**Conversation Log 1**
>Why would you choose for Rabbit MQueue
>> Because java provide library that supports RabbitMQueue
>What about Kafka
>> As long as java can support then it should be okay.
>Do you know the difference of Kafka and RabbitMQueue
>> I haven't used kafka so I don't know about kafka
**Comments**
Pros:
Cons:
- Given the fact that kafka is widely used application in system design and an architect needs to know what choice can solve what problem.
- I am expecting to hear answers like "In this scenario, RabbitMQueue might be the best choice because I need queue functionality and kafka is more of messaging system, handling queue might spend much efforts".
**Conclusion**
The wide and depth knowledge of technology is helping an architect to make decision of what tool/application he/she would choose to solve what problem. An architect might not need to actually hands-on implementation of technology, but he/she needs to know what are the options out there and can solve what problem.
Candidate demonstrated limited his knowledge only to he has experiences with.
## Assessment Grading
Terminal 1 assessment is 8 hours offline project. It serves as a screen to ensure the candidate is above a base level of competence. Every assessment tests essential skills required for a job. Terminal 1 uses wings to represent the level of a skill.
#### Skill Grading Levels
Terminal 1 assigns levels to each assessed skill, which could be interpreted as a seniority level.
| Level | Icon | Notes |
|---|---|---|
| 0 |  | No knowledge of the skill, everyone who attempts the challenge gets this level. |
| 1 |  | Basic knowledge of the skill, could be awarded via online course completion or certification. Would be the main skill for junior positions. |
| 2 |  | Good knowledge of the skill. Approximately 200-800 hours dedicated directly to the skill mastering or 3-5 years of job experience. Only 10% of people get to this level. |
| 3 |  | Senior/Lead level with typically 5-10 years of experience. This is a high mark achieved by 3% of people. |