Skip to main content

Prerequisites & Getting Started

Minimal skills and toolkit needed. Focus on concepts, trade-offs, and operational thinking—the right tools follow naturally.

TL;DR

You don't need advanced math, a specific programming language, or expensive cloud credits. Basic programming literacy (can read code), OS/networking familiarity (processes, ports, DNS, HTTP), and Git fundamentals are sufficient. Setup takes 10 minutes: Node.js, Docker, optional Kubernetes (kind/minikube). This handbook teaches architecture principles applicable across stacks; examples use Python, Go, JavaScript, and YAML. Learning path: start with Foundational Concepts, then Core Design Principles, then dive into specific domains (data architecture, cloud-native, API design). Solid conceptual understanding beats tool complexity every time.

Learning Objectives

  • Confirm whether your current skills are sufficient to start
  • Set up a minimal, effective local environment for hands-on examples
  • Identify optional tools for deeper exploration (no setup required for reading)
  • Choose a learning path matching your role (engineer, architect, lead)
  • Understand which examples to run locally vs. which to understand conceptually

Motivating Scenario

You're a mid-level software engineer with 3 years of experience in a specific domain (e.g., web backend, mobile, data pipelines). You want to move toward architecture—understanding trade-offs, system design, and operational concerns. You don't want to spend weeks installing Kubernetes, configuring CI/CD, or learning a new programming language. You need a clear baseline of "what can I skip?" and "what should I prioritize?" This guide answers exactly that: minimal viable skills, fast setup, and a learning path tailored to your role. The good news: you likely already have 80% of the prerequisites and don't realize it.

Core Concepts: Required Skills

Prerequisites pyramid: conceptual understanding matters more than tool fluency. Build a strong foundation first.

Required: Conceptual Foundation

  • Reading & Reasoning: Can you read code and pseudocode without running it? Can you trace an execution path mentally? Architecture is about reasoning about systems before building them.

  • Basic Programming: 1-2 years experience in any language (Python, Go, Java, JavaScript, C++). You don't need to be an expert; you need to understand variables, functions, loops, and errors. This handbook uses multiple languages; focus on the concepts, not syntax.

  • OS & Networking Fundamentals: Know the difference between processes and threads. Understand ports (client connects to server:port). Know DNS (hostname → IP address). Know HTTP request/response basics. These are non-negotiable for understanding distributed systems.

  • Git & Version Control: Can clone a repo, create a branch, commit, open a pull request. Can review diffs and understand merge conflicts. Essential for following real-world architecture decisions.

Helpful: Practical Skills

  • Terminal/CLI Fluency: Comfortable with bash/zsh. Can run commands, pipe output, edit files. Not essential, but 10 times faster than GUI equivalents.

  • Docker Basics: Understand what a container is (isolated process). Can docker run an image, view logs, exec into a container. Enables hands-on experimentation without VMs or complex setup.

  • One Cloud Account: Free tier on AWS, GCP, or Azure. Useful for real-world examples, but not required; examples work on local Kubernetes (kind/minikube).

Optional: Advanced Tools

  • Kubernetes: Understand pods, services, deployments. Required for cloud-native patterns, but can learn from examples without installing it.

  • Service Mesh (Istio, Linkerd): Advanced topic; covered but not required for fundamentals.

  • Distributed Tracing (Jaeger, Datadog): Optional; helps debug microservices, but many engineers skip it for years.

Practical Example: Required vs. Optional

# Self-Assessment: Required Skills

Do you check these boxes?

