I guess you agree with me that software development is a continuous evolutionary process. While developing a software product one should be in a flow mode rather than an episodic mode. As Sandeep puts it, its activity v/s events. This goes back to the philosophy of eXtreme programming.
If something is good, do it all the time OR as they say, push the nob to 10.
- We realized that integrating early and often is good, hence we started doing Continuous Integration.
- We realized that we cannot plan once and then just follow the plan, we need to continuous keep planning and prioritizing work.
- We realized that code reviews are helpful, hence we started Pair Programming.
- We realized that testing early and often is good, hence we started Test Driven Development.
- We realized that one cannot think of all scenarios and design software upfront. Since software keeps evolving and software degrades (bit-rot) over time, we need to refactor code all the time (mercilessly).
- And so on.
This is what I mean by flow mode (activity) rather than an episodic mode (event).
In Agile, we’ve tried to apply this principle in various places like
- Product Visioning
- Managing Product Backlogs (Requirements)
- Release Planning
- Iteration Planning
- User feedback
- Daily Stand-up meetings
- And so on…
But what I feel is a lot of it is still very episodic. For example,
- If a developer hits a road block, they sit on it till the next day’s stand-up meeting. Because stand-up meeting is where we discuss roadblocks.
- If we find something is hurting us, we wait till the retrospective to discuss about it.
- If we discover some acceptance criteria cannot be met or is flawed during the iteration, we wait till the demo to communicate that with the customer/product owner.
- If we discover a new killer feature during an iteration, we wait for the planning meeting to discuss that and prioritize it on the backlog.
- We wait till the end of the release to do Performance testing, Hallway Usability testing and other important tests.
- And so on….
The Lean community is trying to address a lot of these issues. As long as we think of software development activities as episodes and not as continuous flow of activities it would be very difficult to really implement kaizen and evolve.