Back in the days when we were writing firmware code for eproms, when we ran out of space, we were not allowed to use a larger eprom. So, we had to "crunch" the code. Get as much multiple use out of it as possible. These days, we call it refactoring. This usually meant writing small generic functions. When we got to that point, the projects would usually run late and was at the mercy of the programmer. Even though marketing wanted to add more features, they would always convince management that the wait was worth it. Of course, over time, new features required more time to complete since we were always refactoring and our estimates would get longer. Compared to the hardware re-engineering and assembly line retooling required to add a larger eprom, the software hit wasn't so bad.