1. **Programming**: Can you read this Python code and explain what it does?
```python
def fetch_user(user_id):
response = requests.get(f'https://api.example.com/users/{user_id}')
if response.status_code == 200:
return response.json()
return None

Answer: The function makes an HTTP GET request to an API endpoint, returns JSON if successful, else None. ✓ PASS if this makes sense to you.

  1. Networking: What happens when code calls example.com:8080? Answer: DNS resolves example.com to an IP; TCP connection opens to port 8080. ✓ PASS if you understand this flow.

  2. Git: Can you explain the steps to contribute a feature? Answer: clone repo, create branch, make changes, commit, push, open PR. ✓ PASS if you've done this before.

  3. OS Basics: What's the difference between a process and a thread? Answer: Process is isolated; thread is lightweight, shares memory within process. ✓ PASS if you understand trade-offs.

Score: 4/4 = Ready to start!

Score: 3/4 = You're 75% ready; see "Gaps" section below.

Score: 2/4 = Recommended: spend 1 week on fundamentals first.

  </TabItem>

<TabItem value="optional-checklist" label="Optional: Advanced Skills (Learning Path)">
```markdown
# Optional Skills (Don't Worry About These Yet)

These are useful but NOT blocking. Learn them as needed.

1. **Docker Proficiency**: Can you write a Dockerfile and build an image?
- Nice to have for "hands-on" experimentation
- Not required to understand Docker concepts
- Can learn in 1-2 hours if you already program

2. **Kubernetes (k8s)**: Can you write a pod manifest and deploy it?
- Useful for cloud-native patterns
- Examples work on local k8s (kind) or can be understood conceptually
- Deep dive in dedicated section

3. **Cloud Providers (AWS/GCP/Azure)**: Can you provision a database or VM?
- Each has a free tier ($300 credits, 12 months free)
- Optional: examples include cloud-specific patterns, but work locally too
- Pick one; don't learn all three

4. **Service Mesh (Istio)**: Can you inject sidecars and configure traffic policies?
- Advanced topic; covered in cloud-native section
- Most engineers don't use this for first 2 years
- Skip unless you're designing observability systems

5. **Distributed Tracing**: Can you instrument code and search traces?
- Very useful for debugging microservices
- Jaeger/Datadog/New Relic all have free local versions
- Learn this after you have multiple services running

Quick Setup: Local Environment (10-15 minutes)

  • Node.js LTS (v18+) + npm or pnpm package manager
  • Docker Desktop (Mac/Windows) or Docker Engine (Linux)
  • Optional: kind or minikube for local Kubernetes
  • Optional: Free tier cloud account (AWS/GCP/Azure)
# Install Homebrew (if not already installed)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Install Node.js LTS
brew install node

# Verify installation
node --version # v18.17.0+
npm --version # 8.0.0+

# (Optional) Install pnpm for faster installs
npm install -g pnpm

# Install Docker Desktop (GUI)
# Download from https://www.docker.com/products/docker-desktop
# Or via Homebrew:
brew install --cask docker

# Start Docker Desktop (once) and grant permissions

# Verify Docker
docker --version # Docker version 20.10+

# (Optional) Install kind for local Kubernetes
brew install kind

# (Optional) Install minikube as alternative
brew install minikube

# Test local k8s
kind create cluster
kubectl cluster-info
kind delete cluster

# Done! You can now run examples.

Learning Paths by Role

Start with Foundational Concepts (scale, resilience, trade-offs). Deep-dive: Data Architecture (schema design, indexing), API Design (versioning, contracts), Cloud-Native Patterns (service discovery, scaling). Timeline: 8-12 weeks at 5-10 hours/week. Hands-on: Deploy microservices locally, then to cloud.
Start with API & Interface Design (contracts, performance). Then: Foundational Concepts (latency matters!), Data Architecture (caching, eventual consistency). Skip: Deep Kubernetes/Docker details initially. Timeline: 6-8 weeks. Hands-on: Run backend locally, understand request/response cycles.
Start with Cloud-Native Patterns (orchestration, networking). Deep-dive: Image Management, Service Discovery, Cost Controls. Then: Foundational Concepts for business context. Timeline: 10-14 weeks. Hands-on: Deploy clusters, configure ingress, monitor systems.
Start with Data Architecture & Persistence (modeling, access). Deep-dive: Multi-tenancy (pooled isolation), ETL patterns, lakehouse concepts. Then: Foundational Concepts. Skip: Microservices patterns initially. Timeline: 8-10 weeks. Hands-on: Design schemas, query optimization, data migration.
Start with Foundational Concepts (broad perspective). Skip implementation details initially; focus on trade-offs and decision criteria. Then: domain-specific deep-dives based on team needs. Timeline: Open-ended (architecture is ongoing learning). Hands-on: Code reviews focusing on patterns, not syntax.

