SDLC (Software Development Life Cycle)
SDLC (Software Development Life Cycle)
Definition: The Software Development Life Cycle is the structured sequence of phases a software system passes through from first concept to eventual retirement — requirements, design, implementation, testing, deployment, and maintenance. It describes what work must happen and what each phase produces, not how fast, in what order, or in how many passes a team moves through it. Every process model, from Waterfall to Scrum, is simply a different strategy for traversing these same phases. Treating the SDLC as a checklist you complete once is the classic error; treating it as a loop the product re-enters continuously is the working reality.
How It Works
The SDLC is best understood as a set of six recurring activities, each with a defined input, a defined output artifact, and an owner who is accountable for it. In a heavyweight process these become formal stage gates with sign-offs. In a lightweight process they compress into a single afternoon of work on a single user story. The activities themselves never disappear — they only change in size, formality, and frequency.
The Canonical Phases
The arrow from operation back to requirements is the most important line in the diagram. Software that is used generates new information — bug reports, performance data, feature requests, regulatory changes — and that information is a requirements input. A system in production is not finished; it is at the start of its next lap.
Phase 1 and 2: Requirements and Design
Requirements and analysis establishes what the system must do and under what constraints. Business analysts, product managers, domain experts, and increasingly the engineers themselves work to elicit needs from stakeholders, resolve contradictions between them, and separate the functional requirements (what the system does) from the non-functional ones (how well it does it — latency, availability, security posture, accessibility, cost per transaction). The output is some form of specification: a formal requirements document in regulated environments, a set of user stories with acceptance criteria in agile ones, a one-page problem statement in a startup. Whatever the format, its job is identical — to be a testable statement of intent that the later phases can be checked against.
Architecture and design converts intent into structure. Here the team decides the system decomposition, the technology stack, the data model, the interfaces between components, the deployment topology, and the trade-offs among competing quality attributes. Design happens at two altitudes: high-level design fixes the boundaries and contracts that are expensive to change later, while detailed design fixes the internals of individual modules, which are cheap to change. Artifacts include architecture decision records, sequence and component diagrams, API schemas, database migrations, and threat models. The architect or tech lead owns this phase, but the whole team’s understanding of it determines whether the design survives contact with the code.
A subtle but crucial point: design is where the non-functional requirements are actually satisfied. You cannot bolt on availability, security, or observability during testing. If the design did not account for them, no amount of later effort will retrofit them cheaply.
Phase 3 and 4: Implementation and Verification
Implementation is the phase everyone pictures when they think about software, and it is usually the smallest fraction of total lifetime effort. Developers write code, write tests alongside it, integrate against shared branches, and review each other’s work. The outputs are far more than source files: a versioned build artifact, dependency manifests, migration scripts, configuration for each environment, and updated developer documentation. Modern practice folds a large slice of verification directly into this phase through unit tests, static analysis, and continuous integration, which is exactly why the phase boundary blurs in agile teams.
Verification and testing asks two distinct questions that are routinely conflated. Verification asks “did we build the system right?” — does the implementation match the design and specification? Validation asks “did we build the right system?” — does the specification actually solve the user’s problem? Unit and integration tests answer the first. User acceptance testing, beta programs, and usability studies answer the second. A project can pass every automated test and still fail validation completely, shipping a flawless implementation of a misunderstood need.
Testing spans a hierarchy: unit tests around functions and classes, integration tests across module boundaries, contract tests between services, end-to-end tests through the user interface, plus specialised passes for performance, security, accessibility, and regression. QA engineers own the strategy in larger organisations; in smaller ones the developers own it directly. The artifacts are the test suites themselves, coverage and defect reports, and a signed-off record of which requirements have been demonstrated.
Phase 5 and 6: Deployment and Maintenance
Deployment and release moves a verified build into the hands of users. This phase carries far more engineering weight than its brevity suggests: environment provisioning, configuration management, database migrations, feature flag setup, canary or blue-green rollout, rollback rehearsal, monitoring and alerting hookup, and user communication. Release engineers or platform teams own the mechanics; the product owner typically owns the go or no-go decision. The artifacts are the deployed release itself, its release notes, the runbook for operating it, and the rollback plan that nobody wants to need.
Operation and maintenance consumes the majority of a system’s total cost — commonly cited as sixty to eighty percent of lifetime spend. It divides into four recognised categories:
| Maintenance type | Trigger | Typical share |
|---|---|---|
| Corrective | A defect was found in production | ~20% |
| Adaptive | The environment changed: new OS, new API version, new regulation | ~25% |
| Perfective | Users want enhancements or the team wants better performance | ~50% |
| Preventive | Reduce future failure risk: refactoring, dependency upgrades, hardening | ~5% |
The striking figure is perfective maintenance. Most post-release work is not fixing what broke; it is responding to what was learned. That single fact is the strongest empirical argument for iterative process models — if half of all work arrives after first release regardless, a process that assumes requirements are fully knowable up front is fighting its own data.
Maintenance is also where entropy is fought. Lehman’s laws of software evolution capture the dynamic precisely: a system in continuous use must keep changing or become progressively less useful, and as it changes its internal complexity increases unless deliberate work is spent reducing it. That deliberate work — refactoring, dependency hygiene, deleting dead code, keeping tests fast — has no user-visible output and is therefore the first thing cut under schedule pressure. The cut is invisible for months and then presents as a mysterious, permanent slowdown in delivery.
Retirement is the phase teams forget to plan. Decommissioning means data export and archival, migrating or notifying users, revoking credentials and integrations, honouring data-retention obligations, and shutting down infrastructure. A system that cannot be turned off cleanly becomes a permanent tax on the organisation.
Phase Ownership and Artifacts at a Glance
| Phase | Primary owner | Key artifact | Exit signal |
|---|---|---|---|
| Requirements | Product / business analyst | Specification or story set with acceptance criteria | Stakeholders agree the problem is stated correctly |
| Design | Architect / tech lead | Architecture decision records, interface contracts, data model | Team can estimate the build with confidence |
| Implementation | Developers | Reviewed, tested, versioned build artifact | Code merged and CI green |
| Verification | QA / whole team | Test suites, coverage and defect reports | Acceptance criteria demonstrably met |
| Deployment | Platform / release engineering | Deployed release, runbook, rollback plan | Users can reach it and it is observable |
| Maintenance | Owning product team | Incident records, change requests, telemetry | Never — this phase feeds the next cycle |
Cross-Cutting Activities
Some work does not belong to a single phase; it threads through all of them, and the classic mistake is to schedule it as a phase of its own. Security is the clearest example. “Security testing” as a late gate finds only the vulnerabilities that survived a design which never considered attackers. A secure system is one where threat modelling shaped the requirements, least privilege shaped the design, input validation shaped the implementation, and monitoring shaped the operation.
| Cross-cutting concern | In requirements | In design | In build and test | In deploy and operate |
|---|---|---|---|---|
| Security | Abuse cases, data classification, compliance scope | Threat model, trust boundaries, key management | Dependency scanning, static analysis, secure defaults | Patching, secret rotation, intrusion detection |
| Configuration management | Which environments must exist | Config as code, environment parity | Versioned builds, reproducible dependencies | Drift detection, controlled change |
| Documentation | Statement of intent and acceptance criteria | Decision records and interface contracts | Inline docs, changelogs, examples | Runbooks, incident write-ups |
| Quality assurance | Testability of each requirement | Designing for observability and seams | The test suite itself | Production verification and error budgets |
| Project management | Scope and stakeholder alignment | Sequencing and dependency mapping | Progress tracking and risk burn-down | Capacity for support and enhancement |
Data governance behaves the same way. Retention rules are a requirement, schema and encryption choices are design, migration correctness is implementation and testing, and deletion on request is an operational capability. Try to add any of it at the end and the earlier phases have already made the decisions for you, badly.
Phase Gates, Entry Criteria, and Handoffs
Between any two phases sits a transition, and every process model has an opinion about how formal that transition should be. A phase gate is an explicit decision point: work does not proceed until stated exit criteria are met and someone accountable says so. Traced through the life of a single unit of work — a feature, a story, a release — the gates form a state machine.
Two design choices determine whether gates help or hurt:
- Who holds the gate. A gate held by the team that does the work is a checklist; a gate held by an external committee is a queue. Queues add waiting time, and waiting time is pure cost with no quality benefit unless the reviewer actually rejects things.
- What the gate checks. Useful exit criteria are objective and falsifiable: tests pass, the threat model has been reviewed, the rollback has been rehearsed. Useless criteria are attestations that a document exists.
The agile move is not to delete gates but to shrink and automate them. A pull request template, a required review, a green pipeline, and a definition of done are gates — they are simply enforced by tooling in minutes rather than by meetings in weeks. The formality varies enormously by risk domain:
| Domain | Gate formality | Typical enforcement |
|---|---|---|
| Regulated medical or avionics | Very high | Signed design reviews, traceability matrix, independent verification |
| Payments and core financial ledgers | High for data-model changes, moderate elsewhere | Architecture review board plus automated checks |
| Enterprise SaaS | Moderate | Definition of done, code review, staged rollout |
| Consumer web and mobile | Low | Automated pipeline, feature flag, canary metrics |
| Internal tooling and prototypes | Minimal | Peer review, or none at all |
Choosing a Traversal: A Risk-Driven Heuristic
Since the phases are fixed and only the traversal varies, process selection reduces to a small number of questions about the problem, not about team preference:
- How reversible is a mistake? If a bad release can be rolled back in ninety seconds, optimise for speed and learn in production. If it flies, ships, implants, or writes irreversibly to a ledger, optimise for early detection.
- How stable are the requirements? A domain governed by an unchanging regulation tolerates up-front specification. A domain where user behaviour is the requirement does not — you cannot specify what you have not yet observed.
- How expensive is the feedback? If real user feedback costs a two-week beta with clinicians, batch work to make each round count. If it costs an hour of production telemetry, make batches tiny.
- How coupled is the system to non-software parts? Hardware, physical logistics, and contractual commitments impose long lead times that force earlier, firmer design decisions regardless of software preference.
- What does the contract or regulator demand? Sometimes the traversal is fixed externally, and the engineering question becomes how to run fast, healthy loops inside each mandated gate.
| Signal | Points toward | Because |
|---|---|---|
| Irreversible or safety-critical outcomes | V-Model, Waterfall, heavy inspection | Escaped defects cannot be patched away |
| Volatile or unknown requirements | Scrum, Kanban, continuous delivery | Short loops keep the escape distance small |
| Large system, partially known scope | Iterative and incremental, Spiral | Risk is retired increment by increment |
| Mixed risk within one product | Hybrid: heavy on the core, light on the edges | Ceremony should track the cost of being wrong |
| Fixed-price contract with defined scope | Phase-gated delivery | The commercial model needs discrete deliverables |
Signals That a Phase Is Being Neglected
Neglect rarely announces itself. It shows up as a symptom two phases downstream, which is why the diagnosis is usually wrong:
- Frequent mid-sprint scope arguments point at requirements, not at the developers who are arguing.
- Every estimate being wrong in the same direction usually means design decisions are being discovered during implementation rather than before it.
- Long-lived branches and painful merges signal that integration was never treated as part of implementation.
- A test suite that everyone reruns until it passes means verification has been reduced to ritual and no longer carries information.
- Deployments scheduled for Saturday night reveal that deployment was never designed, only endured.
- On-call fatigue with no corresponding feature velocity is maintenance debt being paid in human attention rather than engineering time.
- Nobody able to say who owns a running service means the operation phase has no owner, which guarantees the retirement phase will never happen.
Why It Matters
- It gives the whole domain a shared vocabulary. When someone says “we skipped design,” the SDLC is what makes that sentence mean something specific rather than being a vague complaint about rushing.
- It makes hidden work visible. Teams that do not name deployment and maintenance as phases systematically under-budget them, then spend a year confused about why velocity collapsed after launch.
- It provides the traceability regulators require. In medical, aerospace, automotive, and financial software, the ability to trace a line of code back through a test, a design decision, and a requirement is a legal obligation, not a nicety.
- It exposes where defects are injected versus where they are found. The gap between those two points is the single largest lever on total project cost, and you cannot see the gap without phase labels.
- It anchors estimation. Estimating “build the feature” is guesswork; estimating requirements clarification, design, build, test, and rollout separately produces numbers that survive contact with reality.
- It clarifies handoffs and accountability. Every phase boundary is a place where information is lost. Naming the boundaries lets you decide deliberately whether to keep them, soften them, or delete them entirely.
- It is the frame every process model argues about. Waterfall, V-Model, Spiral, Scrum, and Kanban are not rival lists of activities — they are rival opinions about ordering, batch size, and feedback frequency across the same activities.
- It supports risk management. Knowing which phase you are in tells you which risks are live: requirements risk early, integration risk in the middle, operational risk late.
- It survives technology churn. Languages, frameworks, and platforms turn over every few years. The phases have been stable since the 1970s because they describe the structure of the problem, not the tools.
Deep Dive: SDLC Is a Set of Phases, Not a Methodology
This is the most consequential confusion in the whole domain, and it produces sentences like “we don’t do SDLC, we do agile” — which is roughly equivalent to saying “we don’t do cooking, we do stir-frying.”
The SDLC names the activities. A methodology decides how to traverse them. Specifically, a methodology makes four choices:
- Order — strictly sequential, overlapping, or continuous?
- Batch size — how much scope passes through the phases at once: the entire product, a release increment, or a single story?
- Iteration count — one pass, a handful of passes, or an unbounded stream?
- Feedback latency — how long between building something and learning whether it was right?
All three traverse identical phases. Requirements analysis still happens in Scrum — it is called backlog refinement and it happens for one story at a time, days before the build, with the developer in the room. Design still happens in Extreme Programming — it happens continuously through refactoring rather than once in a document. Testing still happens in continuous delivery — it happens automatically on every commit rather than in a six-week phase before release.
The practical consequence: you cannot skip a phase, you can only relocate or shrink it. A team that “skipped design” did not eliminate design; it deferred design decisions into implementation, where they are made implicitly by whoever types first, without review, and without a record. A team that “has no requirements process” still has requirements — they live in a stakeholder’s head and get discovered during acceptance testing, at maximum cost.
This reframing also explains why hybrid processes are coherent rather than muddled. A team can run a heavyweight, document-driven requirements and design phase for a payment ledger where mistakes are catastrophic and irreversible, while running fully continuous phases for the surrounding user interface where mistakes are cheap and reversible. Both are legitimate SDLC traversals, chosen per risk profile rather than per team fashion.
Deep Dive: The Cost-of-Change Curve
The reason process models evolved at all is a single empirical observation: the cost of fixing a defect grows sharply with the number of phases between where it was injected and where it was found.
A rough model of repair cost is exponential in the number of phases escaped:
where is the cost of fixing the issue immediately, is the number of phase boundaries the defect crossed undetected, and is the per-phase escalation factor — empirically somewhere between and depending on how much downstream work has been built on top of the mistake.
The mechanism is straightforward. Each phase produces artifacts that later phases build upon. A wrong requirement corrected during review costs one conversation. The same wrong requirement corrected after release costs a spec change, a design change, a code change, new tests, a data migration for records already written under the wrong rule, updated documentation, retraining, a customer communication, and possibly a contractual or regulatory response.
Two opposite strategies follow from this curve, and both are rational:
- Reduce escapes. Invest heavily in early verification so defects are caught in the phase that injected them. Reviews, formal inspection, modelling, and prototyping all serve this. The V-Model is the purest expression: every left-side phase is paired with a right-side test level defined at the same time.
- Reduce instead of reducing defects. If you cannot prevent mistakes, shorten the distance between injection and detection. Ship a slice in two weeks and a requirements error escapes at most two weeks of downstream work. This is the agile bet, and it is why short cycles beat thorough documents in volatile domains.
Which strategy wins depends on the cost of a production failure and the reversibility of a release. A spacecraft cannot patch after launch, so it buys down escapes with inspection. A web application deploys forty times a day, so it buys down with speed. Modern DevOps practice pursues both simultaneously: automated verification makes early detection cheap, and deployment automation makes cycles short.
One warning about the curve: it is often quoted with false precision. The specific multipliers come from studies of large sequential projects in the 1970s and 1980s and do not transfer cleanly to a service with automated tests and instant rollback. The shape of the curve is robust; the exact numbers are not. Use it to reason about direction, not to justify a budget to two decimal places.
Traceability: The Thread Through the Phases
Traceability is the ability to follow a single need forward and backward across every phase: this business rule produced this requirement, which produced this design decision, which produced these modules, which are covered by these tests, which were exercised in this release, which is monitored by this alert. Regulated industries maintain it as a formal matrix. Everyone else maintains it informally through issue identifiers in commit messages, links from pull requests to tickets, and changelog entries tied to versions.
The value is not bureaucratic — it answers questions that otherwise take days:
- Impact analysis. If this requirement changes, what design, code, and tests must change with it?
- Coverage. Which requirements have no test demonstrating them? Those are the ones that will fail in production.
- Orphan detection. Which code exists that no requirement asked for? Often the most dangerous code in the system, since nobody knows what it is allowed to do.
- Incident forensics. When something breaks, which change introduced it and which decision permitted it?
Traceability is also what makes the feedback edge of the life cycle usable. A production alert that maps back to a requirement can be triaged by someone who was not there when it was written, which is the normal case in any system older than its team.
Comparison
| Concept | What it actually is | Relationship to SDLC | Common confusion |
|---|---|---|---|
| SDLC | The set of phases software passes through, plus their artifacts | The frame itself | Believing it implies sequential execution |
| Waterfall | One specific traversal: strict sequence, one pass, full scope | A methodology for traversing the SDLC | Using “SDLC” and “Waterfall” as synonyms |
| Agile (Scrum, XP, Kanban) | Traversals with tiny batches and continuous feedback | Also methodologies for traversing the SDLC | Claiming agile “replaces” the SDLC |
| DevOps | A culture and toolchain that compresses the deploy and operate phases and feeds telemetry back to requirements | An intensifier of the SDLC feedback loop, not a phase list | Treating it as merely a job title or a CI server |
| PDLC (Product Life Cycle) | Market-facing stages: introduction, growth, maturity, decline | Runs above the SDLC; one product life spans many SDLC cycles | Conflating a product’s market stage with an engineering phase |
How the Same Phases Get Sequenced Differently
| Phase | Waterfall | Iterative / Incremental | Agile / Continuous Delivery |
|---|---|---|---|
| Requirements | Once, fully, up front; frozen by sign-off | Re-opened at the start of each increment | Continuously, per story, days before build |
| Design | One comprehensive design document | High-level once, detailed per increment | Emergent; architecture decisions recorded as taken |
| Implementation | One long build phase after design sign-off | Build one increment at a time | Continuous, trunk-based, per story |
| Testing | A distinct phase after the build | Per increment, plus cross-increment regression | Automated on every commit; exploratory alongside |
| Deployment | A single large release event | One release per increment | Many per day, decoupled from release via flags |
| Maintenance | A separate team and budget after handover | Overlaps later increments | Indistinguishable from development; same team owns it |
| Feedback latency | Months to years | Weeks to months | Hours to days |
| Best fit | Fixed scope, stable domain, high change cost | Large systems with partial uncertainty | Volatile requirements, reversible releases |
Real-World Use Cases
- Medical device firmware under IEC 62304 must demonstrate a documented life cycle with traceability from hazard analysis through requirements, design, unit verification, and release records. The regulator audits the phases, not the code.
- Avionics software under DO-178C pairs every requirement with verification evidence and demands structural coverage analysis at the highest design assurance levels — a V-Model traversal driven entirely by the cost of an unrecoverable failure.
- Core banking migrations typically run a heavyweight requirements and design phase for the ledger and reconciliation logic, then incremental delivery of surrounding channels, because ledger errors corrupt data that cannot simply be redeployed away.
- A consumer SaaS startup compresses all six phases into a two-day loop: talk to three customers, sketch the flow, build behind a feature flag, test in staging, roll out to five percent, read the funnel, repeat.
- Government procurement frequently mandates phase-gated delivery with formal acceptance at each gate, because the contract structure requires a defined deliverable to attach payment to — a case where the process model is chosen by commercial rather than engineering logic.
- Automotive ECU development follows the V-Model with hardware-in-the-loop testing, since software is coupled to physical parts whose lead times fix the schedule long before the code exists.
- Game studios run pre-production as an explicit requirements and design phase, then vertical-slice increments, then a long certification and maintenance tail of patches and live content.
- Internal enterprise tooling often runs an informal but complete cycle: a Slack thread as requirements, a whiteboard as design, a pull request as implementation and review, and the owning team’s on-call rotation as maintenance.
- Open-source libraries distribute the phases across contributors: issues carry requirements, RFCs or design discussions carry architecture, pull requests carry implementation and review, and semantic versioning communicates the release phase’s contract to downstream consumers.
- Platform decommissioning projects treat retirement as a first-class phase with its own requirements, design, and rollout — data archival, redirect strategy, credential revocation, and customer migration deadlines.
Common Pitfalls
- Treating the SDLC as a methodology. The phases prescribe no order. Saying a team “follows the SDLC” describes nothing about how they work and gives false comfort in audits and status meetings alike.
- Skipping a phase rather than shrinking it. Every skipped phase relocates itself somewhere worse: skipped requirements surface during acceptance testing, skipped design surfaces as unmaintainable code, skipped testing surfaces as production incidents.
- Freezing requirements to protect a schedule. A frozen specification does not stop the world from changing; it only stops you from responding to it, converting a schedule risk into a relevance risk.
- Under-budgeting maintenance. Most organisations plan the build and improvise the following five years, despite maintenance being the majority of lifetime cost. Funding models that end at launch guarantee decay.
- Confusing verification with validation. Passing all tests proves you built what was specified. It says nothing about whether the specification was right, and only user-facing evidence closes that gap.
- Letting phase gates become theatre. A sign-off that nobody reads, on a document nobody maintains, adds delay without adding assurance. If a gate never rejects anything, it is not a gate.
- Ignoring the feedback edge. Deploying without telemetry, error tracking, or a channel for user reports severs the loop back to requirements — the system runs but the organisation stops learning from it.
- Applying uniform ceremony across unequal risk. Running full formal design on a marketing page and none on an authentication service is a common and expensive inversion; ceremony should track the cost of being wrong.
- Assuming phase order equals team structure. Organising into separate requirements, build, and test departments hardens the handoffs and maximises information loss, which Conway’s Law then bakes into the architecture.
- Forgetting retirement entirely. Systems accumulate because no one owns turning them off, and every zombie service continues to consume security patching, compliance attention, and on-call attention indefinitely.
Related Terms
- Requirements Engineering — the discipline that owns the first phase and determines what everything downstream is measured against.
- Waterfall Model — the strictly sequential, single-pass traversal that the term SDLC is most often mistaken for.
- V-Model — a traversal that pairs each design phase with the test level that verifies it, built explicitly around the cost-of-change curve.
- Iterative and Incremental Development — the shift from one long pass to repeated shorter passes over the same phases.
- Agile Manifesto — the values statement that reframed feedback latency as the primary variable to optimise.
- DevOps Culture — the practice set that compresses deployment and operations and wires telemetry back into requirements.
- Test Pyramid and TDD — how the verification phase is structured so it can run continuously rather than as a late gate.
- CI-CD — the automation that makes short traversals of the full cycle economically viable.
Example
A twelve-person team at a logistics company is asked to build a driver payout system. They begin with a genuine requirements phase, but scope it to two weeks rather than two months: interviews with the finance controller and eight drivers, a written statement of the payout rules, and a short list of non-functional requirements — payouts must be idempotent, every calculation must be auditable for seven years, and the nightly batch must complete within a two-hour window. The specification is deliberately thin on user interface detail and unusually precise on money handling, because the team recognises that a UI mistake is a Tuesday and a money mistake is a lawsuit.
Design follows the same asymmetry. The ledger gets an explicit architecture decision record: append-only event storage, every payout keyed by an idempotency token, no destructive updates ever. That decision is reviewed by two engineers outside the team and by the finance controller, because it is the one choice that will be prohibitively expensive to reverse once real payouts exist. Everything around the ledger — the driver-facing screens, the admin tooling, the reporting exports — gets no design document at all, only a whiteboard sketch, since all of it can be rewritten in a week if it turns out wrong. Implementation then runs in one-week increments, each traversing the remaining phases end to end: build behind a feature flag, unit and contract tests in continuous integration, deploy to production on Thursday, enable for a widening ring of drivers.
The payoff arrives in month three. A driver reports that split shifts crossing midnight are being paid against the wrong day — a requirements defect, a business rule the team had never been told about. Because the increment containing it shipped eleven days earlier, only eleven days of downstream work rests on the mistake, and because the ledger is append-only and auditable, the team can identify every affected payout precisely and issue correcting entries without editing history. The fix costs three days: one to re-open the requirement with finance, one to adjust the calculation and its tests, one to reconcile and communicate. Had the same defect been discovered eighteen months later, after a full sequential build, it would have required a data migration across hundreds of thousands of historical records whose correct values were no longer reconstructable. The team did not follow a different life cycle from a Waterfall project — same six phases, same artifacts, same owners. They simply traversed them in small enough loops that the cost-of-change curve never had room to climb.
Referenced by