design flaws in software