プロジェクトを進める上での「要望・要求・要件」と愚痴

感情的になっちゃったので先に反省しておくと、自分がもっと要求分析をしたりして具体的に何をしたいかを聞き出したりしなかったのが悪いとは思っている。(客との距離間があって話しにくい。)

しかし、客はもっと自分がやること・自分が関わるプロジェクトに関心を持ってもらいたい。自分みたいなのと仕事するのは不安でしょう。


話は少し変わりますが、プロジェクトの進め方について勉強したわけではないけど、要望・要求・要件という言葉の使い分けをどこかできいて、プロジェクトでは必須では、と思ってる。

自分の頭の中ではこんな感じ。

  • (要望)これやりたい、何かをしたい
  • (要求)実現するにはこういうのが必要
  • (要件)こういうのを実現するには、こうしたらどうでしょうか

客側は「要望」と「要求」は固めるべき。要望は複数の要求からなりえるし、要求は要望にもなりえる。開発に伝わるまで小さくしていきましょう。
開発側は「要望」と「要求」を聞いて「要件」に落とし込む。場合によっては「要求」が足りなかったり、「要求」が見当違いなことになっているかもしれないから、こういう「要求」ではないですか?と提案する。(あと、客側に「フワフワさせてないで要求をはっきり言えや」と言える気概も必要かも。)

客は要求までをしっかり言えれば良くて、開発は要求から要件を固めればよい。
要望と要求について、客と開発の間で合意を取っていたら、巻き戻ることもない。

あとは、時間はかかっても焼きあがるはず。あとは正直に行きましょう。未知のソフトウェアについて知ったかぶってはいけない(戒め)

でも、この「要望・要求・要件」がちゃんと出来てないと、辛くなるのではないでしょうか。僕はそう思いました。

ポエム終了。

以下も頭の悪そうな愚痴。

背景

私はSIerと呼ばれる存在らしく、現在の立ち位置はおそらく開発チームのリーダー。
担当しているプロジェクトはただのWordpressで作った社内向けのヘルプサイトの保守改修なのですが、これに変な内製プラグイン魔改造テーマを入れて以下を実現している。

  • 作成した記事の閲覧・管理(当然)
  • 社内のSSOシステムと連携した、SSO対応
  • 社内の別システムと連携して、記事の全文検索
  • 社内の別システムと連携して、SSOしたユーザが所有している色んな情報を表示できる機能
    • (氏名・部署・内部ID・所有している端末・所属メーリングリスト・などなどの社内システム)
  • 所有している情報に合わせた記事のリコメンド
  • OA問い合わせフォームや、問い合わせ内容の一覧・確認
  • 記事作成時でマジで見たままの通りに編集できる機能
    • この記事にあるように辛い思いして作った。(Vuejs 2.xからはtwowayは非推奨になって、Angular2でやればよかったかなとも思ってる。)

おお、盛りだくさん!すごそう!!と思ってもらえると幸いだが、
多分そうならないし、引き継いだ立場からすると、かなり微妙。

長くなったので一言でまとめると、「これ以上、機能追加をするのは辛いしやりたくない」ということ。

  • ん?ヘルプサイトじゃなかったっけ・・・見れると便利だろうけど、これ必要?
    • いろんなシステムを見るのが面倒だから情報を集約したかった・・・らしい。
    • いやでも、ヘルプサイトからは分けるべきでは・・・まぁここまできたら仕方は無い。
  • 内製プラグインで実現している機能は、テーマ内にあるJavaScriptに依存しているものがある。プラグインってなんだっけ。
  • セキュリティの考えが薄い感じで、なりすましで情報を抜き出せる
    • 例えば、問い合わせ内容は本来SSOしている人のものしか見れるべきではないはずだが、キー情報がJavaScriptで埋め込まれてそのまま直接Ajax連携しているので、リクエスト内容を見てcurlなどで改ざんしたリクエストを投げれば、様々な人の問い合わせ情報が取れる
  • 連携システムが多い上に、連携方式がばらばら。
  • 管理画面以外は必ずSSOチェックされる
  • 固有の画面はテーマ内にJavaScript呼び出しをふんだんに書いたTemplateを作ってWordpressの固定ページで読み込むことで実現(なので、記事の内容を書いても画面には表示されない。テンプレートってなんだっけ。そういうもの?)
  • 前任者が書いた通信失敗時のリカバリ処理が機能しない。(自分が書き直した箇所以外は。)
  • 表示に3秒以上かかってて、連携にadmin-ajaxも乱用しているせいで、表示があまりにも遅すぎてイラついて、勝手にOPCache入れた
  • 旧ログが役に立たなくて、自分でログをとるようにした
    • おかげで未知の動作がいろいろ明らかになった。例えば画面開いて30分した後に問い合わせの投稿をすると絶対失敗する条件を見つけたのも、このおかげ。普通の動作テストでやるはずだが、設計書もテスト仕様書もなかったし知る余地が無かった。
  • JavaScriptのコードが意味不明なほど長く、グローバル変数依存しまくり、汚染しまくりで変な動作していた
    • 機能追加があったタイミングで絶望しながら全部書き直したら行数が2000行以上減ってるのに同じ機能 + 追加機能が書けた。
  • Wordpressバージョンが古い。(4.1.x)

