Six skills one should develop to grow into senior+ SWE positions.
- Data modelling
- entity: a concept or object in real world that can be uniquely identified (ex: person, place), represented by a table in db
- attribute: characteristics of entity (ex: name, age), represented by a column in db
- relationship: how entities are related to each other (ex: person has a name), can be 1-1, 1-many, many-many.
- Events, Message Queues, and Workers
- distributed systems that process work in real time (APIs) and asynchronously (queues + workers)
- one key piece of asynchronous systems is message queues, which are used to:
- rate limit processing of events
- communicate between microservices
- shard load of specific types of events to be processed at different rates
- batch process a bunch of events
- ex: instead of one mega server handing all tasks, throw them on a queue, have worker pods scale and pick them up, and send them asynchronously
- also used for interservice communication
- Autoscaling infrastructure
- for monoliths: setup autoscaling ec2
- for microservices: implement horizontal pod autoscaling in k8s
- db: amazon aurora spins up new replicas based on increase load
- Cloud Technologies
- can't avoid learning, need real-world experience solving business scaling problems
- ex in AWS
- SNS, SQS : message queues
- S3 : storage
- kafka, kinesis: event streaming
- EC2: monoliths
- Caching
- caching allows system to handle more load, respond faster, without scaling up
- read engineering blogs and system design to understand where/when to apply caching, instead of just saying "throw redis at it"
- types of caching:
- site cache: serve content quickly to return users
- application/output cache: server level HTML caching
- distributed data cache: redis, memcached
- file caching: CDN for static files
- Concurrency / Idempotency
- idempotency = ability to execute same operation multiple times without changing the result beyond the initial application
- ex: customer submitting same order multiple times (because of bugs) -> only one order is created
- how? send an idempotency key via api request, where it could be a hashed key of the forms data
- idempotency = ability to execute same operation multiple times without changing the result beyond the initial application