制約constraint は、使われる文脈によって様々な役割を担ってきました。制約プログラミングconstraint programming では、たとえばGUI設計において、画面内に存在する複数の対象物間の相対的な配置に関する静的な記述方法として制約が使われます。あるいは、3Dゲーム映像内で起きる物体の衝突や反発などを物理方程式という制約によって見事に制御しています。他方、複数の制約を内在する条件問題を解くことで、制約自体を発見するconstraint satisfaction という世界もあります。モノ設計の分野で使われる制約設計constraint designも同じ文脈にあります。さらには、データベース設計における内容の一意性を担保する論理的な仕組みとしての制約は古くから使われています。
一方、ソフトウェア工学の世界でいうところの設計制約 design constraint では、要求仕様からプロダクト完成に至るすべての過程に潜む、時間制約・空間制約・コスト等を制約と呼びます。こうした制約には同じベクトルを向くものもあれば、対立するベクトルを生じさせるものもあります。いずれにしても、制約を解消し、最終プロダクトにつなげるには、設計者の経験が重要であり、言語化が難しい部分でもあります。しかし言語化できなければ、設計は完成せず、プロダクトも完成しません。その折衷案がプロトタイピングです。そしてプロトタイピングから得られる、準設計semi-designと準プロダクトsemi-productを経験によって言語化することで、最終設計が完成し、最終プロダクトが出来上がります。後者の経験では、最終仕様およびそれを達成するのに利用するツール群が再度制約として働き、仕様を最終プロダクトに導きます。
設計制約には建築設計における制約と似た部分があります。一つは、要求仕様が予め決められていて、その制約を変えることが難しい場合、二つ目はそもそも要求仕様が曖昧であるか、あるいは受注側に裁量がある場合、仕様自体をデザインすることが可能で、これをデザイン制約と呼びます。英名はどちらも同じですが、日本語のデザインには発注者の顔以外に、受注者の顔も現れます。そこが設計制約とは異なる部分です。制約が逆に新しい発想を生み出すきっかけとなる、そんな魅力をデザイン制約は秘めています。