# 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.
-