“Premature Optimization Is The Root Of All Evil” Is The Root Of Some Evil
Clearly one should therefore design a system with an eye to where the bottlenecks may be, and try to ensure the design has enough flexiblity to capture the optimizations that will be required.
This makes total sense. It’s not a BRUF (Big Requirements Up Front) approach, it’s just a design issue. You should invest sometime designing your software before you start building it. Just like a designer should sketch/draft his design before he starts building it so should developers spend sometime sketching their app, their database design, etc…
Don’t spend too much time designing, but spend enough time preventing those foreseeable bottlenecks in your design. Don’t spend too much time imagining possible scenarios, but spend enough time picking the right tool for the task.
But PLEASE: go build some awesome apps. And while you’re at it, check @elliottkember’s awesome Speckle, a great (free) webapp for tracking project/task status, ideal for webapps. :)