機能追加の話

でも残念ながら機能追加の話はきてしまった。
納期は12月末・・・え、待って、もう決まってるの?見積もりだした覚えないんだけど・・・と嫌な予感がしつつ、聞いてみたら

  • 問い合わせ多いから、AIを扱うシステムと連携して、問い合わせの一次回答させるような仕組み入れよう ← API叩くだけか、まあいいか
  • 所有端末が見れるなら棚卸もやってしまおう ← お、おう、棚卸機能作ってくれたらな・・・
  • 今後負荷が増えるから負荷分散しましょうねー ← え、なんで増えるん?今のままでもピークの3倍は耐えれるのに。
  • それは「マルチテナント対応」するからでーす ← 内容が見えん

「マルチテナント対応」だけは本当にわかんなかった。
ざっくりいえば、全文検索連携がいい感じだし、「他の領域も取り込んでいって一元管理して検索もここで1発でできるようにしたいよね」ということ。
他の領域というのは、OAとか営業といった領域があって、それぞれ毎にいろんなヘルプサイトがあるんだって。

ふんわりしてるなーとか思いつつ、妄想を膨らませて要件を詰めることにした。

ゴールは見えていますか?

「マルチテナント対応」っちゅーっても、そんな話ならWordpressの機能で「領域」の分類を作って区切ればええやん!
データ移行必要やけどまだ1個の領域しかあらへんし、全記事を同じ領域に紐づけるような温かみのあるSQL書けばええねん

という感じで、これで未経験者3人入れて10人月で対応はちょろいなーw俺1人で3日で出来るわ―wwとか思ってた。ほんと一瞬だけ。

特に指示はなかったけど不安だったので事前調査をしたところ、色々わかってないことだらけだった。

  • 今、OAの領域しか扱ってないし、Topページはどうするの?言われてないけどいらないの?
  • 汎用のTopページ作るの?ポータルサイト的なもの作るの?
  • サイドバーのメニューはどうするの。個別に用意するの?共通のものを用意するの?
  • 記事作成する人は領域が違えば違う人?グループ分けて、編集制限かける機能が必要?Wordpressでわけてしまうほうがよい?
  • OAなら兎に角、他の領域的には、ユーザ情報の表示とか、問い合わせとか余計な機能盛りだくさんなんだけど、こいつらはどうするの?機能削るの?
  • デザインはどうなるの?テーマ分ける?今の領域専用のテーマになってるのに?内製プラグイン見直さないとだよ?
  • SSO対応、凄い雑なんだけど、これは良いの?
  • 他システムと連携しないといけないけど、この話伝わってる?何が必要なの?
  • データ移行は発生しないの?手運用で頑張ってもらえるの?

ここに上げたのは全然話に無かった。これ以外にもまだいろいろあるけど。
もはや今入れるべきじゃないような気がする課題もあるし、技術的な課題もあるし、どういう風にしていきたいかという課題もある。

こっちはゴールが見えないと走れないよ。

ゴールが見えない不安

良く見積もりに10人月って出せたな!未経験者にどう仕事振っていけばいいのよ・・・。

自分にできるところは技術的な課題から。望むものをまず作れるかどうか考える。
根本的な所から悩んだ。Wordpressを1個でやっていくか、分けるか相当悩んだ。

マルチサイト機能は対応してないプラグインがあるし、命名規則でテーブルを増やすというゴリオシ感、マルチサイト向けデータパッチ、アップロード場所が変化する問題、開発環境上の課題(80,443が使えないのでマルチサイトが開発環境で作れない。4.1.xはポート番号指定が出来なかった。)
複数構築するとなると、コード管理が大変だし、テナント増えるたびにWordpress置くのか、どれぐらい領域が増えるかわからないしメンテし切れるのか不安。

色々悩んで複数構築の道を選んだ。メニューは個別に用意する、という話を聞いて決めた。
開発保守がめちゃくちゃ辛くなるけど、一番単純だし、これならできそう感があったから。

その後、こういう画面にしたい!って話が来て頭を抱えることになる。

  • ポータルてきなものはいらなくて、プルダウンで領域感を行き来できるかんじ! ← Wordpress複数構築だとだめじゃねーか、Wordpress同士は別に互いに意識してないんだから。
  • リコメンドで表示できる内容をウィジェット化して、ユーザにレイアウト操作させたい! ← なんだその初耳な話

後出しじゃんけんに勝てるわけないだろ!ゴールどこいった!!

全然決まらないし、要望は増えるし、もう辛い。元々の話に無いから突っぱねることもできるけど。

おしまい

10月からは人が入って本格的な開発が始まる。開発できるんだろうか。僕は人類滅亡を願うばかり。