Which is Better: An Intelligent Scoreboard or Let the User Decide for the Expected Transaction

In my experience of creating a testbench and testcases, most of the bugs I encountered is in the scoreboard. I usually spend so much time debugging the scoreboard. I designed the scoreboard in such a way that it is very intelligent so that it will not be difficult for me to create testcases. But since I’m having lots of bugs in my scoreboard, I chose to give the expected transaction from the testcase to the scoreboard. This will make the scoreboard simple.
The disadvantage of this is that this is prone to human error since I have to pass certain configuration settings or expected transactions to the scoreboard from time to time.

So which one is better?
1.) Create an intelligent scoreboard but expect heavy debugging on it; or
2.) let the user pass the expected transactions or configuration settings from the testcase to the scoreboard, but be prepared for lots of human errors.

Regards,
Reuben