考えておくことで、後での多くの苦労を防げます。reason.そもそもモジュールを書く必要がないかもしれません。車輪の再発明は避けてください。あるモジュールを拡張するためのその他の手段を考慮してください。あることを目的としています。モジュールを使えるようにするべきです。ときに大きいブロックを使う必要がないようにすることが重要です。modules?モジュールは、一文だけで表現できる明確に定義されたスコープを持つべきです。標準の実装を提供します。プロトコルの実装を提供します。プロトコルを実装します。ライブラリのインストールを強制されないということです。intuitive.前もって、モジュールのための適切な名前を選んでください。使ったプログラミングがより直観的になります。(モジュールの目的を正確に表現する)。modules.すでにあるモジュールと一貫性をもつ。implementation.モジュールの実装ではなく、モジュールの機能を反映させる。適切な階層がすでにある場合は)。親しんでいる人々に尋ねてみるべきです。インターフェースを持つようにもできます。メリットデメリットがあります。large.システムが大きかったり大きくなりそう。polymorphism.データ形式が継承や多態性を容易にするような自然な階層を形成している。applied.様々な異なる操作が行われるデータがある。適用するデータの型によって少しずつ異なる。later.後で新しいデータ型を追加する必要がありそう。operators.データとの典型的な相互作用が演算子によって最もよく表現される。time.システムの個々の要素の実装が後でやがて変更になりそう。object-oriented.システム設計自身が既にオブジェクト指向である。適切かどうかを慎重に考えてください。プログラマが理解可能であるべきです。things.(単純なことをする単純なルーチンを書く。routines.少量の巨大なルーチンよりも、たくさんの単純なルーチンの方がよいです。分割するべきと言うサインです。output.(機能を出力から分離する。選択できるようにします。操作できるようなコールバックを提供することを考慮してください。defaults.(実用的なショートカットやデフォルトを提供する。要求しないようにしてください。ルーチンを用意して管浅い。するべきというサインです。ルーチンを呼び出すときです。have:命名は一貫性を持たせるべきです。(そして見えない物のほとんどにも!)適用されます。this:名前付き引数を使いましょう。作者が管理するのも難しくなります。same.引数に、意味のあるデフォルトがあるならそれをデフォルトにしましょう。ユーザーに、毎回ほとんど同じような引数を指定させてはいけません。