## What do we mean by Scalability? * This course is about *Scalability* but what do we mean by that? * From a dictionary: "the capacity to be changed in size or scale" * This could be organizational, operational or in our case, technical
e.g.
You made some money making jewelry for your friends but will it scale? ... I can grade these by hand but that won't scale when I have 200 students!
### What do we mean by scaling? * Your program works not just with 100K of data but with 100Gig of data * Excel can handle a model not just with 300 rows but with 300K rows * Your web site works when 10 friends are using it but fails miserably when 5,000 people are using it simultaneously
### There's a life cycle * Sin: "Premature Optimization" * Don't assume that you know why * You are probably wrong! * Always measure to determine where the bottleneck is * You will never find the "last" bottleneck. * You will remove bottlenecks until the system scales to your requirements * "You're not Google" (or facebook, or instagram, or ...)
## Lets form some teams * How is it going with Ruby so far? * Let see if we can form some teams of 3 students... how? * Form 3 random Zoom Breakouts. Get to know each other * Each breakout will go for 5 minutes and then we do it again
## Software Aspects * You need to start with an idea of your goal * Usually expressed as: 1. Simultaneous users 2. Performance under load 3. Expensive operations 4. Rate of operations * Needs to have a target range that can be measured * Search for bottlenecks * Engineering for scalability is not free * Tradeoff with cost (people or equipment) * There are Best practices
### Hardware Aspects * Scaling "up" versus "out" * Have an intuition about the speed and latency of different media * What's the difference? * Compare speeds of: 1. memory 1. Local disk 1. SSD Solid State disks 1. NAS Network Attached Storage 1. Local LAN communications 1. Internet communications
### Operations aspects * Similarly there are goals * Usually includes 1. Availability 1. Freshness 1. Support * Availability sometimes comes as "Terms of Service" * Reliability of the infrastructure and quality of the software * Timely response to temporary load variability
### Development Process aspects * Embrace change because it will happen * Agile methodologies * Automated testing * Continuous integration, testing and deployment * Design for maintainability
Thank you. Questions?
(random Image from picsum.photos)