ポリシーというよりかはもう少し具体的な気をつけていることになりますけど、こんな感じです。
■名前に妥協しない
一口に名前と言っても画面名・項目名・メソッド名・変数名などいろいろありますね。お客様やプロジェクトメンバーがなかなか覚えられなかったり、意味を勘違いした場合にはもっと良い名前があるのではないかと考えて、できれば変えてしまいます。
関係者が固定化されればそのシステムの方言として普通に使われることになるのですけど、必ず新しい関係者は出てくるのでその際のコミュニケーションロスを防ぐ目的です。
■画面や帳票にはプライマリキーを含める
伝票に伝票番号を入れるのは当たり前でしょうけど、それ以外のシステムが内部的にしか使わないような番号でもできるだけ人の目に触れるようにします。
これは、何か問い合わせや不具合があった時に該当データを特定しやすくするためです。ですので目立つところに置いておく必要はありません。
ただしお客様によっては直接関係ない情報は出したくないということもあるので、こちらの目的を説明してそれでも納得していただけないのであればあきらめざるを得ないということもあります。
■備考やメモという項目を用意しておく(ことを検討する)
将来項目が増えるかもしれないのであらかじめ作っておく、ということではありません。そういう時は素直に増やせばよいので。
そうではなくて、例外的なことをしないといけない時などにこういった何でもありの項目を使って人間系の運用でカバーするという選択肢を残しておくためです。
何かの名称マスタで名称の変更が発生して、普通はそのまま更新してしまえばよいのですけどある項目に関しては以前の名称を備忘録的に残しておきたいということがたまたま発生した場合に使ったりします。
あんまり積極的には使って欲しくない項目ですけど。
■エラーログには値も出力する
例えば「ファイルが見つかりません」だけではなくて「ファイルが見つかりません(hoge.xml)」という感じです。
現象の把握をしやすくするためですね。
そんなの当たり前という人も多いと思います。高機能なIDEでの開発が当たり前で開発だけしてあまり運用に関わらないような人ですと、そういう値はデバッガで見れば分かるでしょうという考えなのか、ログに無関心な場合もあります。
設計といわれてデータ設計を思い浮かべる人、コード設計を思い浮かべる人、UI設計を思い浮かべる人etc居ましょうに
思い浮かんだものをお聞かせ頂ければ幸いです。
それが、あなたのポリシーの一部になっている筈です。
①他のシステムとできるだけ似ている設計(構造、アーキテクチャ、使い方)
②利用者が使用方法を簡単に理解できで、理解放棄や誤解が起きにくいシステムと説明の充実
③希望要件が変わって条件・仕様を追加して欲しいときに、短期間で対応できる設計
④他のシステムと連携等をさせる必要ができたとき、第三者にわかりやすい構造と仕組み
⑤ハードウエアや通信環境の変更に対応させる必要が生じたときに、簡単に対応できる設計
⑥誤操作、誤入力などに対して、前に復帰させることが可能な仕組みの組み込み
⑦専用システムでない場合。OSや常駐ソフト、他のソフトとの切替利用、途中での強制シャットダウンなど(不規則、不適当な操作)に対して、データの安全が確保され、システムが完全に破壊されないことへの十分な配慮
⑧当たり前かもしれませんが、設計時に扱うデータの限界(量と値)を含めた検証をすべてステップ毎に行い、その記録を残して下さい。各ステップの設計開始前に、その設計を済ませる前に何をどのような方法で検証するのかを見込んで設計をして下さい。
まさに仰る通り、諸刃の剣ですね。
yamaneroomさんの仰る、バグが取り尽くされた枯れた技術の方が手堅いとは思います。
これは好みの問題かもしれませんが、僕自身は不安要素を抱えた最新技術の方が長期的に考えて手間が少ないと思っています。
・バグの無い旧来の規格でシステム開発⇒数年後に安定した最新規格へ全移行
・バグの無い旧来の規格でシステム開発⇒数年かけて安定してきた部分から徐々に最新規格へ以降
・バグの有る新規の規格でシステム開発⇒数年かけて安定してきた部分を微調整
この三つの選択肢を比べた場合、個人的には最後のオプションが一番楽だと感じるのです。
もちろん、クライアント側が最新規格に対応していない場合は旧来の規格にも互換性があるように開発しておき、
新規格が普及するに連れて旧来の規格との互換に割くコストを減らしていきます。
新旧両方の環境へ互換性を持たせなくてはならないので初期コストはかかりますが、後は楽になる一方です。
逆に、はじめから旧来の規格だけでシステムを設計してしまうと、新規格の普及に連れてコストがかさんできます。
また、最近の規格は状況に応じてダイナミックに開発ができるものが多い点も魅力ですね。
例えばウェブ開発で言うと、プラグイン無しで色々な事ができるHTML5、色々な言語が使えるASP.NET、
どんなデータベースにでも簡単に対応できるLinq、インターフェイスのデザイン転用が容易なMVCなどですか。
これが無いと修正や機能追加などが非常にしづらいです。
ただし、やりすぎずにシンプルにしておくこと。
汎用性を求めすぎると、逆に使いにくく、理解しにくく、コストが膨大になるので。
そして、数年後に新規規格が出来た場合、
> ・バグの無い旧来の規格でシステム開発⇒数年かけて安定してきた部分から徐々に最新規格へ以降
ということになります。
その時の「微調整」がバグの温床になることが多々あります。
例えばwebが普及した当時(1997年頃)、HTMLは3.2が主流で
CSSがサポートされていないブラウザしかありませんでした。
よって、見栄えを重視する場合はタグで調整というのが一般的でした。
今(2010年)はHTML4が主流で、レイアウトの調整の為にCSSを使わずに
タグで調整する方法は今は邪道となってます。
そして、今後HTML5が主流となっていくと私は考えていますが、
古いブラウザ(今はIE6が癌になってます)のサポートや
現在の大量のHTML4はどうするのでしょうか?
あと、個人的な偏見ですが、Win系の最新技術って死に技術が多い気が...
「数年後に新規規格が出来た場合」に関してですが、
僕は膨大なコストをかけてでも、その規格でシステムを再構築しますね。なので、
> ・バグの無い旧来の規格でシステム開発⇒数年かけて安定してきた部分から徐々に最新規格へ以降
ではなく、
> ・バグの有る新規の規格でシステム開発⇒数年かけて安定してきた部分を微調整
を繰り返します。
幸い、年々新規格へのコンバージョンも楽になりつつあるので。
もちろん、旧来の規格(数年前の新規格)を即刻破棄するわけには行かないので、
両方のバージョンを平行に共存させ、クライアントに合わせてバージョンを振り分けます。
HTMLなんかは良い例でしょう。
ユーザーエージェントによって新旧、クライアントが対応しているバージョンへ振り分ければ言い訳ですから。
ASPやPHPでこれは簡単(むしろ当たり前?)にできますし。
極端な話、HTML3~5全てに対応できるようにしておくというわけです。
例えば、HTML3と4が普及している時代は全ページを両方に対応できるように。
HTML5が普及してきたら、全ページをHTML5にも対応させます。
HTML3が衰退したら、その後新たに開発/変更するページはHTML3比対応にする。
といったカンジですね。
Win系の技術に死に技術が多いというのは、同感ですね。
逆に観れば、MSにしろGoogleにしろ、新しい技術を大量に排出している以上は半分以上死に技術であって当然でしょう。
どれが死に安いか見分けるにはやはり普段から最新技術に目を光らせておき、目を養っておく必要があります。
死んでしまった技術はその場で廃棄です。ハード本体同様、ソフトの賞味期限は3年だと思ってますので。
何故旧来の規格を毛嫌いするかと言うと、社内保守で五年以上前の規格を掴まされて辟易した経験が多くって・・・。
部分的に移行していく方法をはじめは取っていましたが、それだと旧来のシステムとの折り合い上、
妥協しなくてはならない点が出てきてしまい、結果的には状態がどんどん悪化するというパターンに何度も見舞われました。
結局、全システムを一から再構築して、旧来のシステムと平行で共存させる方がすぐに事が済んだので。
これは理屈以上に、トラウマですかね・・・。
性格の問題もあると思います。僕は保守よりも開発向けの性格みたいなんで。
メンバー同士のポリシーの衝突とか不毛ですよねぇという。
ご回答ありがとうございます。
>利用者が使用方法を簡単に理解できで、理解放棄や誤解が起きにくいシステムと説明の充実
人が介する部分は、語弊や誤解はつき易く、難しい問題です。
「理解がしやすさ」、「誤解がおきにくい」等の基準については、いつも頭を悩ませるところです。
2の3乗は8
8の3乗根は2
2を底とした真数8の対数は3 (関数電卓だと、log8÷log2で計算できます)
みたいに、
答えから元の数字も求められるように、
逆の操作を出来るようにしたいです。