再利用を素早く容易に、プログラミングの正常なプロセスの一部として、より体系的に行えるようにする研究が多くの研究者によって行われてきた。オブジェクト指向プログラミングもそのような目的で生み出されたもので、定式化された再利用手法として一般化した。同様な目的で後に開発されたものとしてジェネリックプログラミングがある。さらに新しい手段として自動プログラミングがある。これはプログラムがユーザーが設定した一連のパラメータに基づいてある種のプログラムを生成するものである。類似の概念にメタプログラミングもある。再利用の形態.日和見的再利用はさらに以下のように分けられる。例.ソフトウェアライブラリ.コードの再利用の非常に一般的例として、ライブラリを使った技法がある。各種フォーマット間での情報の変換、外部記憶装置へのアクセス、外部プログラムとのインタフェース、情報(数、単語、名前、位置、日付など)の操作といった一般的な操作は、多くのプログラムで必要とされる。新しいプログラムを書くとき、ライブラリのコードを使ってそれらタスクを実行するようにでき、「車輪の再発明」のように同じ操作を実行するプログラムを自前で書く必要はない。ライブラリの実装は特殊なケースも含めてよく評価されているという利点がある。欠点は、性能向上や出力形式を変えるといった目的があっても実装の詳細を調節できない点と、ライブラリを取得し学習し設定するのにかかる時間とコストである。デザインパターン.デザインパターンは、似たような問題を解くための汎用の解法である。デザインパターンは概念的であり、個々の問題の必要に応じて修正可能である。抽象クラスとインタフェースは特定のパターンの実装に再利用可能である。フレームワーク.サードパーティのアプリケーションやフレームワークを通してソフトウェアの大きな部分を再利用することも多い。ただしフレームワークは通常ドメイン固有で、ある範囲の応用にしか適用できない。上記、コードレベルでの再利用のほか、要件定義、設計、運用まで含めたソフトウェア再利用の取り組みがある。ソフトウエアプロダクトライン.派生開発を整理し、コア資産を作成する開発手法。コア資産が、再利用可能なソフトウェア資産である。コア資産から製品群が導出可能であることをバリアビリティと呼ぶ。