Believe it or not, computers have requirements. The most important one is humans... Us!
It may sound strange to state that, but often, developers will forget that the main goal of any software is to help a fellow earthling. It does not matter if your code is clean, advanced or even revolutionary. What ever you are developing will eventually be seen and used by someone, somewhere and somehow.
The time when a user had to comply by the limitation of a software is gone. 20 years ago, we had to manage with whatever the display would show us in a fully glorified 16 colors. If we were lucky enough, the video card would be able to display 256 colors brining a life like image to our eyes. Technically, developers could not do more than what the machine could do. Time has passed and technology has evolved to a point where a simple smartphone can predict our schedule for the day. Machines are faster, storage is almost infinite and connectivity is almost granted. That's why I can say that there is nothing that would require a user to comply by some technical limitation. If a user complains, it's probably because there is something wrong in your design.
The only limitation of any software is mind reading. We are still bound by the physical input like a keyboard or a touchscreen. Some breakthroughs were achieved in the last years like voice recognition and visual recognition but that's just a cooler way of typing on a keyboard. Technically, it's almost impossible to guess what a user really wants just by having him sitting in front of the device.
What can be done then? You have to think, listen and propose to find the best way to solve the problems that users are facing in their tasks. As an example, let's consider that you want to create an app that will monitor the current temperature in your house. Basically, it's a weather app for indoor. Easy to do, easy to code... Maybe not!
First, we have to assume that we have some kind of devices that will report the current temperature of the room. We need to interface the devices and be able to convert the raw data into a human readable format. Great, we are in business and ready to take over the world of apps. Get your favorite IDE to create your software, display the current room temperature on the display, package your apps and publish it on your preferred online store.
After a while and a few downloads, users will start to comment your app and rate it. Some will be nice, some will be bad... I mean really bad. What is the problem with those bad reviews? The app does show the current room temperature, it does not crash, the job's done.
With this simple scenario, it's easy to guess what users will be expecting:
- Good looking, according to their preferences
- Able to support multiple devices in the same house
- Able to identify the current room of the displayed temperature
- Keep a history of the readings and display some kind of stats and histograms
- Support both metric and imperial system
- Export the data to spreadsheets, on the cloud, via emails...
- Associate the energy efficiency of your electric consumption
- Trigger notifications based on some rules
- Interact and control each device
- Support remote access over the internet or cellular data
- Support data encryption, user access level, etc...
And the list could go on and on.
The basic idea was to display the current room temperature by interacting with some kind of device able to report the data. From that simple concept, a whole new list of "requirements" can be triggered by your users. Some may even ask for impossible things to do. Whatever the app and it's purpose, you will face new requirements, new preferences or new functionalities expected by the end users. Are you prepared to meet the demands?
It's up to you to set the limitation of your software for your users. Don't be surprised the some of them become angry and even hostile with those limitations. Logic and facts does not apply with the human factor.
If you take time to understand what your users really want, you may create the best app in the world!