Given the business and functional requirements, the immediate challenge is how they can be expressed in to a technical specification. A business/functional requirement may or may not include hints of it’s technical needs — although the presence of such clues may in fact be ignored during the design process. In general, a designer may take two directions in designing the solution.
The first approach is to translate the requirements list as items to be developed in a software product. The approach is a straighforward mapping of the requirement to specific software product parts. The intention is to solve the problem directly and immediately along the way. I find this approach most useful in designing UI elements and forms. It is an effective prototyping strategy because it demands a shorter design and development timeframe. Also, it is the simplest to test and audit against the original requirements.
For example, if the requirement is to download data from a specific location, the program is developed to download the required data from the specified location. The parallel structure of the requirement and the specification is characteristic of the Translation approach.
The second approach is to abstract the requirements in to a technical specification. This actually takes translation to the next level because it allows the designer to develop strategies that give easy room for growth and future enhancements. Abstraction requires a lot of conceptual thinking and planning as guided by the principles, disciplines and practices followed by the designer. Simply put, the intention is to solve the problem indirectly but very effectively, usually exceeding expectations after all things are considered.
For example, instead of developing a program that will download a specific data from a specific remote store, the designer may create a core application that would allow the user to define various parameters in order to achieve downloading any data from any remote store. In this scenario, the indirect solution is to create the core. The effectiveness is realized upon implementation where exactly the same core may be re-used to process any data source.