List of software development philosophies
This is a list of approaches, styles, methodologies, and philosophies in software development and engineering. It also contains programming paradigms, software development methodologies, software development processes, and single practices, principles, and laws.
Some of the mentioned methods are more relevant to a specific field than another, such as automotive or aerospace. The trend towards agile methods in software engineering is noticeable, however the need for improved studies on the subject is also paramount. Also note that some of the methods listed might be newer or older or still in use or out-dated, and the research on software design methods is not new and on-going.
Software development methodologies, guidelines, strategies
Large-scale programming styles
- Behavior-driven development
- Design-driven development
- Domain-driven design
- Secure by design
- Test-driven development
- * Acceptance test-driven development
- * Continuous test-driven development
- * Specification by example
- Data-driven development
- Data-oriented design
Specification-related paradigms
Comprehensive systems
- Agile software development
- * Lean software development
- Lightweight methodology
- * Adaptive software development
- * Extreme programming
- * Feature-driven development
- * ICONIX
- Kanban (development)
- Unified Process
- *Rational Unified Process
- *Agile Unified Process
Rules of thumb, laws, guidelines and principles
- ACID
- Big ball of mud
- Brooks's law
- C++ Core Guidelines P1 - P13 Philosophy rules
- CAP theorem
- Code reuse
- Command–query separation
- Conway's law
- Cowboy coding
- Do what I mean
- Don't repeat yourself
- Egoless programming
- Fail-fast
- Gall's law
- General Responsibility Assignment Software Patterns
- If it ain't broke, don't fix it
- Inheritance (OOP)
- KISS principle
- Law of Demeter, also known as the principle of least knowledge
- Law of conservation of complexity, also known as Tesler's Law
- Lehman's laws of software evolution
- Loose coupling
- Minimalism (computing)
- Ninety–ninety rule
- Open–closed principle
- Package principles
- Pareto principle
- Parkinson's law
- Principle of least astonishment
- Release early, release often
- Robustness principle, also known as Postel's law
- Rule of least power
- SEMAT
- Separation of concerns
- Separation of mechanism and policy
- Single source of truth
- Single version of the truth
- SOLID
- There's more than one way to do it
- Uniform access principle
- Unix philosophy
- Worse is better
- You aren't gonna need it
Other
- Davis 201 Principles of Software DevelopmentDon't Make Me Think
- The Art of Computer Programming
- The Cathedral and the Bazaar - book comparing top-down vs. bottom-up open-source software
- The Philosophy of Computer Science
- Where's the Theory for Software Engineering?
- The Yo-yo problem
Programming paradigms
- Agent-oriented programming
- Aspect-oriented programming
- Convention over configuration
- Component-based software engineering
- Functional programming
- Hierarchical object-oriented design
- Literate programming
- Logic programming
- Modular programming
- Object-oriented programming
- Procedural programming
- Reactive programming
Software development methodologies
- Agile Unified Process
- Constructionist design methodology
- Dynamic systems development method
- Extreme programming
- Iterative and incremental development
- Kanban
- Lean software development
- Model-based system engineering
- Pair programming
- Mob programming
- Rapid application development
- Rational Unified Process
- Rubber duck debugging
- Scrum
- Structured systems analysis and design method
- Unified Process
Software development processes
- Active-Admin-driven development
- Behavior-driven development
- Bug-driven development
- Configuration-driven development
- Readme-driven development
- Design-driven development
- Domain-driven design
- Feature-driven development
- Test-driven development
- User-centered design
- Value-driven design
- Software review
- Software quality assurance