I can hear you thinking: "With all these crazy users zooming around creating applications like mad, we'll have thousands of applications, just like that customer of yours."
Microsoft has given us some tools to help manage that possibility. For example, the SharePoint administrator can warn users about site collections that are not used after a certain period, and even have an option to delete unused lists after a certain length of time has passed. Unfortunately, a single site may have lots of lists, and some of those lists may not have been used in ages, but we don't have the tools out of the box to report that information, or to deal with those lists automatically. However, that sort of tool can be developed using the SharePoint API, and third-party applications have been developed for that purpose.
Obviously, I'm not suggesting that you leave everything to evolution. If you do that, users will create applications instead of doing their real jobs. But if your IT department lacks resources, and if users can create small, standalone SharePoint data-entry application lists that won't clash with your architectural plans for the future of the business, then it's okay to let users build their own team discussion boards, tracking lists, etc. Doing so can reduce the load on your IT staff while increasing productivity in the business, and that's the whole point of the evolutionary approach.
If you let users play with the tools (in this case, a SharePoint site), they may or may not produce something productive. You can bet that if they build something productive, they'll use it; and if they create something that makes them less productive, they'll drop it themselves.
However, sometimes a good shove in the right direction from a software developer can lead to greater things. Here's the key: Let users define and build what they need; then get an expert to tweak it. A software engineer who knows what an index is and how it works, and who knows how to design a system that works more efficiently, can get involved with the applications created by the end user. The developer can assign indexes so that searching will be better, suggest new views that can be created, or find a better way to include more information.
Helping users to tweak their custom creations should start early, in the design phase. I once saw a user managing a team's "to do" list by using an announcement list. Why? Because that SharePoint template included an expiration date after which the announcement is no longer displayed. The user didn't know how to create that sort of thing by using task lists—he wasn't trained in adding or removing columns. He created an efficient, working system, but obviously it could be improved.
In this example, the job of the expert designer is obvious: Create a "to do" list template and publish it to users. You don't need to train the users to use it, or even tell them about it; the next time a user has the same dilemma, he'll find the "to do" template and start working with it. Some users may improve on your design; some will reject it and create their own kind of list. But ultimately everyone wins from the expert's involvement in the evolutionary process.
SharePoint experts should also pay attention to managing the corporate taxonomy. For example, you may have a list of customers. If users start typing customer names willy-nilly, it may get harder and harder to find information related to a certain name. Managed taxonomies are usually included in systems to help prevent that sort of problem; for example, by requiring users to choose from a predefined list of customers instead.
That's one huge improvement in SharePoint 2010 that we did not have with previous versions – you can now enforce a system-wide taxonomy. The enterprise version of the product has further features such as the “Managed Metadata Store” that allows administrators to create hierarchical term sets for the users to pick product names from. Using the new ability to manage enterprise-level taxonomy, you then train users to use the information in those controlled taxonomies. This system ensures that when someone does a search on all sites to see what's related to a certain term, all items are returned; spelling mistakes or using different forms or abbreviations don't have a negative impact on the search.