Self-Check Questionnaire (5 minutes)

Answer honestly. This helps determine your starting point.

  1. How many years of programming experience do you have?

    • 0-1 year (Gap: foundational programming)
    • 1-3 years (Ready for architecture)
    • 3-7 years (Ready; focus on breadth)
    • 7+ years (Mentor others; focus on gaps)
  2. Which networking concepts are comfortable for you?

    • I can explain TCP/IP and DNS (Good foundation)
    • I know HTTP but not TCP details (Helpful; will learn)
    • I understand ports and hostnames (Sufficient baseline)
    • Networking is foreign (Gap; allocate 1 week)
  3. Do you use Git daily?

    • Yes, fluent with branches/PRs (Ready)
    • Sometimes; I understand basics (Ready)
    • Rarely; I'm hesitant about branching (Gap; 1 day to fix)
    • Never (Gap; 2 days to learn)
  4. Have you used Docker or deployed containers?

    • Yes, regularly (Excellent; skip Docker intro)
    • Once or twice (Helpful; can learn as needed)
    • Never (Optional; not blocking for reading)
  5. Have you worked in a microservices architecture?

    • Yes, 2+ years (Start with advanced topics)
    • Yes, < 1 year (Start with fundamentals)
    • No, monoliths only (Fundamentals are critical)

Scoring:

  • 3-5 "Good foundation" or "Ready": Start immediately with Foundational Concepts.
  • 2-3 gaps: Spend 1-2 weeks on gap fixes; revisit this assessment.
  • 4-5 gaps: Allocate 3-4 weeks for foundational skills; it's worth it.
Week 1-2: Fundamentals (5-10 hours)
→ Foundational Concepts
→ OS & Networking Basics (external resource)
→ Setup local environment

Week 3-4: Core Principles (10-15 hours)
→ Core Design & Programming Principles
→ Design Patterns (structural, behavioral)

Week 5-8: Specialization (20-30 hours, pick one)
→ Backend engineers: Data Architecture + API Design
→ Frontend engineers: API & Interface Design + Foundational Concepts
→ DevOps engineers: Cloud-Native Patterns

Week 9+: Deep Dives (ongoing)
→ Domain-specific articles and hands-on projects

Total: 12-14 weeks at 5 hours/week for comprehensive foundation.

Hands-On: First Exercise

Run this in your terminal after setup to validate your environment:

# 1. Verify Node.js
node -e "console.log('Node.js is working:', process.version)"

# 2. Verify Docker
docker run hello-world

# 3. (Optional) Verify Kubernetes
kind create cluster --wait 5m
kubectl cluster-info
kubectl get nodes

# 4. If all three succeed: You're ready to start!

One Takeaway

You likely already have 70-80% of the skills needed. The remaining 20% is about breadth (understanding trade-offs across domains) and hands-on experimentation. Solid conceptual understanding beats tool fluency. Start with what you know, use examples as scaffolding, and build from there. Tools and syntax change; principles are stable for decades.

Next Steps

  • Confirm your readiness: Complete the self-check questionnaire above
  • Close any gaps: Use the 1-4 week resources for programming, networking, or Git
  • Set up locally: Run the quick setup script matching your OS
  • Choose your learning path: Based on your role (engineer, architect, lead)
  • Start with fundamentals: Foundational Concepts if new to system design
  • Or jump to your domain: Data Architecture if you're a data engineer, Cloud-Native if DevOps, etc.

References