Hi all,
After serveral years developement, I believe that there is no SIMPLE application in the world, though Clients often say "I have a simple requirement". There are too many things to think and to do in a software development. So I start thinking the following question:
What features should an application natually have, or at least you must think of, even your client hasn't ask?
For example, when I'm going to develop a desktop app, I often think about the versioning problems: are two different versions of an application allowed to co-exist in one computer, like .NET2.0 and .NET3.5 ? How to list all versions? How to upgrade the existing version to a newer one? ...
There are some common problems. The clients may not start thinking of them yet. But as a devloper, I think we must consider the problems before they do.
Here I just want to make a list of those things we should not forget. I'll start the list first.
- Version. Even before start developing the application, we should think about how to upgrade.
- Auto update. Like FireFox, when the application starts, it checks for new version and auto updates.
- Logging. I think all applications must have a logging mechanism. A good idea I think is that log the OS name, version, SP, third party components' names, paramters,..., when the application starts. So when a bug occurs, the developer can find the environment and the parameters quickly without bothering the end users.
- Globalization. This is very common in these days. If your client forgot this, you need to remind him/her.
Please feel free to contribute to the list, thanks.
Edit: Add a few items:
- Make UI styles customizable. Maybe not have to provide a dialog for user to change fonts, colors..., but at least let user have the ability to change these stuff in a config file.
- Command line. Allow users to run the app in a bat file.
- Be able to embeded in other applications. Encapsulate core functions into a component (e.g. COM). So not only human users but also other applications are able to call your app. It is useful when people wants to automate some tasks.