Often times you simply don't know the exact scope of problems to be solved.
This is probably the hardest problem in software architecture. Having sound principles, and knowing your problem domain helps, but there is no ready made solution here. It requires thinking.