Or to put it another way how to ensure that architecture or quality doesn't suffer, doing agile.
Some of the understandings in handling architecture in agile are below(generally applies to testing as well)
* Do architecture until risks fall off your radar * minimal design up front, so that you will not pay a horrible price for reasonable change requests. * "just enough" architecture/infrastructure per each feature/requirement
(The above were found in searching other related StackOverflow questions)
A hypothetical example/scenario is that there is a requirement to develop a order processing module in the existing system. The below guidelines are negotiated and agreed upon.
- The architecture for module should be able to handle processing of 10 orders in the span of a minute.
- Time to market is 4 weeks, planning is done to handle 2 sprints of 2 weeks.
- The Business is satisfied with average performance expectations.
Once the module is delivered, lets say the following improvements/changes are requested.
- Improve the processing to 15 orders per minute.
- Improve performance by 25%.
- Time to market is 2 weeks.
So assuming the further requirements from the customer/business come and which are welcome, but in future as the iterations go on, the architecture needs to be overhauled, and testing the quality of the module also becomes more time consuming.
And the above is not a happy result, as estimations increase, and there is an understandable inability to meet further expectations or requirements quickly. Even if it can be done in the given timeframe with sufficient quality, just wish that we could have done something about it well before and not face this situation at this point of time.
In hindsight, architecting to scale in the first iteration would be ideal, but that was not the goal and focus. The focus is always on Time to market, and on acheiving on meeting the business/customers expectations in a given timeframe. Unfortunately, in the long run it does take a toll on development.
What can be done to avoid the mentioned pitfall in the example, in improving the architecture or testing process iteratively?