We've all heard and debated about Code Smells, and occasionally you hear people talking about "design smells", so I've been thinking, why not take it one step further?
If you deal directly with customers or have to interpret functional requirements, you'll be familiar with the sensation: It sounds like a really bad idea, it's probably completely unnecessary, it's almost certainly never going to work reliably, it will be a massive headache to maintain, and will likely be abandoned after several painful weeks or months of design, development, debugging, more debugging, even more debugging, and finger-pointing stakeholder meetings.
As with all smells, there may be legitimate reasons for some of these requirements, but much of the time, they appear to be the result of someone with little technical or design experience getting halfway through a solution and then dumping the other half - the half that makes no sense - on you and your team. They are the architectural equivalent of "I need a regular expression to validate e-mail addresses."
A couple of examples from my career, to get people started:
- Customization of business logic as an end goal - i.e. so the company or individual "doesn't need a programmer to make changes".
- Performance/scale requirements with no metrics, or metrics that are way out of whack with the state of the business (the company has 10 customers and the system must support 10,000 transactions per second);
- Requirements expressed as [poor] implementation details (i.e. must use Excel files as a permanent data source);
What are some "requirements smells" that you've learned to recognize?