My question is not programming language specific, but its more generic question to see the way of people thinking.
Usually in Large development houses there are specific roles for each job, such as Programmers and architects. so architects point of view is to have a perfect architect and solution design, on the other hand programmers are dealing with actually implementing application features and UI stuff. Therefore if you let the architect for example working on the application with out programmers you will get an application perfect form inside (design patterns, classes, DB tables) but nothing from outside, also it applies vice versa. Programmers always focus on the output without giving too much concern for design principles (for instance SOLID principles).
Now i am working on a small firm with team composed of 8-10 people max, so you need to take care of your application design as well as implementing the features. So my question simply is - when do you need to stop designing and implement you solution? - or should it be incremental work? - what if you reached a point where you screwed up just because you didn't design well form the beginning ?
I hope we can have a different ways of thinking so we can come-up with multiple acceptable solutions