The straightforward answer is:
- Step One: Finish ComponentA;
- Step Two: Finish ComponentB;
- Optional Step Three: Assemble ComponentA and ComponentB together.
- The ultimate goal of the project is a moving target;
- By any chance, if ComponentA is delayed, all components down the chain will be delayed;
- If a working project cannot be delivered finally, ComponentA may be totally useless.
- Step One: Finish (ComponentA-- and ComponentB--); "--" means a simplified version of the system;
- Step Two: Finish (ComponentA- and ComponentB-);
- Step Three: Finish (ComponentA and ComponentB).
- Be adaptive to changing requirements. End user's feed back can be heard early. To do the right project is more important than to do the project right.
- Progress and deliveries are very visible. We don't have to wait until the Step Three to see some workable results.
- If by any chance, there are limited budget, time, or resources to finish the Step Three, the results of Step One and Step Two are still acceptable working systems.
It's my motto that - Release early, release often, and release working products. However there is no panacea to resolve all software quality and delivery challenges. In another post here, I discussed limitations of Agile Methodologies.