Large Scale Software Development
Bart Massey 2013-11-26
Overview
- Daily WTF CSoD: http://thedailywtf.com/Articles/How-the-Big-Companies-Do-It.aspx
- Large Scale Software Development
- Risk Management
- Open Source Software Development
Large Scale Software Development
Everything is harder
Some bits are fundamentally different
Key topics:
Software Process Management
Software Product Lines and Versioning
Large Scale Deployment
Software Maintenance
Software Process Management
Process must be well-controlled
Pick a "Process Model" and stick with it
Waterfall (incremental and iterative)
"Agile"
???
The "V Model"
The "Spiral Model"
The V Model
Discussed previously
Fundamental idea: during an activity, construct the V&V plan for that activity
Planning -> Deployment V&V \ / Requirements -> System V&V \ / Architecture -> Integration V&V \ / Detailed Design -> Module V&V \ / Implementation -> Unit V&V \ / \ /
Works well on several levels
The Spiral Model
Some projects are extra-risky. This threatens fail-early
Idea: be iterative at a higher level
| 1. Determine Objectives | 2. Identify and Resolve Risks | ---------------------------+----------------------------- | 4. Plan Next Iteration | 3. Development and Test |
"Spiral" outward through these steps until full scope is reached
SEI CMM
Capabilities Maturity Model: Example of process improvement
- Initial (1)
- Repeatable (2)
- Defined (3)
- Managed (4)
- Optimizing (5)
At each level, a number of specific process characteristics are required
Example of CMM L5 organization: NASA Space Shuttle SW group
Versioning
Large projects rarely have a single product even at one point in time
- Multiple simultaneous development threads
- Multiple configurations
Automated frameworks are key for management
- Able to build and test all versions automatically
- Able to track configurations and config change history
Large products must be built for size (c.f. Brooks' "Programming Systems Product"
Software Product Lines
Sometimes projects are built with a great deal of project-specific infrastructure
Keeping track of interrelationships and "soft SKUs" requires its own infrastructure
Large Scale Deployment
Number one rule: customer contact is... expensive
Number two rule: OOBE must be flawless
Risk management is key
- Incremental deployment
- Parallel deployment
- Deployment team resource management
Software Maintenance
Only one kind of unmaintained software
Perhaps biggest effort in software life cycle
See rule number one
Infrastructure is crucial
- Adequate staffing
- Adequate knowledge transfer
- Workable issue tracking system
Risk Management
All risks are magnified in a large project
Risk equation:
R = P x S
where
P
is the probability of the risk andS
is the severityKey document: Risk Management Plan
Identify all risks of significant
R
value (including a few highly improbable or not severe ones)For each risk, have plans for what to do if it materializes
Maintain the RMP over time
Open Source Software Development
An "alternate" model for large projects
- OK, not that alternate
Key ideas:
- Asynchrony and non-locality force a lot of large project practices anyhow
- Some hard constraints removed
- Some easy opportunites
Key practices:
- Code-centric development
- Tool-based practices
- Intensive user feedback