Agile is an umbrella of methodologies that promote frequent inspection and adaptation, cross-functional interactive and iterative team work, self-organization and accountability, and a set of engineering best practices that allow for rapid delivery while aligning development with evolving customer needs and company goals.
RUP (Rational Unified Process) is an waterfall software development process framework created by the Rational Software Corporation, a division of IBM since 2003. RUP is an adaptable process framework, intended to be tailored by the software project teams. Waterfall refers to a process that has discrete phases that are executed in sequence. RUP does explicitly support iteration, but I am getting ahead of myself…
Agile and RUP at the surface represent diametrically opposing software lifecycle philosophies. In a literal sense, the benefits of one are the weaknesses of the other.
As a waterfall methodology, RUP would offer the following advantages:
- Consistent quality
Releases to production would be of a consistent predetermined quality - Feature prioritization
Efforts and releases focused on areas of prime business benefit - Clear release scope
Enhancements and fixes clearly defined in advance - Regular and scheduled releases
Production releases would occur on a regular basis and scheduled in advance - Risk management
Areas of risk would be identified in advance, understood, mitigated and managedProject success rates could improve - Reduced costs
Through better documentation, clearer roles, tasks and structure, it is possible to effectively utilize lower cost staff for areas within the technology organization. Additional costs are saved through reduced errors and rework. - Transparency
Visibility would be improved into the efforts, costs and resource allocation within the technology organization.
However, the waterfall/RUP methodology advantages accrue with the assumption that the selected project has the following characteristics:
- Large enough
To benefit from the overhead of documentation/review - Sufficient time
To allow approvals and sequencing - Known enough
To be able to precisely define the end-state - Open budget
When knowing the precise cost is less important than getting the right result
Good examples of a fit for Waterfall/RUP would be:
- A core engine that serves many users/customers/systems
- System deliverable that must meet stringent quality/functionality requirements
In contrast, examples of good fit for Agile (and bad fit for waterfall) could be:
- Simple program maintenance
- Database tuning
- User Interface development
These are just examples. What might be a good criteria for selecting a methodology?
Agile fit:
· Low criticality
· Senior developers
· Requirements change very often
· Small number of developers
· Culture that thrives on chaos
· Adaptive Planning
· Responsive to customer guidance
Waterfall fit:
· High criticality
· Junior developers
· Requirements don't change too often
· Large number of developers
· Culture that demands order
· Predictive planning
· Focus on date/scope
Agile needs RUP
For the majority of projects, one need not select from these two polar extremes. A methodology can easily be framed to utilize the best of both worlds. In fact, RUP accommodates “iteration” explicitly. Iteration is loosely defined within RUP/UML precisely to allow adaptation. Iterations can exist in both requirements and in development. They can include gradual increase in functionality, and work within regular release cycles. One can even iterate in cycles between requirements/development. Lastly, iteration is a key tenet in reducing risk. By iterating, one has the opportunity to tackle higher-risk requirements early, learning and adapting from experience. Isn’t that the essence of Agile?