The concept of microprogramming has been changing with the development of hardware technology to facilitate dynamic microprogramming and the development of software technology to facilitate user microprogramming. An examination of the status of microprogramming systems leads to a discussion of the design and implementation characteristics for both the hardware and software aspects of microprogramming. The concept of microprogrammability is introduced to measure the facility with which a user can microprogram a machine. Discussing and evaluating contemporary machines and software that have been developed to effect user microprogramming reveals a variety of designs and implementations but also indicates directions for future research and development. Describing some of the contemporary applications of microprogramming indicates the potential for exploiting microprogramming in many areas. A comprehensive list of references serves as a guide to details of microprogramming concepts and recent developments.