Sometimes software must dictate what hardware is to be used. Most software has minimum requirements for it to run successfully. This means that if software is chosen that has a very specific requirement then the hardware choices will need to reflect this.

Software choices will normally based on the software needed to implement the system. Some systems will be 100% built from scratch. However this is increasingly becoming less and less common. The simple reason for this is that a lot of useful software has already been written and the developer merely has to customize this software. It then becomes the job of the analyst to decide on what combination of software can be used to minimize the development task but also meet the requirements set out in the specification.