This paper introduces stratified programming, a novel approach for program construction. In essence, stratified programming allows the developer to build and software at various levels of abstraction, each level corresponding to a program stratum that provides a specific degree of functionality. Although there is a significant amount of work reported in the scientific literature on program refinement none of this work, to the best of our knowledge, has proposed mechanisms for switching the level of software details at the execution stage or suggested the use of program strata in a larger software engineering context. This not only makes the approach described in this paper highly innovative but also opens new related research and development directions across the entire software life-cycle. To illustrate the approach we present an example focused on the coding phase of the software process. Several avenues of further investigation are also indicated and the practical benefits of strat...