mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

技術的負債を減らす

こんにちは、システム本部長の松岡です。

はじめに

今回はミクシィの物作りの中で、技術的な負債を返済する取り組みの一つについてご紹介します。

ミクシィは2012年8月にユニット制に移行しました。これはユーザーファーストな開発を促進するための挑戦です。
裁量権が各ユニット長に落ちることで早い判断と実施が可能になります。
反面、ソースコードがユニットごとに完全に疎結合しているわけではありませんので、早い判断と実施の結果、他のユニットに迷惑がかかるかもしれません。

いつまでも、どの開発者も困らないような開発を進めていければ、問題ないことですが、これまでの開発で負債として溜まってきた事、今後の進め方次第でいずれ行き詰まる事があるとも考えています。
そこで、負債を解消するため or 未来に積まないための対応が必要となります。

ミクシィはとても技術に理解のある会社です。
私含め経営陣から積極的に負債を返済するように、エンジニアに働きかけがありました。

この記事は2012年の4月から始まったこの試みが、実際どのように進んでいるかの紹介です。

進め方

  1. 見える化する
  2. 状況を把握する
  3. 適切なミッションを設定する

見える化することは非常に重要です。
お互いの主観で、ソースコードが汚い、システムが汚い、XXXという案件のリリースのほうが重要だ、と言い合っても解決には向かいません。
ミクシィでは、主となる言語であるPerlについてこちらでご紹介したような取り組みで見える化を行なっています。
mixiのコードは近年Perlにとどまりません。JavaScriptについても同様の取り組みが行われています。反面Objective-C, javaについてはこれからの課題です。更に近年ミクシィではRubyやphp、Pythonで書かれるコードも増えつつあり、我々の頭を悩ませております。

状況の把握についてはこれのビジュアライザを用意しています。
社内ですべてのエンジニアが気軽に、どのコミットが全体にどんな影響を与えたのかが分かるようになっています。
このあたりは近日中に goccy からご紹介させていただけたらと思います。

適切なミッション設定につきましては、各技術に責任を持つトップエンジニアが各ユニットの技術担当者にヒアリングを行い、それぞれの状況に合わせた目標設定を共に行います。

ヒアリングシート

今回は以下の様なヒアリングシートを用意しました。

  • 自分の担当しているlib/Mixi配下名前空間は技術文書にまとまっているものと相違ないですか?なければそのまま、あればそれも含めてリスト化してください
  • 自分の担当している.jsをリスト化して下さい
    • Prototype.jsとjQueryが混在しているものをリスト化して下さい
    • 新旧Namespaceが混在しているものをリスト化して下さい
    • 担当しているJSの中でガイドラインに沿っているものは何%程度でしょうか?
  • 担当しているlib/Mixiについて把握して下さい。
    • 現在の単体テストコードの実行時間
    • 半年前と比較してテストの数は増えているか(微増/25%増/50%増/倍増/ のいずれか)
    • コードの複雑性解析ツールの各値とその推移(半年前との数値比較)
    • internal/externalなAPI化されるべきと考えていてまだされていない関数の規模感(0/10個/30個/50個以上/ のいずれか)
  • チーム内でナレッジシェアを行なっているのであればその方法
    • 行っていない場合、取り組んでみたい方法があるか?(複数回答可)
  • その他

このシートは、基盤を用意している各部隊長と、横断的な技術に責任を持つ各技術系委員会で事前に状況把握を行った上で、「こうしたい」というものをまとめたものです。
これの回答を元に、各ユニットに存在する技術的負債を比較し、どこまでどう対応するかを決めていきます。
今回はこの作業を yoichiro と masartz が中心に行なってくれました。

各項目の詳細についてはそれぞれ1つの記事が書けると思いますので、少々お待ち下さい。

今後の取組

技術的負債の見える化はまだまだその道の途中です。
ビジュアライザはPerlしかなく、多言語対応の必要性があります。
また、循環的依存度等の、現在ミクシィで取得できている数値に現れない問題も多くあるはずで、それも見える化する何かを考えねばなりません。
今後も基盤に責任をもっている部隊であるシステム本部や、各種技術系委員会はこういった取り組みを加速させていきます。

まとめ

以上のように、ミクシィではただ製品を作れば良いというような乱暴な開発はしておりません。開発出力を最大化させることに強い関心を持っています。
別でご紹介したものを始めとして、リリースには様々なレビューがありますし、自動テストは常に回っています。それでも生まれてしまうものや、放置されてしまったものについては今回のような取り組みでその解決を目指しています。

まだまだ未熟な開発体制ではあると思いますが、これからも多くの取り組みを行なっていきます。その際はご紹介させてください。

最後に、我々はこういった開発を共に行う仲間をいつでも募集しております。
もし興味を持っていただけましたら、こちらからいつでもご連絡ください。