Most software development processes are a mix of established practices.
Software Development Lifecycle (SDLC) is an umbrella
term for organizing these practices into methodologies.
Which proccess is best depends on the project.
Trends
Caution advised - good stats are hard to come by.
Paradigms
Linear
Focuses on planning and documentation.
Summary
Principles
Sequential process. Do one step by one team, then pass to the next
team.
Document everything.
Works well when:
Requirements are well understood.
Documentation is important (e.g. regulatory requirements, audit trail,
high safety constraints).
Usage Examples:
Medical devices
Aerospace
Defense
Financial services
Advantages:
High predictability.
High accountability.
High documentation.
Disadvantages:
Decoupled teams leads to:
Silos (lack of communication)
Handoff delays
High risk of failure in late stages due to:
Lack of feedback.
Possible changes in requirements.
Methodologies
Waterfall is by far the most common linear methodology.
Iterative
Focuses on development in short cycles and flexibility.
Summary
Principles
Develop in short cycles (iterations).
Make changes based on feedback.
Works well when:
Requirements are flexible.
Close relationship between developers and stakeholders.
Teams are small and can be cross-functional.
Usage Examples:
Business software
Advantages:
Application is available early in the process.
Quick feedback from stakeholders.
Changes fixed quickly due to short iterations.
Can overlap lifecycle steps (e.g. one team can test previous iteration
while developers work on the next).
Disadvantages:
Less accountability.
Less predictability.
Methodologies
Agile is the most common iterative methodology. It is
also an umbrella term for many practices.
Scrum
Kanban
Others:
Lean
Extreme Programming (XP)
Continuous
Extends on iterative development by focusing on rapid feedback loops and
continuous integration and deployment.
Summary
Principles
Product is a living process.
Rapid feedback loops.
Continuous integration (CI)
Continuous delivery (CD)
Works well when:
Very large projects
Multiple teams
Multiple applications
Multiple environments
Usage Examples:
Large enterprise software
Large scale distributed applications
Advantages:
Built in focus on reliability and security
Fast development, deploymentment, feedback
Avoid lag where there is handoff between teams, e.g.:
Waiting for operations to deploy
Waiting for security to approve
Waiting for new requirements
Disadvantages:
Higher overhead to start.
Requires expertise to implement.
Requires buy-in from all teams.
May not be appropriate for small projects / teams / businesses.
Methodologies
DevOps is a combination of development and operations.
DevSecOps is a combination of development, security,
and operations. Brings focus to security throughout the process.