A solid foundation
Important Note: This article is very specific to the type of applications I’m working on recently in an enterprise environment as an owner and freelance developer. This is not the case if you’re working with clear and strict requirements from the client. More than a piece of advice is what is working for me on this narrow area. It will not scale and will not work for every (even most) kind of projects.
Every time you plan on starting a relatively complicated project it pays back tenfold to think about and define the architecture. Spending the initial weeks making sure everything is scalable, but at the same time not making it scale until it needs to scale organically takes off a huge burden down the road. The next point to tackle is for you and the architecture to be flexible within your vision. The project will sooner or later meet the end user and to survive the first clash it needs to be malleable and be able to change. At the same time, it can’t be too malleable of the user is going to twist it as it sees fit, making it perfect only for them, and ruin it for everybody else. You, as a project owner, need to have a clear goal in mind of what your application identity is, what points are negotiable for the good of the application and what points are not. If the user or even the client asks for something that is detrimental to the application you have the moral duty to yourself and to your client to let them know, and if they keep pushing at it maybe reconsider working with them in the future - of course before that follow what they say since they’re the one paying, but make sure to have written proof of your warning calls before anything goes south, so they can’t blame you for their mistakes.
A not so recent example of this was when a client demanded to change all of the design of the application just weeks before launch. I insisted to launch with the old design and change it in a new update since we had a lot of new features and bug fixes ready to go and enough complexity without changing the whole design. In the end, they agreed with me that it would be better to give the redesign the time it needed, but I really had to ‘fight for it’.