ソフトウェアプロダクトを管理するときに考えること

Jul 24, 2016  

ソフトウェア開発チームの人数が増えると情報の整理方法が悩ましいので、網羅性はありませんが思いついたものを列挙しておきます。

  • ドキュメントを書く
  • インフラを整える
  • 開発環境を整備する
  • 設定情報を管理する

ドキュメントを書く

そもそも何を実現するソフトウェアなのかがブレてしまうプロダクトもあると思いますので、 基本的なことをしっかりと書いておくことは重要です。

  • 基本事項
    • 目標
    • 要件 (機能要件、非機能要件)
    • 設計思想
    • 仕様 (外部仕様、内部仕様)
  • チームメンバーの入り口となる情報
    • ソースコード管理システムへのポインタ
    • チケットなどのトラッカーへのポインタ
    • 開発ロードマップとマイルストーン
    • コミュニケーション・チャンネル (メール、チャット、ニュースレターなど)
    • プロジェクトの用語集 - SQLAlchemy の場合
  • プロセスに関するドキュメント
  • 機能に関するドキュメント
    • API ドキュメント (ライブラリ、データ API)
    • エンドユーザーマニュアル
    • システム管理者マニュアル
  • サービス品質、運用体制
    • SLA: Service Level Agreement - AWS の EC2 の場合
    • バックアップ計画、災害復旧の手順
    • セキュリティポリシー
    • 運用レポートや KPI
  • 行動規範やガイドライン、ライセンスの考え方
  • 各種ドキュメントのテンプレート

インフラを整える

サービスを運用するインフラはもちろんですが、日頃の開発やコミュニケーションを円滑に進めるためのインフラの整備も重要です。 英語版 Wikipedia の Deployment environment の分類がわかりやすいと思います。

  • 運用環境
    • クラウドサービス; AWS, Azure, GCP、その他
    • オンプレミスのデータセンター
    • CD 設定 (Continuous Delivery)
    • ロールバックの方法
    • ロールアウトの方法 - Canary Release
    • モニタリング
  • 検証環境
  • 開発ツール
    • ソースコード管理システム
    • 共有ドキュメント (例: Wiki)
    • 不具合管理システム
    • チャットルーム
    • CI 設定 (Continuous Integration)
  • アカウント管理
    • スーパーユーザー (例: 他のアカウント作成や削除など)
    • パワーユーザー (例: 読み書き権限を有する)
    • 運用担当 (例: 読み込み権限のみ)
    • 支払いアカウント

開発環境を整備する

個人の開発環境はお任せでも良いのかもしれませんが、複数のミドルウェアを組み合わせる場合は仮想環境を組み合わせた方が良いでしょう。 また、規模にもよるでしょうが、会社で何らかのライセンスを購入している場合は申請から割り当てまでのワークフローがあると良いでしょう。

設定情報を管理する

複数のメンバーが複数の環境で作業すると、設定情報の管理にも配慮が必要になります。

終わりに

つらつらと書いてみましたが、すべてを一斉に揃えることは現実的ではありませんので、 プロジェクトの目的や規模、関係者に合わせて必要なものをピックアップする必要があります。 プロジェクトのメンバーが増えると、あれは無いんですか?、という質問も増えますので、 プロダクトの成長に合わせて管理対象を棚卸ししてみると良さそうです。