List of software development philosophies - Wikipedia
Core Topics
Foundations
- Software Engineering Principles and Philosophy - Core principles, clean code, OWASP security, design thinking
Design Principles & Concepts
Object-Oriented Design
Object-Oriented Design - Core ideas of good OOP: invariants, encapsulation, cohesion, coupling, polymorphism, and SOLID principles
Design Principles
Design Principles - Prescriptive guidelines on HOW to design software
Fundamental Principles:
- DRY (Don’t Repeat Yourself) - Knowledge duplication vs code duplication, Rule of Three
- YAGNI (You Aren’t Gonna Need It) - Build only what you need now
- Composition over Inheritance - Favor “has-a” over “is-a” relationships
- Tell, Don’t Ask - Tell objects what to do, don’t query their state
- Law of Demeter - Principle of Least Knowledge, avoid train wrecks
- Command Query Separation - Separate commands from queries
SOLID Principles:
- SOLID Principles - Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion
Design Concepts
Design Concepts - Fundamental ideas that explain WHY design principles matter
Core Concepts:
- Invariants - Mathematical foundation of OOP, justifies class existence
- Inversion of Control - Framework-controlled flow vs traditional control
- Software Design - Design stamina hypothesis, internal vs external quality, coupling, cohesion
Design Patterns
Design Patterns - Specific, reusable solutions to common design problems
Classic Patterns:
- Strategy - Encapsulate algorithms and make them interchangeable
- Observer - Define one-to-many dependencies for automatic notification
- GRASP - General Responsibility Assignment Software Patterns
Architectural Patterns:
- Sensible Default Architecture - A pragmatic starting point for most applications
- Architectural Patterns - High-level structural approaches (Functional Core/Imperative Shell)
- Vanilla Rails vs. the Sharp Parts - How much structure a growing app needs: rich models and discipline vs. mechanisms (constraints, single write door); a scale-and-team trade-off
Pattern Resources:
- Patterns - Organized collection of patterns, principles, and paradigms
Code Quality
Writing Code
- Writing Good Code - Application services, use cases, repository pattern, DDD in practice
- Code Smells - Bad abstractions, poorly factored domains, pass-through methods
- Tidyings - Small incremental improvements (guard clauses, explaining variables, cohesion order)
Refactoring
- Refactoring - Arlo’s commit notation, refactoring resources
- ENOF (Easiest Nearest Owwie First) - Technique for unclear code
- Defactoring - Inline then extract with better understanding
Code Review
- Code Critique & Review - Effective review practices
Development Practices
Testing & Quality
- Test-Driven Development and Quality - TDD practices, quality aspects, Arrange-Act-Assert
- Shift Left - Move quality activities earlier in the lifecycle
- CD and Automation - Continuous integration, deployment, automation, pair programming
Organizational Practices
Team Practices
- Organizational Best Practices - BDD, incident management, egoless programming, code health
Delivery Management
- Feature Flags - Separate deployment from release, progressive rollouts
- Technical Debt - Strategic debt management, Broken Windows theory
Security & Robustness
- Rugged Software - Security-first development
- Robustness Principle - Postel’s Law
Functional Programming
- Functional Programming - FP concepts and patterns
- Monads - Functional composition
Additional Resources
24 Key Capabilities to Drive Improvement in Software Delivery - IT Revolution
Can and Should Instead of Is and Get
DevOps Handbook accompanying materials
See Also
Related Notes
- Testing - Testing strategies and best practices
- Delivery - Team processes and delivery patterns
- DORA - DevOps metrics and performance
Reading List
- Rocky Mountain Ruby 2017 • Livable Code - 4 steps to a cleaner codebase
- Modern Software Engineering - Evidence-based practices
- Accelerate - Science of DevOps
- Team Topologies - Organizing teams for fast flow
Back to
- Notes - All engineering notes