汎用性がめちゃくちゃ高いアプリケーション
高い汎用性が求められるアプリケーションって、結局はOSとかプログラム言語、DBMSとかフレームワークに任せるべきで、SI屋が開発するモノに対して汎用性を求めすぎると、下手に抽象化した、イメージしにくいモノが出来上がるのが世の常。
汎用性を高めようとしたと思われる、とあるパッケージ製品でデータベースのカラム名が「value01」〜「value99」って並んでてぼっくりしたことがあった*1し、それは設計がクソですむけど、その要件で正規化しても「設定項目」だらけになったりして、全コードのうち半分が「設定項目の保守と整合性チェック」に使われていたり。直接的ではないコードはメンテナンスでも想像力を浪費する。
ユーザは欲しい機能が欲しいわけで、要らない機能はどっちでもよく、どっちでもいいものは簡単に「(できれば)作ってください」と言われるかも知れない。でもそのとき、それは将来必要になるのか、それはどんな場面か、そのときに機能拡張する方が効率的ではないかを含めて検討し、または検討材料を与えて検討を促してみるのも一手。
まぁ、大抵は「既に決まっている期間と予算に機能を詰め込まれる」場面が多いんだけどね。