Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コア技術の段階的発展とチームの代謝

 コア技術の段階的発展とチームの代謝

ナビタイムジャパンの、プロダクトの発展とそれに対するチームの向き合い方についてまとめた資料です。

NAVITIME JAPAN

February 28, 2020
Tweet

More Decks by NAVITIME JAPAN

Other Decks in Business

Transcript

  1. コア技術の段階的発展と
    チームの代謝
    株式会社ナビタイムジャパン
    小田中 育生

    View full-size slide

  2. 小田中 育生 (おだなか いくお)
    (株)ナビタイムジャパン
    開発部 部長
    ACTS(研究開発) ルートグループ責任者
    ミッション
    ・経路探索のR&D
    ・全社的なカイゼン活動

    View full-size slide

  3. Recent Works
    106
    223
    352
    606
    749
    1864
    30704
    1
    10
    100
    1000
    10000
    100000
    0
    200
    400
    600
    800
    1000
    1200
    1400
    1600
    1800
    2000
    10 60 110 160 距離[km]
    距離と探索時間 GPU Kepler
    GPU Volta
    CPU
    CPU 階層1のみ
    指数関数的な
    計算時間増大を克服

    View full-size slide

  4. Recent Works

    View full-size slide

  5. コア技術の段階的発展

    View full-size slide

  6. 道路ネットワークの経路探索
    アルゴリズム コストモデル
    データ
    移動手段
    ・徒歩
    ・自転車
    ・自動車
    ・バイク
    経路探索の構成要素

    View full-size slide

  7. 自動車向け
    徒歩向け
    自転車向け
    統一
    自転車向け
    (GPU)
    発展の系譜
    横展開&個別進化期 統一期 発展期

    View full-size slide

  8. 横展開&個別進化期の課題
    自動車
    徒歩
    自転車
    ・個別に最適化されてしまう
    ・I/Fが独自進化、使う側が負担
    ・モノリシックで開発コストが高い
    別バイナリ
    ひとつひとつのコストモデルが
    別メソッドで定義

    View full-size slide

  9. 統一期への発展
    ・モジュール化
    ・交通手段を抽象化しバイナリ共通化
    ・コストモデルをパラメータ化

    View full-size slide

  10. 世はMaaS時代

    View full-size slide

  11. 開発しやすい設計が、MaaSの要望を支えた

    View full-size slide

  12. 自動車向け
    徒歩向け
    自転車向け
    統一
    自転車向け
    (GPU)
    発展の系譜
    横展開&個別進化期 統一期 発展期
    発展期

    View full-size slide

  13. 増大する計算量に対応すべくGPU対応

    View full-size slide

  14. APIは変更せず中身だけ変更
    CPU
    API
    Algorithm gRPC
    GPU
    Algorithm

    View full-size slide

  15. 互換性を保ちつつ抜本的に改善
    106
    223
    352
    606
    749
    1864
    30704
    1
    10
    100
    1000
    10000
    100000
    0
    200
    400
    600
    800
    1000
    1200
    1400
    1600
    1800
    2000
    10 60 110 160
    時間[msec]
    距離[km]
    距離と探索時間 GPU Kepler
    GPU Volta
    CPU
    CPU 階層1のみ
    指数関数的な
    計算時間増大を克服

    View full-size slide

  16. 自動車向け
    徒歩向け
    自転車向け
    統一
    自転車向け
    (GPU)
    発展の系譜
    横展開&個別進化期 統一期 発展期
    個別進化がなければ統一期はなかった
    統一期でモジュール化されていなければ
    発展期の設計は実現しなかった
    コア技術は段階的に発展していった

    View full-size slide

  17. 「目の前にあるコードが複雑で
    どうしていいかわからない」
    そんなことありませんか?
    私はあります。

    View full-size slide

  18. チームの代謝

    View full-size slide

  19. モノリシッ

    自動車向け
    徒歩向け
    自転車向け
    統一
    自転車向け
    (GPU)
    横展開&個別進化期 統一期 発展期
    この時期が長い

    View full-size slide

  20. ・C言語
    ・モノリシック
    ・テストなし
    ・交通手段別
    ・C言語
    ・モジュール化
    ・テストあり(内製FW)
    ・交通手段統合
    ・C++
    ・モジュール化
    ・テストあり(内製FW)
    ・交通手段統合
    ・C++
    ・モジュール化
    ・テストあり(外部FW)
    ・交通手段統合
    統一期の中でも段階的に発展

    View full-size slide

  21. ・C言語
    ・モジュール化
    ・テストあり(内製FW)
    ・交通手段統合
    ・C++
    ・モジュール化
    ・テストあり(内製FW)
    ・交通手段統合
    ・C++
    ・モジュール化
    ・テストあり(外部FW)
    ・交通手段統合
    ・C言語
    ・モノリシック
    ・テストなし
    ・交通手段別
    コードとしてはフルリプレイスされているが
    アーキテクチャ思想には当時の文脈が息づく

    View full-size slide

  22. ・C言語
    ・モジュール化
    ・テストあり(内製FW)
    ・交通手段統合
    ・C++
    ・モジュール化
    ・テストあり(内製FW)
    ・交通手段統合
    ・C++
    ・モジュール化
    ・テストあり(外部FW)
    ・交通手段統合
    ・C言語
    ・モノリシック
    ・テストなし
    ・交通手段別
    今いるほとんどの
    メンバーはこれ以降にジョイン
    以前の文脈を知らない

    View full-size slide

  23. 文脈を知らないゆえに
    なぜそう動いているのかわからない
    どう改修すればいいかわからない
    複雑度が低く保たれていても、
    テスト保護されていたとしても、
    コードはレガシー化する

    View full-size slide

  24. どう向き合うか
    ・調査依頼などを通したコードリーディングでの体得
    ・モブプロでチームとして未知の文脈に向き合う
    ・クラスレベルの詳細なスキルマップを作成し
    チームのナレッジを可視化(最近始めた)

    View full-size slide

  25. 文脈を知らないがゆえに悩む
    ・「機能追加したいけど元の設計と噛み合わない」
    ・「このコードは消していいのだろうか」
    ・「なぜこのテストコードはこうなってる?」

    View full-size slide

  26. モノリシッ

    自動車向け
    徒歩向け
    自転車向け
    統一
    自転車向け
    (GPU)
    横展開&個別進化期 統一期 発展期
    小田中は
    これくらいのタイミングで
    入社

    View full-size slide

  27. ・C言語
    ・モノリシック
    ・テストなし
    ・交通手段別
    ここから知ってる
    ・C言語
    ・モジュール化
    ・テストあり(内製FW)
    ・交通手段統合
    ・C++
    ・モジュール化
    ・テストあり(内製FW)
    ・交通手段統合
    ・C++
    ・モジュール化
    ・テストあり(外部FW)
    ・交通手段統合

    View full-size slide

  28. そうだ、語り部になろう

    View full-size slide

  29. 私が描く理想の段階的発展と現実
    ・自分たちが作りたいもの、自分たちにあった作り方から
    新しい文脈を作り出してほしい。過去の文脈を
    気にしすぎない
    ・気にしないためには、それが何者であるかを
    知る必要がある
    ・「昔からいるおじさん」は文脈を伝えることが使命

    View full-size slide

  30. まとめ
    ・ソフトウェアは段階的に発展する
    ・機能面も、構造面も
    ・機能面で発展を続けるには構造面の発展が不可欠
    ・チームは代謝する
    ・日本は新卒採用がある
    ・過去の文脈とはチームで向き合う
    ・古い文脈が新しい文脈に転嫁するまでは、
    語り部が必要なのかもしれない

    View full-size slide