When I was a kid my father liked to repeat an anecdote from his youth. Apparently, my father was quite impressed with the old cowboy westerns that appeared on cinema at the time. He was so impressed, that he decided that if he would ever become a real cowboy, he needed to learn how to ride a horse. So he needed a horse. He figured that having a horse equalled a need for a stable. So he asked his father (my grandfather) to build him a stable. My grandfather, wise in his ways, told my father that if he would just provide the horse, grandfather would be sure to provide the stable.
What my grandfather stumbled upon here was of course a version of Just-In-Time thinking (JIT), one of the two ‘pillars’ of the Toyota Production System. Had my grandfather built my father that stable, the stable would remain empty for sure. That would be waste (muda).
One of the many aspects of JIT thinking in software development (i.e Lean) is that decisions should be made as late as responsibly possible. Problems that will occur otherwise include overproduction (building stuff that no one needs and no one wants), abandoned code, and of course Premature Optimization.
So when told that you need to build this or that so that it can scale up to 5 millions users. Be sure to answer “bring me the 5 million users, and I will provide the scalability”.
The old stable – horse anecdote is actually quite powerful and does a good job conveying the point.