Designing Software Systems for the Cloud

Existing AWS tutorials and books focus too much on AWS itself, glossing over details, and the console. This series focuses on the principles underlying software design for cloud-based systems. You will come away with a deeper understanding and a few end-to-end examples under your belt.

By the end of this series you will be able to:

  • Design, implement, deploy, and operate AWS-based software systems.
  • Evaluate trade-offs between different managed services with respect to a given software architecture.
  • Reduce unknown unknowns when it comes to relying on managed services.

Table of contents

  1. Tutorial - Personal Todo List on AWS
    Infrastructure as code, compute, storage, monitoring, deployments.
  2. Case Studies
    Two services with different focuses.
  3. Design - Compute
    Cattle not pets, latencies: cold vs. warm vs. hot, scalability vs. elasticity.
  4. Design - Storage
    Myth of the single solution, access patterns, latency, availability, consistency and idempotency, caching.
  5. Events, Messaging, and Workflows
    Queues and work, events and notifications, workflows - how hard can they be?
  6. Security
    Asset-centric threat modeling, attack modeling, the bare essentials.
  7. Reliability
    Fault tolerance, replication, cells
  8. Change and Operations
    Change is a continuum, deployment types, monitoring production, faking customers, testing in production.
  9. Performance and Cost Efficiency
    Latency vs. throughput, types of performance, opex vs. capex, capacity and scaling planning.
  10. Appendix - Principles and Values
    Documentation, tutorials, small experiments, asking questions the right way.
  11. Appendix - How to Research a Managed Service
    Tutorials, docs, experiments, scalability, limits and edge cases, deployments and changes. Example using SQS.