When you're building some MVP or SLC it's tempting to over-think technical choices early on. It's tempting to build in all kinds of features and infrastructure.
"People might want a PDF," you think to yourself, "so I'll also build and deploy a PDF rendering server!"
"I'll need a way to measure everything my ten million customers are doing at scale so I'll deploy this elastically scaling mega analytics doodad framework server and hook it up to every user action in my app!"
It's much easier to imagine new features than it is to actually build them. Before you know it there is a vapourware castle shimmering on the horizon.
I've found a useful thought pattern to combat this type of over-engineering. For every technical question just think to yourself:
What will my zero customers think of this?
When you are building the first version of something there are literally zero users. Unless it is the core function of the thing you are building, making a PDF rendering server or deploying a giga-scale analytics system is not what you should be doing. Your zero users don't care about those things! Getting even one person to actually use your thing and tell you if it's good or not is what you should be doing.
Let's protect the most scarce resource of all: our own time. At the start of the project let's make a bee-line towards shipping the best possible implementation of the core function of the software so we can find out if its useful and good.