Even before the first piece of code is written, many of the most successful software developers create a logical data model that they can share with others. For some software development projects, user documentation or prototypes might be created. They are cheaper to build, break, and fix than the real thing. They provide a communication vehicle, so that individuals who normally don't speak the same language can communicate with each other. If they are good, models can force people to consider a problem in more detail, bringing to the surface problems which would not otherwise have been discovered until much later.
People love to criticize.
When someone has a request, ask him or her to change or critique the mockup. What could have been featuritis often falls away and becomes a simple change, or occasionally results in real value being added to the software product. Discarding old or obsolete code is often the cheapest way to get rid of bugs and maintenance problems. Flushing the code frees developers for new challenges. Replacing the code a few pieces at a time is usually preferable to deleting a major system, particularly when upper management is not in a position or mood to authorize a massive changeover.