An approach to program development in which progress is made by composition of available elements, beginning with the primitive elements provided by the implementation language and ending when the desired program is reached. At each stage the available elements are employed in the construction of new elements that are more powerful in the context of the required program. These new elements will in turn be employed at the next stage in the construction of still more powerful elements, and so on until the available elements can be employed directly in the construction of the desired program.
In practice, “pure” bottom-up development is not possible; the construction of new elements must always be guided by a look-ahead to the requirements of the eventual program, and even then it will often be discovered at a later stage that some earlier construction sequence was inappropriate, leading to a need for iteration. Compare top-down development.