This is a great question. Sadly, there is no way to answer it clearly, because this is an issue that is relative to factors which have seemingly unlimited variables. I’ll give you an example of what I mean, and I’m going to use the example of a website being the application in question (because I can’t really know if this is what you do with your droplet).
Right now you might be using 50% of your memory, but why? What is using that 50%? Do you ever spike higher than that and, if so, what causes that spike? Is that cause something which is elevated by external factors (website visitors) or internal factors (cron jobs)? This can matter because external factors, like website visitors, are largely beyond your control. So you need to plan ahead for the traffic you want to be able to handle, if you can draw a reasonable correlation to memory usage per website visitor. If it’s caused by internal factors, these are within your control, and you can tweak them as needed to keep you from having to upgrade (or at least plan your upgrades).
It isn’t uncommon for many people to not upgrade until they hit a resource cap that causes performance issues with their application. It also isn’t uncommon for them to not know that this was about to happen. You can’t come right out and say something like “X website visitors equals Y memory usage” because web applications are things that vary so dramatically that one website may use 1MB of memory per visitor, while another may use 256MB of memory per visitor. So it’s a legitimate question to wonder how they were supposed to know better beforehand.
The best advice I could offer someone, using a website as my example, would be to watch memory usage in correlation with application usage, and then try to say “X visitors equals Y memory usage.” Then, you might have a baseline to help you know when to upgrade. Even still, one page of your website could use more memory than another because of how it loads on the back-end, so this isn’t an exact science. Poorly optimized applications can also change this math over time, one example being a website that reads/writes to a database table on every visit therefore increasing overhead per page load over time (I’ve only seen this a few hundred times).
Besides doing your best at math, you should monitor your application and watch for problems that you hit. When problems occur, you look for the best solution. Maybe, at that time, upgrading is the solution. If it is a website, something like UptimeRobot can help you to be alerted when your website is down. You can use data like that, in correlation with digging through your application logs, to find out what might have happened.
There is no “one size fits all” solution here, and everything I’ve given above is intentionally a bit vague. This is something you will make personal decisions about as you go, and there is rarely only one right answer for how to solve problems from increased usage.
As for disk IO and bandwidth, I recommend “iotop” (disk) and “vnstat” (network) for monitoring these things. It’s unlikely you need to be looking at disk IO, and bandwidth is rarely an issue for someone not running things like VPN, TOR, BitTorrent, etc.
I hope that at least helps some :)