---
# System prepended metadata

title: Luis Carvalho (2021-11-29)

---

# Luis Carvalho (2021-11-29)

## Presentation and getting to know about candidate (Total: 30m)
- Thank you for your time!
- We present ourselves and our roles/projects and tecnologies we work with
- Candidate presents himself.
- Let's know more about candidate's daily work
- How do you keep up to date?

- Farfetch 
    - Domínio de dados (big data)
    - I/O data

### Work process / Dev Practices

- How is your work day? (What does a typical day look like?)
    - Daily Work
        // -> Enfrentar novos desafios / não gosta de fazer a mesma coisa / design do sistema
        // -> não gosta tanto de produto -> prefere na parte técnica
    - Tests
    - Pipeline
        // Produto novo: Especificação com C4 Model
        - Arquitetura / segurança / ...
        // Novas features:
        - Documentar e depois desenvolvimento
        // Estavas a fazer uma pergunta de como tornar isto mais Agile e entrega mais rapido, e complicou mais o processo? yep
    - PR's/ Code Reviews
        - How does the code review work in your company? 
        // TDD -> Testes unitários || Está a tentar aplicar na equipa
- Dev Practices
    - Agile development (Scrum, Kanban, Others)
    - Code Testing
        - Testing?
        - What kind of tests do you do?
    - Continuous integration/delivery
    - Documentation
- The project that you are most proud of? and why?
    - RTP?(real time transport?)
    - usar ferramente de mobile analitics
    - tiveram de fazer ip whitelisting dentro da app?
- The project that you are less proud of? and why?
    - Fazer uma UI -> Não gosta de FE
- What was the most challenging "achievement", professionally speaking?

## Technical interview (Total: 1h10m)

- REST Design
    - // Todos os resources versionados (nice)
    - // Criação do flow é sem id. É gerado pelo sistema. 
    - // Bom conhecimento de REST API
    - CRUD over Call Resource
        - Which HTTP Codes? 
        - Which HTTP Headers?
        - Body? JSON/XML/Plain Text?
    - RPC Over Rest
    - PUT vs PATCH vs POST
    - // Parece-me que sabe bem as diferenças

- Application Design
    - How would you organize your code?
    - // Controller para gerir flows. Outro controller para steps
    - // +- (está formatado com a estrutura da FF)
    - IoC vs DI
        - Finalmente alguém que sabe o lifecycle da MS
        - IoC :ok_hand:
    - SOLID, DRY, KISS, YAGNI

- Resilience with Calls API + Monitoring & Alerting
    - How can I tolerate rare situations where I get a 500 response, but in the next request I get a 200?
        - How could one implement such retry mechanism?
        - // Retry policy. :+1: (exponential backoff)
        - Circuit breaker / retries (:+1:)
        - // Falou em circuit breaker
    - Error Handling -> 400 vs 500. WWYD? :ok_hand: (ele disse que eram erros de servidor/aplicacional) 
    - Huge spontaneous error rate with 500. WWYD? :ok_hand: 

- Imagina que queremos disponibilizar a API publicamente, para os clientes saberem como usar o nosso sistema. O que nos falta?
    - Autorização
        - // oauth 2.0
        - Identity provider
        - API Valida o Token + Permissions
    - Auditing
    - Documentação e swagger

- Quando vendemos um pacote de requests tínhamos dito aos nossos clientes que só aguentaríamos com 25 pedidos por minuto. Imagina que agora temos um cliente do nosso serviço que está com problemas e está a fazer 1000 pedidos por minuto. Sugeres fazer alguma coisa? O que poderíamos fazer para parar estes clientes mal comportados?
    - gateway/balancer em frente a aplicação
    - sabe que é um erro de cliente. não falou no 429
    - a gw tbm podia ter validação do token (mas não de scopes?) loadbalancer, router
    - não conhece algoritmos de rate limiting

    - Imagine that you know have a multiple API that you depend on. The system should be fault tolerant, and partial responses are accepted when it is in a "degraded" state. How can I achieve this? Which pattern is this?
    

    - My API was receiving 500 requests per minute, but know it is struggling with just 100. How could I know what is wrong? (Monitoring + Debugging Skills).
        - The problem is indeed in Contacts API. Assume that you know have RW Access to the code / monitoring of the system.
            - You discover the problem is in the time that the queries are taking to be fully performed. How could understand what is wrong? (Database is not important, choose the one you know the most).
                - EXPLAIN ANALYSE (PSQL)
                - EXPLAIN (MYSQL)
                - EXPLAIN PLAN (ORACLE)
                - // garantir que está tudo indexado
                - // perceber o custo da query
                - Ele já tinha falado que certificava que as queries tinham indexes (ele disse... mas isso não chega)
            - You discover the problem is indeed with Indexes, which ones would you create? Why not create indexes for all the fields?
            - // sabe que os indexes têm um custo alto de actualização

- DBs: 
    - OK, if this system needed to be deployed across multiple regions & datacenters would you choose SQL or NOSQL for this? Why?
    - // nosql para multi-region
    - // acho que podia ter explicado melhor os downsides de sql em multi-region
    - // falou que tinha de estar tudo num primario em sql, era impossivel ter vários
    - Imagine that you want to rename a field used in the database. How could this be done without any downtime. Is this possible? (+-)

- Neste momento esta API é exclusivamente interna e só conseguimos dar acesso ao nosso provider (Twilio). No entanto, faz parte da estratégia da empresa permitir que os nossos clientes tenham os seus próprios providers e encaminhem as suas chamadas para aqui. O que nos falta para tornar isto possível? 
    - Documentação
    - Autenticação/Autorização
    - Como conseguimos limitar o número de pedidos feitos por um cliente?
        - API WG?
        - Código de Erro?

- Reporting & Billing
    - Now we need to report all our calls to Reporting & Billing without blocking work (we do not want to know the result of the execution from their side)
    - // kafka para emitir eventos 

- Tests
    - Which tests would you implement during the development of this API?
    - Test Pyramid?
    - Mock vs Stub. Definition.

- Microservices Architecture
    - What are the major difference between a monolith vs a microservice?


Note for interviewers:
> With this questions we should be able to answer to **REST**, **SQL**, **NOSQL**, **Application architecture**, **Programming principles**, **Scalability Principles**, **Microservices Architecture**, **Test Driven Development**, **Message Queues**, **Resiliency principles**


## END (Total: 15m)
- What would you like to have at Talkdesk that you do not have now?
- Time for the candidate to make questions

# Feedback