  We propose a conceptual model of software development that encompasses all
approaches: traditional or agile, light and heavy, for large and small
development efforts. The model identifies both the common aspects in all
software development, i.e., elements found in some form or another in each and
every software development project (Intent, Product, People, Work, Time,
Quality, Risk, Cost, Value), as well as the variable part, i.e., the main
factors that cause the very wide variations we can find in the software
development world (Size, Age, Criticality, Architecture stability, Business
model, Governance, Rate of change, Geographic distribution). We show how the
model can be used as an explanatory theory of software development, as a tool
for analysis of practices, techniques, processes, as the basis for curriculum
design or for software process adoption and improvement, and to support
empirical research on software development methods. This model is also proposed
as a way to depolarize the debate on agile methods versus the
rest-of-the-world: a unified model.
