πŸ‘¨β€πŸ’»
Mike's Notes
  • Introduction
  • MacOs Setup
    • System Preferences
    • Homebrew
      • Usage
    • iTerm
      • VIM
      • Tree
      • ZSH
    • Visual Studio Code
    • Git
    • SSH Keys
  • DevOps Knowledge
    • SRE
      • Scaling Reliably
        • Splitting a Monolith into Microservices
      • Troubleshooting Common Issues
      • Service Level Terminology
      • Toil
      • Monitoring
      • Release Engineering
      • Best Practices
      • On-Call
      • Alerting
    • Containers
      • Docker
        • Best Practices
          • Image Building
          • Docker Development
        • CLI Cheat Sheet
      • Container Orchestration
        • Kubernetes
          • Benefits
          • Cheat Sheet
          • Components
          • Pods
          • Workload Resources
          • Best Practices
    • Developer Portal πŸ‘¨β€πŸ’»
      • Solution Overview 🎯
      • System Architecture πŸ—οΈ
      • Implementation Journey πŸ› οΈ
      • Cross-team Collaboration 🀝
      • Lessons & Future πŸŽ“
    • Provisioning
      • Terraform
        • Installation
        • Usage
    • Configuration Management
      • Ansible
        • Benefits
        • Installation
    • Build Systems
      • Bazel
        • Features
  • Security
    • Secure Software Engineering
    • Core Concepts
    • Security Design Principles
    • Software Security Requirements
    • Compliance Standards and Policies
      • Sarbanes-Oxley (SOX)
      • HIPAA and HITECH
      • Payment Card Industry Data Security Standard (PCI-DSS)
      • General Data Protection Regulation (GDPR)
      • California Consumer Privacy Act (CCPA)
      • Federal Risk and Authorization Management Program (FedRAMP)
    • Privacy & Data
  • Linux Fundamentals
    • Introduction to Linux
    • Architecture
    • Server Administration
      • User / Groups
      • File Permissions
      • SSH
      • Process Management
    • Networking
      • Diagrams
      • Browser URL Example
      • Network Topologies
      • Signal Routing
      • DNS (Domain Name System)
      • SSL (Secure Sockets Layer)
      • TLS (Transport Layer Security)
  • System Design
    • Process
    • Kafka
      • Advanced Topics
    • URL Shortener
Powered by GitBook
On this page
  • Stability vs. Productivity
  • Boring = Good
  • Eliminate Dead Code
  • Minimal APIs
  • Modularity
  • Simple Releases
  • Key Points to Remember

Was this helpful?

  1. DevOps Knowledge
  2. SRE

Best Practices

Stability vs. Productivity

  • Goal: Balance system stability with developer productivity.

  • Exploratory coding: Temporary code for problem exploration; not meant for production.

  • Production systems: Prioritize stability, but reliable processes should also enhance productivity.

    • Faster bug detection and fixes in reliable systems.

    • Focus on system performance and functionality.


Boring = Good

  • In software, "boring" systems are predictable and stable.

  • Essential complexity: Unavoidable complexity inherent to a problem.

  • Accidental complexity: Extra complexity introduced by poor design choices (e.g., Java's garbage collection in a web server).

  • SRE's job: Minimize accidental complexity.


Eliminate Dead Code

  • Unused code = Liability

    • Creates confusion and increases the risk of bugs.

    • Negative lines of code: Removing unnecessary code can be more valuable than adding features.

    • Smaller codebase = Easier to maintain and understand.


Minimal APIs

  • Fewer methods and arguments = Easier to use and maintain.

  • Simplicity in API design improves focus on core functionality.

  • Antoine de Saint-Exupery quote: "Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away."


Modularity

  • Loose coupling = Flexibility and scalability.

    • Independent updates to system components minimize disruption.

    • Apply to distributed systems and APIs.

  • Versioning APIs allows for smooth upgrades without breaking dependencies.

  • Modular systems help manage growing complexity.


Simple Releases

  • Releases should be incrementalβ€”small batches, not big ones.

    • Easier to test and troubleshoot.

    • If many changes are released together, it’s harder to track down the cause of any issues.

  • Incremental releases = more control, faster progress.


Key Points to Remember

  • Simplicity = Reliability: Keeping things simple helps ensure systems are more reliable.

  • Boring is good: Predictable, stable systems are the goal.

  • Focus on clarity: Eliminate unnecessary code and complexity.

  • Minimalism in design: Smaller APIs and modular systems are easier to maintain and scale.

PreviousRelease EngineeringNextOn-Call

Last updated 8 months ago

Was this helpful?