I wouldn't know the philosophical answer, but technically, you must keep in mind concepts like:
1. Concurrence: Performance decreases with work load, so make design choices with inbound and outbound limits in mind. That includes order of execution, task cancellation, synchronization, error handling, resource monitoring, oh dear.
2. Support: You need to provide manuals and documentation, as well as a way to solve the problems of particular users. It'll quickly be annoying if you don't plan for this before hand. Make your interventions as unnecessary as possible.
3. UI/UX: Simple interface is best. Don't get too creative, people expect certain patterns. Think of what interfaces they might be familiar with and mimic them. Don't make them have to learn how to use your tools.
4. Monitoring: Have a log of everything as well as mechanisms to test functionality. It'll be a PITA at first, but a gift in the long run, when you don't remember all your design choices.
5. Security: Protect your data and that of your users. You can go to jail for this, don't play games here. Back up, encrypt, protect against attacks.
6. Scalability: Make design decisions where you can answer "Yes, I can add more of this in the future with ease".
7. Deploying: Software is alive, you will be modifying things all the time, have a deployment workflow that is as automated as possible and keeps track of the changes.
Each topic can very easily fill entire bookshelves, and I'm sure there are more topics that I'm forgetting, as well as overlapping ones. So, instead of a quick read, I suggest you to test how fit you are for these and improve on what is most necessary. You can get away with a lot at first, but don't wait until you have a deadline and a stack of problems waiting to explode.