 While such hard-wired processors were very efficient, the need for powerful instruction sets with multi-step addressing and complex operations ("see below") made them difficult to design and debug; highly encoded and varied-length instructions can contribute to this as well, especially when very irregular encodings are used.Microcode simplified the job by allowing much of the processor's behaviour and programming model to be defined via microprogram routines rather than by dedicated circuitry.Even late in the design process, microcode could easily be changed, whereas hard-wired CPU designs were very cumbersome to change.