There are, broadly speaking, two distinct approaches to the design of software: bottom-up or top-down. It is most common to approach it top-down. Design, say, the user interface first and the underlying functionality afterwards. The implementation of the design ? the actual coding of the software ? is another matter.