エンジニア的なネタを毎週書くブログ

東京でWebサービスの開発をしています 【英語版やってみました】http://taichiw-e.hatenablog.com/

『複雑なドメインに泥臭く立ち向かう』JJUG CCC 2018 Fall #jjug_ccc

JJUG CCC 2018 Fallに参加し、@su_kun_1899 さんの 『複雑なドメインに泥臭く立ち向かう』というセッションに参加してまいりました。

speakerdeck.com

twitter.com


法律という完全に外部要因で決まって変えることもできないものが要件に深く絡む世界で、
どのように立ち向かっているのか、というお話でした。

今一番読みたかった本が現れたかのように感じたセッション

どうやって複雑なドメインを理解し適切にコードに落とし込むか
というのは今現在の私の最大の関心事の一つでありながら、
もう一段自分のレベルを上げたいのだけれど何を勉強したら良いかわからないのが課題でした。

そんな中、今日のセッションは

  • 自分が聞きたかった話を
  • 理解できる言葉で
  • 体系立てて

話してもらえたセッションでした。

更にいうと、一部の内容は、普段から自分がぼんやりと「思っていた*1」ことを、明確に言語化してもらった内容でした。

以下、私が感じたことが中心です。
順序も元の発表と異なります。ご了承ください。

共感したポイント

一本道を見つける

「変化は受け入れ、一本道に対して複雑さを足していくアプローチをとる」

そうなんですよね。いかに幹を見極め、枝葉と分離できるか。
いまから作ろうとしているプロダクトの背景にある真の目的はなんなのか。
それを見つけ出せることが重要なんだと思います。

モデルを抽出するするために ひたすら write & talk

とにかくなんでも良いから書き始めてみること。
脳内でウンウン考えているだけだと、自分自身が認識するのもなかなか難しい。

サービスクラスがユースケースを表す

すごくわかります。
個人的に、サービスクラスが数行でかけたら価値だと思っています。(というよりはサービスクラスがごちゃごちゃしたら負け)
taichiw.hatenablog.com

コードに書いて、動かして、初めて理解したと言える

今年の私の実体験。
単なるAPIだろうがんなんだろうが、実際に動くものを見て、触れて、初めて理解できることや気づける疑問が人間どうしてもあります。
更にこの時、クソコードだろうがなんだろうが、
とりあえずでも「動いて」、そして一応でも「読める」プログラムがあることによって、それまでに比べて格段に理解がはかどるようになります。
皆さんエンジニアですから。
(クソコードでもよいのですが、「適切な枠で切られている」ことはとっても大事。その中がクソな分には最悪差し替えれば良いのです)

「枝葉」は課題管理表にきちんと残す

「一本道の骨格を洗い出す過程で、とりあえず置いておくことに決めたものはきちんとバックログに、すぐに残すこと。」

これは悪い方向での今年の私の実体験。
途中から管理が雑になって、結局漏れた要件や、
他のメンバーから「なにそれ聞いてない!追加要件だ!」って言われてしまった*2ものがいくらか。

気づかせてもらったこと

最低限のドメインナレッジの勉強は必要

「はじめての『介護保険』」のような、初心者向けの書籍は大抵あるので、それだけでも読んでおく

これだけでもドメインエキスパートと話すときに単語の理解が捗る。

実際の業務のロールプレイをしてみる

手書きで帳票を書く、という言うようなことをしているそうです

「ユーザーストーリーマッピング

まさかの、ここでこの本。
もともと本書がターゲットにしている話題とは少し異なるが、ドメインを知ることにも使える手法がたくさんだと。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

ユーザーストーリーマッピング [ ジェフ・パットン ]
価格:3240円(税込、送料無料) (2018/12/15時点)


Talkの重要性

モデルを作り上げていく際、付箋とホワイトボードを使って「Write & Talk」を行うという話。

書くだけでなく、他のメンバーと話すことによって理解が深まっていくわけですね。
個人的にはここがうまくできていないことがあって、常に試行錯誤中…。
それぞれの箇所について1対1ではできているんだけど他のメンバーが巻き込めていなかったりとか。

*1:思うことと実践することは別です

*2:とはいえ、「枝葉」なので、後で足しても根底から設計を覆すものではなかった… はずなのですが