1.3 Development Process
← 1.2 Teamwork | Home | Next: 1.4 Problem-Solving Skills →
Agile Software Development Principles
- Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
- Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
- Business people and developers must work together daily throughout the project.
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
- Working software is the primary measure of progress.
- Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
- Continuous attention to technical excellence and good design enhances agility.
- Simplicity—the art of maximizing the amount of work not done—is essential.
- The best architectures, requirements, and designs emerge from self-organizing teams.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Additionally: - Be comfortable with iterative and incremental development. - Have self-organizing capabilities. - Focus on priorities and business value.
Why Asking for Time Estimates Is a Terrible Idea
The core problem: There is a near-total inability of developers to predict how long a project will take.
- The Standish Group CHAOS Report shows that only 29% of software projects are successful (on-time, on-budget, with a satisfactory result). Agile approaches show a 39% ratio of successful projects, while Waterfall only 11%.
- Root causes: writing fully detailed specifications is essentially writing the software in advance; software projects are unique and unpredictable; developers often effectively "lie" when giving estimates due to management pressure.
- It has become an industry standard for management to add a load factor of 2-5x to developer estimates.
- Fixed-everything contracts (fixed scope, fixed price, fixed deadline) are the root of all evil.
Alternative Solution (Scrum + Story Points)
- Create a Product Backlog with user stories describing functionality.
- Replace time estimates with Story Points using the Fibonacci scale (1, 2, 3, 5, 8, 13, 21). Find the easiest user story and give it a 1; find the hardest and give it a 13 or 21. Estimate the rest relative to these baselines.
- Key principle: Never link Story Points to time equivalents—doing so ruins the entire system and causes everyone to revert to time estimates.
- After a few cycles, Team Velocity (the number of story points completed per cycle) stabilizes.
- Based on velocity and the backlog's story point rankings, you can automatically forecast when a particular story will likely be completed.
- Avoid the term "sprint"—it implies a burst of effort followed by rest, which goes against sustainable development. Use "cycle" instead.
Sources
- Agile Manifesto — Principles behind the Agile Manifesto: https://agilemanifesto.org/principles.html
- Romen Rodriguez-Gil — Why Asking for Time Estimates Is a Terrible Idea: https://www.romenrg.com/blog/2015/09/28/why-asking-developers-for-time-estimates-in-software-projects-is-a-terrible-idea-and-how-to-bypass-it-with-scrum/
- Standish Group — CHAOS Reports (referenced within)
← 1.2 Teamwork | Home | Next: 1.4 Problem-Solving Skills →