Rails in the Large: How Agility Allows Us to Build One Of the World's Biggest Rails Apps
Neal Ford shows what ThoughtWorks learned from scaling Rails development: infrastructure, testing, messaging, optimization, performance.
Tracking change and innovation in the enterprise software development community
Posted by Dave Nicolette on Oct 31, 2008
It is a commonplace that iteration length should be set according to release cycle length. I disagree; I think the two cycles should be decoupled. Short iterations provide more-frequent feedback from customers than long iterations and afford the team more opportunities to reflect and improve their work practices. Shorter cycles result in a "heartbeat" that occurs frequently enough to be meaningful. Short cycles naturally prevent the team from creating work items that are tediously large, with no "success" point to be had until a great deal of work has been done. These benefits apply even when the release cycle is long.
Learning to be a Good Product Owner: Foundation Skills
Technical Debt and Design Death
Manager's Introduction to Agile Software Development
Impediments to Agile in the Enterprise
On the other hand, the discipline of working in timeboxed iterations is the source of some of the value-add of the agile approach, including frequent and regularly-scheduled demonstrations and retrospectives, a consistent schedule for delivering incremental results, frequent opportunities for customer feedback, and the sense of a "heartbeat" or "pulse" that seems to keep teams engaged over the long haul. Therefore, it seems reasonable to expect short iterations can provide a low-pain transition to a very lightweight iterationless process without making the mistake of "throwing out the baby with the bathwater" by dropping the value-add aspects of timeboxing the work, as some teams unfortunately have done when adopting an iterationless process.
A common mistake is to assume any and all practices the team had associated with "iterations" should be discarded when they move to an iterationless process. We do well to separate the concept of "iterations" from the specific value-add practices that are commonly associated with agile development, and look for ways to reduce process overhead while preserving beneficial practices.
Some people have experienced problems with short iterations. Mishkin Berteig, proponent of short iterations, also mentions some potential downsides:
Related InfoQ content: Extremely Short Iterations as a Catalyst for Effective Prioritization of Work
An IT professional since 1977, Dave Nicolette discovered Agile in 2002 and found it solved or alleviated many of the problems inherent in traditional IT. Since then, he has been a dedicated practitioner and ardent proponent of change toward Agile and Lean thinking and practices. He enjoys sharing experiences and effective practices with fellow IT professionals and participates actively in the agile community. Dave is currently an agile team coach for Valtech Technologies in the US.
of a waterfall process. I take issue with the importance of this. Many in the Kanban world suggest that Planning, Review and Retrospective meetings are eventually a form of waste.
I differ on this point seeing that much the activity that occurs in these meetings will occur even if the meetings don't exist. Example - I find a large chunk of the planning meeting will be taken up understanding the stories and breaking them down into tasks. This work will happen whether or not there is an explicit planning meeting.
Dave's article is very helpful to stimulate discussion and out-of-the-box thinking - and offers a perspective I had not considered for Agile adoption:
"I don't think we want more time for iteration planning; I think we want less iteration planning. I'm for ever shorter iterations, vanishing to none as we move to a customer pull approach with single-piece (read: single feature) flow."
My own experience with promoting the adoption of Agile principles within different size organizations - and different industries has been somewhat mixed.
The successes have been greater with small teams developing new software for start-ups.
The more challenging experiences have been in mature organizations - with large mission crticial applications that have impact on infrastructure (e.g. Telecom).
I like the idea of "single piece flow" - but the management approval, security, and quality inspection layers that must be passed for a release in large-scale development organizations (in my experience) __do__ often introduce a significant "Overhead tasks that must be done every iteration take a larger proportion of the time in the iteration."
I think on a comparative basis, an increasingly shorter iteration will eventually reach a point where the cost of context-switch (from one task to other, or one sprint to the next, etc.) will ovetake the direct costs of software development effectively canceling-out any advantages gained because of shortening the iteration.
Tathagat Varma
managewell.net
Interesting point - do you care to hazard a guess where that might happen? Mishkin Bertieg gave a talk at Agile 2008, called: Extremely Short Iterations as a Catalyst for Effective Prioritization of Work (www.infoq.com/presentations/Short-Iterations-Mi...).
Is that beyond the limit?
What about kanban? Does that get around the problem?
I don't think I understand the problem. When I envision a single-feature pull style of software development, I'm thinking each feature would be built and delivered before the team picks up the next feature, whether they literally use a kanban (card) system or some other mechanism. So, I don't see why there would be a context-switching problem. What am I overlooking?
Nice blog. I completely agree with your comments re Berteigs potential downsides to shorter iterations. Shorter iterations in my opinion are good and are a way to manage risk, to setup the heartbeat in the development organization and ruthlessly focus the organization around the most important things. In good Agile shops, teams would find ways to automate much of the overhead of say deploying to production every week etc.
I can't however see how an iteration-less process could work however. I think you need to have the end of sprint milestones to ensure the team is working towards a common goal. Without deadlines I can't see teams rallying around artificial boundaries. Perhaps I am missing something here but I just don't see this working at least not in my experience. Thought provoking though.
Jack
With an interationless process you still have release milestones, and there's nothing to prevent a team from choosing to hold retrospectives and interim product demonstrations at regular intervals, if they value those things.
I just don't think that release milestones are enough. I think the whole point about timeboxing (at least one aspect of it - there are others) sprints to say 30 days or 10 days (or whatever you decide) is to drive a sense of urgency and completion. I believe there are studies to suggest that individuals will naturally fill time based on who much time they have so if you don't have deadlines I am not sure you can be as effective as you can with them. My 2 cents.
I like the idea of "single piece flow" - but the management approval, security, and quality inspection layers that must be passed for a release in large-scale development organizations (in my experience) __do__ often introduce a significant "Overhead tasks that must be done every iteration take a larger proportion of the time in the iteration."
I have to agree that you can't fully embrace short iterations when part of the process is out of your hands. But I'm thinking that there may be parts of the process that are under the development team's (or group's) control.
While deployment in a production environment may not be possible, why not deploy in some test environment dedicated for testers and clients to validate what's been added? There could be at least some feedback and at least part of the entire development process would proceed with short iterations.
How do you think the absence of a team member affect commitments in short iterations? Do you think this has a higher impact when the length of the sprint is small?
The issue of process overhead in a large or
ganization is quite real. I think there are a couple of different situations, broadly speaking. First there's the case of an agile development team working in a traditional organization. In that case, the main impact on agile work will be that the "last responsible moment" (LRM) for decisions that have dependencies on non-agile groups will be earlier than we might prefer. It needn't affect the overall pace of work for the agile team; it only affects issues for which the team has a dependency on a non-agile part of the organization. Something that's worked for me in those situations has been to engage the non-agile groups on which our team had a dependency very early in the project so that they understood what we intended to do. In most cases, it turned out they were just as frustrated with status quo methods as we were, and they were happy to adjust their response time for our teams. In other cases, the non-agile group was adamant about sticking to The Process, and we resorted to contract negotiation over collaboration with them so that all parties knew what they were expected to do. It's manageable. There's no need to avoid all opportunities for improvement just because perfection isn't immediately achievable.
The second case is an agile development team in a supportive organizational culture. In that case, if there are business needs for multiple layers of approvals and inspections, then that's just part of the business. One would expect that because the organization as a whole is cognizant of waste and interested in delivering business value effectively, they won't be creating needless overhead; any approvals and inspections deemed necessary are probably necessary. I don't like waste, but not all overhead is waste; sometimes it serves a purpose. There might be regulatory requirements or customer safety issues that call for a bit of extra care. Frankly, I don't see this as a reason for longer iterations.
I'm not sure who said there would be no deadlines. Anyway, the way your comment is worded it sounds as if you haven't experienced working in both ways, so it's hard for you to compare them. Why not try a project or two with and without iterations and see what really happens? If it turns out that people actually don't deliver anything because they think they have an infinite amount of time, you can always re-introduce iterations in mid-project. I'm satisfied that enough projects have been delivered successfully that way to prove the case, but if you're not satisfied then there's no surer way to reach a conclusion than through personal experience. If you decide to try a project without iterations, I suggest you don't just dump iterations without introducing some other form of control. Read up on "kanban" methods first; see how people have managed the work without explicit iterations, and then give it a try.
I think that if a team member is absent for, say, three days then the impact is three days of one person's time, regardless of the iteration length. The impact to the project is the same.
But, if I understand you correctly, you are suggesting that false milestone's will create a sense of urgency. If business value is your goal, and a completed iteration does not deliver business value(i.e. is not deployed) then you have not achieved a real goal at iteration end.
My team a few years ago came to the conclusion that we were fooling ourselves trying to work towards iterations which did not lead to deployments. Of course there are two ways to solve this problem. One is to lengthen iterations as we have assumed here. The other is to shorted deployment cycles.
Neal Ford shows what ThoughtWorks learned from scaling Rails development: infrastructure, testing, messaging, optimization, performance.
Stuart Halloway discusses Clojure and functional programing on the JVM in depth, and touches on the uses of a number of other modern JVM languages including JRuby, Groovy, Scala and Haskell.
Oren Teich and Blake Mizerany talk about the technology behind Heroku and the benefits of the new add-on system.
Chris Riley presents security issues threatening service based systems, examining security threats, presenting measures to reduce the risks, and mentioning available security frameworks.
This talk investigates technical issues encountered when moving to an Agile process.
Don Box and Amanda Laucher present “M”, a declarative language for building data models, domain models or external DSLs. Don Box's demos show some of M’s features and latest changes of the language.
It is four months since the SOA manifesto was announced; InfoQ interviewed the original author’s to get insight into the motivations and the process behind the initiative.
This article explains the impact memory barriers, or fences, have on the determinism of multi-threaded programs.
14 comments
Watch Thread Reply