An engineering discipline concerned with all aspects of software production (specification to maintenance), not just coding. Differs from CS (theory, algorithms, fundamentals) and personal programming (one person, little documentation/quality/long-term maintenance). SE builds large systems in teams with process, quality and professional responsibility.
Generic: built for the open market, developer controls the specification (e.g. Office). Bespoke: built for one customer who owns the specification. Implication: generic - developer sets features/priorities; bespoke - the customer has more say and drives change.
Heterogeneity (many platforms, legacy systems); business and social change (fast delivery and rapid change); security and trust (protect against attacks, keep information secure).
Waterfall: sequential phases; good visibility, inflexible; use when requirements are stable. Incremental: interleaved spec/dev/validation, delivered in versions; better feedback and lower cost of change; use where requirements change. Reuse-oriented: integrate existing components; lower cost/risk; use when good components exist (requirements compromises inevitable).
An early version used to try ideas and discover requirements. Benefits: early refinement, lower risk, designer exploration. Problems: users may think it is the final system; wasted effort if thrown away; can skip non-functional analysis.
Inception (business case, viability); Elaboration (understand problem, architecture, plan); Construction (design, implement, test); Transition (deploy, fix, document).
Business, needs, technology and legislation keep changing. Strategies: (1) change avoidance (anticipate via prototyping), (2) change tolerance (design for cheap change - incremental development and delivery).