I was wondering about the feasibility and the realistic gains we achieve by following the Test First Design approach in larger products.
Although I am a strong believer in deciding the scope before jumping into coding, for a larger product, I"m really not sure if the TDD holds.
Realistic Problems with a larger product:
1. The size of the product makes it much harder to maintain all the test cases.
2. The unit boundaries, slowly become less defined and sometimes unwanted coupling results between different units.
3. Testing a unit might not suffice the functionality of the developed structure as such (A possible result of tight coupling)
4. The initial thought process and the vision might get diluted with the product size. This in turn dilutes the definition of the units and test cases become mere process requirements rather than serving the purpose of being the guardians of a piece of code.
My view no this situation of product growth is to stop the growth of the product and remove the unwanted bits. Start to clean up the product to have only those features which define the product. The other features, either already developed or being developed can be given as addons. And these core set of features of the product need to be guarded using a strong set of Unit Test Cases which define the Unit's functionality alone.
Any more suggestions? I would love to hear from you guys as I currently am facing this situation of coupling of units and the redundant test cases which actually don't do much. And all of this is introduced due to the size of the product growing almost each and every day.
With regards your last question, my recommendation would be to ensure you core domain logic is as tested and stable as possible. It will be up to you and your team to find out what is the "core" of your application. The remaining infrastructure can be fairly loose, but there should be little to no logic in this layer anyway. Lock down the domain, and the rest should follow suit.