# Case Imagine that you are joining as a Tech Lead at Zehitomo. Your first mission is to oversee the development of a new functionality whose release date is set to 3 months from now. Please describe the process, system and tech architecture and collaboration with stakeholders from now to the release. ## Requirements - Administration interface for service providers (eg. flower shop, coiffeur, etc.) - Create/edit/publish/disable service opening - Assignes budget for advertisement campaings (=> improving ranking position in service search result page) - Track requests/revenue and ad campaigns related to service openings - Please imagine that you will develop an independent functionality (=> development from scratch), but the functionality might rely on existing APIs ## Organization & team structure - Sales & Growth organization - Growth team - Strategy for growing the business - Success team - Ineracts with existing customers - Product & engineering organization - Manager - Allocates resources & budget, hiring, people management - Product Owner - Translates product roadmap into milestones/deliverables - Prioritizes deliverables - Tech lead (you) - Responsible for all tech related decisions (incl. dev process) - Domain expert (SEO, B2B business) - Gives advice/help related to domain knowledge - Establish - Technical Product manager - Translate requirements - Engineers - 5 Backend and 3 Frontend engineers - Work in small teams (3-4 person) based on assigned KPI or project - QA - Validate release, testing ## Tech stack - Node.js - Mongo DB - React - AWS # Solution - Get the requirements more fleshed out from the sales & growth team, and product owner. - Microservice based design (could also be serverless but...) - Design by contract for better work devision. - Agile process. ## System architecture - Kubernetes vs serverless - I will go with Kubernetes because that is to my mind to be the most long-term stable solution in the cloud environment, as well as the most portable one. - Amazon EKS. - Application communicates with front end using GrahQL. - Application uses various REST/RPC microservics on the back end for work division and scalability. - Split between ad campain microservice, a payment tracking service (if taht doesn't already exist, otherwise extend that) and service opening microservcie, and an app to centralize this. ## Process/Schedule/Milestones - Determine the requirements in more detail, meetings between growth team & product owner - In paralell start design by contract beteween front-end and back end, and between back end developers by desigin the machine readable data contracts. - Font end can generate their mock back end servers based on the contract. - Back end can generate GraphQL API or REST API based on the contacts. - Once details are more clear update machine readable contracts. -